diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 00000000000..34e99e5f0fc --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,12 @@ +# Browsers we support +# See https://github.com/browserslist/browserslist for details + +> 0.25% +ios_saf 9.3 +ios_saf 10.3 +ios_saf 13.7 +ios_saf 14.8 +not dead +not and_uc 12.12 +not ie 11 + diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ad33e590d09..5303890ef87 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,11 +37,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -52,7 +52,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -66,4 +66,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f7fcd73400d..b3d49dc6332 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,15 +16,15 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [12.x, 14.x, 16.x] - mongodb-version: [4.2, 4.4] + node-version: [14.x, 16.x] + mongodb-version: [4.4, 5.0, 6.0] steps: - name: Git Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} @@ -60,7 +60,7 @@ jobs: password: ${{ secrets.DOCKER_PASS }} - name: Clean git Checkout if: success() - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build, tag and push the dev Docker image if: success() && github.ref == 'refs/heads/dev' uses: docker/build-push-action@v2 diff --git a/.nvmrc b/.nvmrc index 19c4c189d36..0ff38047bb8 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -14.15.3 +16.16.0 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 304d1290924..279d1f21eb3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.15.3-alpine +FROM node:16.16.0-alpine LABEL maintainer="Nightscout Contributors" diff --git a/README.md b/README.md index 767d954eeca..3123ec3f4af 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ Nightscout Web Monitor (a.k.a. cgm-remote-monitor) -====================================== +================================================== ![nightscout horizontal](https://cloud.githubusercontent.com/assets/751143/8425633/93c94dc0-1ebc-11e5-99e7-71a8f464caac.png) @@ -9,8 +9,6 @@ Nightscout Web Monitor (a.k.a. cgm-remote-monitor) [![Codacy Badge][codacy-img]][codacy-url] [![Discord chat][discord-img]][discord-url] -[![Deploy to Heroku][heroku-img]][heroku-url] [![Update your site][update-img]][update-fork] - This acts as a web-based CGM (Continuous Glucose Monitor) to allow multiple caregivers to remotely view a patient's glucose data in real time. The server reads a MongoDB which is intended to be data @@ -105,8 +103,9 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) - [`treatmentnotify` (Treatment Notifications)](#treatmentnotify-treatment-notifications) - [`basal` (Basal Profile)](#basal-basal-profile) - [`bolus` (Bolus Rendering)](#bolus-bolus-rendering) - - [`bridge` (Share2Nightscout bridge)](#bridge-share2nightscout-bridge) - - [`mmconnect` (MiniMed Connect bridge)](#mmconnect-minimed-connect-bridge) + - [`connect` (Nightscout Connect)](#connect-nightscout-connect) + - [`bridge` (Share2Nightscout bridge)](#bridge-share2nightscout-bridge), _deprecated_ + - [`mmconnect` (MiniMed Connect bridge)](#mmconnect-minimed-connect-bridge), _deprecated_ - [`pump` (Pump Monitoring)](#pump-pump-monitoring) - [`openaps` (OpenAPS)](#openaps-openaps) - [`loop` (Loop)](#loop-loop) @@ -132,40 +131,38 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) ## Supported configurations: -If you plan to use Nightscout, we recommend using [Heroku](https://nightscout.github.io/nightscout/new_user/) as this is free and easy to use. -We used to recommend hostig at Azure, but the resource needs of Nightscout have grown over the years and Azure won't comfortably run Nightscout -anymore in the free tier. If you're hosting in Azure and looking to update your site, we recommend you -[switch from Azure to Heroku](http://openaps.readthedocs.io/en/latest/docs/While%20You%20Wait%20For%20Gear/nightscout-setup.html#switching-from-azure-to-heroku) -as you're likely to hit issues in the process of updating the site. - -- [Nightscout Setup with Heroku](https://nightscout.github.io/nightscout/new_user/) (recommended) +- [Nightscout Setup](https://nightscout.github.io/nightscout/new_user/) (recommended) While you can install Nightscout on a virtual server or a Raspberry Pi, we do not recommend this unless you have at least some -experience hosting Node applications and development using the toolchain in use with Nightscout. Heroku automates all of the -hosting for you and even many of the dvelopers run their production sites in Heroku due to convenience. +experience hosting Node applications and development using the toolchain in use with Nightscout. -If you're a hosting provider and want to provide our users additional free hosting options, +If you're a hosting provider and want to provide our users additional hosting options, you're welcome to issue a documentation pull request with instructions on how to setup Nightscout on your system. ## Recommended minimum browser versions for using Nightscout: -Older versions of the browsers might work, but are untested. +Our [browserslist](https://github.com/browserslist/browserslist) policy is documented in `.browserlistrc`. +We currently support approximately [91%](https://browsersl.ist/?q=%3E+0.25%25%2C+ios_saf+9.3%2C+ios_saf+10.3%2C+ios_saf+13.7%2C+ios_saf+14.8%2C+not+dead%2C+not+and_uc+12.12%2C+not+ie+11%0A) of all browsers globally used. These include: + +- Android Chrome: 104 or later (`and_chr`) +- Google Chrome: 101 or later (`chrome`) +- Microsoft Edge: 103 or later (`edge`) +- Mozilla Firefox: 102 or later (`firefox`) +- Apple Safari on iOS: 15.5 or later (`ios_saf`) +- Opera Mini on Android: 63 or later (`op_mini`) +- Opera: 88 or later (`opera`) +- Apple Safari for macOS 10.15 Catalina or later: : 15.5 or later (`safari`) +- Samsung Internet on Android: 17.0 or later (`samsung`) +- Internet Explorer 11 : not supported -- Android 4 -- iOS 6 -- Chrome 35 -- Edge 17 -- Firefox 61 -- Opera 12.1 -- Safari 6 (macOS 10.7) -- Internet Explorer: not supported +Older versions or other browsers might work, but are untested and unsupported. We'll try to to keep Nightscout compatible with older iPads (e.g. Safari on iOS 10.3.4), but note that those devices are not supported by Apple anymore and have known security issues. Debugging these old devices gets harder due to Apple not supporting debugging the old devices on Macs that have been updated. Some features may not work with devices/browsers on the older end of these requirements. -Some features may not work with devices/browsers on the older end of these requirements. -## Windows installation software requirements: -- [Node.js](http://nodejs.org/) Latest Node 12 LTS. Node versions that do not have the latest security patches will not work. Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `bin/setup.sh`) -- [MongoDB](https://www.mongodb.com/download-center?jmp=nav#community) 3.x or later. MongoDB 2.4 is only supported for Raspberry Pi. +## Installation software requirements: + +- [Node.js](http://nodejs.org/) Latest Node v14 or v16 LTS. Node versions that do not have the latest security patches will not be supported. Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `bin/setup.sh`) +- [MongoDB](https://www.mongodb.com/download-center?jmp=nav#community) 4.2 or 4.4. As a non-root user clone this repo then install dependencies into the root of the project: @@ -184,7 +181,7 @@ $ npm install - If deploying the software to Microsoft Azure, you must set ** in the app settings for *WEBSITE_NODE_DEFAULT_VERSION* and *SCM_COMMAND_IDLE_TIMEOUT* **before** you deploy the latest Nightscout or the site deployment will likely fail. Other hosting environments do not require this setting. Additionally, if using the Azure free hosting tier, the installation might fail due to resource constraints imposed by Azure on the free hosting. Please set the following settings to the environment in Azure: ``` -WEBSITE_NODE_DEFAULT_VERSION=10.15.2 +WEBSITE_NODE_DEFAULT_VERSION=16.16.0 SCM_COMMAND_IDLE_TIMEOUT=300 ``` - See [install MongoDB, Node.js, and Nightscouton a single Windows system](https://github.com/jaylagorio/Nightscout-on-Windows-Server). if you want to host your Nightscout outside of the cloud. Although the instructions are intended for Windows Server the procedure is compatible with client versions of Windows such as Windows 7 and Windows 10. @@ -232,7 +229,7 @@ Once you've installed Nightscout, you can access API documentation by loading `/ * Boluses over 2U: `http://localhost:1337/api/v1/treatments.json?find[insulin][$gte]=2` The API is Swagger enabled, so you can generate client code to make working with the API easy. -To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or review [swagger.yaml](swagger.yaml). +To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or review [swagger.yaml](lib/server/swagger.yaml). ## Environment @@ -256,6 +253,14 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or * `IMPORT_CONFIG` - Used to import settings and extended settings from a url such as a gist. Structure of file should be something like: `{"settings": {"theme": "colors"}, "extendedSettings": {"upbat": {"enableAlerts": true}}}` * `TREATMENTS_AUTH` (`on`) - possible values `on` or `off`. Deprecated, if set to `off` the `careportal` role will be added to `AUTH_DEFAULT_ROLES` +#### Data Rights + +These are useful to help protect your rights to portability and +autonomy for your data: + * `OBSCURED` - list, identical to `ENABLE`, a list of plugins to + obscure. + * `OBSCURE_DEVICE_PROVENANCE` - Required, a string visible to the [companies deciding to filter based on your data](https://help.sugarmate.io/en/articles/4673402-adding-a-nightscout-data-source). For example, `my-data-rights`. + ### Alarms These alarm setting affect all delivery methods (browser, Pushover, IFTTT, etc.). Values and settings entered here will be the defaults for new browser views, but will be overridden if different choices are made in the settings UI. @@ -484,8 +489,98 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or * `BOLUS_RENDER_FORMAT` (`default`) - Possible values are `hidden`, `default` (with leading zero and U), `concise` (with U, without leading zero), and `minimal` (without leading zero and U). * `BOLUS_RENDER_FORMAT_SMALL` (`default`) - Possible values are `hidden`, `default` (with leading zero and U), `concise` (with U, without leading zero), and `minimal` (without leading zero and U). +##### `connect` (Nightscout Connect) + +Connect common diabetes cloud resources to Nightscout. +Include the keyword `connect` in the `ENABLE` list. +Nightscout connection uses extended settings using the environment variable prefix `CONNECT_`. + * `CONNECT_SOURCE` - The name for the source of one of the supported inputs. one of `nightscout`, `dexcomshare`, etc... +###### Nightscout + +> Work in progress + +To sync from another Nightscout site, include `CONNECT_SOURCE_ENDPOINT` and +`CONNECT_SOURCE_API_SECRET`. +* `CONNECT_SOURCE=nightscout` +* `CONNECT_SOURCE_ENDPOINT=` +* `CONNECT_SOURCE_API_SECRET=` + +The `CONNECT_SOURCE_ENDPOINT` must be a fully qualified URL and may contain a +`?token=` query string to specify an accessToken. +The `CONNECT_SOURCE_API_SECRET`, if provided, will be used to create a token +called `nightscout-connect-reader`. This information or the token provided in +the query will be used to read information from Nightscout and is optional if +the site is readable by default. + +Select this driver by setting `CONNECT_SOURCE` equal to `nightscout`. + + + +###### Dexcom Share +To synchronize from Dexcom Share use the following variables. +* `CONNECT_SOURCE=dexcomshare` +* `CONNECT_SHARE_ACCOUNT_NAME=` +* `CONNECT_SHARE_PASSWORD=` + +Optional, `CONNECT_SHARE_REGION` and `CONNECT_SHARE_SERVER` do the same thing, only specify one. +* `CONNECT_SHARE_REGION=` `ous` or `us`. `us` is the default if nothing is + provided. Selecting `us` sets `CONNECT_SHARE_SERVER` to `share2.dexcom.com`. + Selecting `ous` here sets `CONNECT_SHARE_SERVER` to `shareous1.dexcom.com`. +* `CONNECT_SHARE_SERVER=` set the server domain to use. + + +###### Glooko + +> Note: Experimental. + +To synchronize from Glooko use the following variables. +* `CONNECT_SOURCE=glooko` +* `CONNECT_GLOOKO_EMAIL=` +* `CONNECT_GLOOKO_PASSWORD=` + +By default, `CONNECT_GLOOKO_SERVER` is set to `api.glooko.com` because the +default value for `CONNECT_GLOOKO_ENV` is `default`. +* `CONNECT_GLOOKO_ENV` is the word `default` by defalt. Other values are + `development`, `production`, for `api.glooko.work`, and + `externalapi.glooko.com`, respectively. +* `CONNECT_GLOOKO_SERVER` the hostname server to use - `api.glooko.com` by `default`. + +If both, `CONNECT_GLOOKO_SERVER` and `CONNECT_GLOOKO_ENV` are set, only +`CONNECT_GLOOKO_SERVER` will be used. + +###### Libre Link Up +To synchronize from Libre Link Up use the following variables. +* `CONNECT_SOURCE=linkup` +* `CONNECT_LINK_UP_USERNAME=` +* `CONNECT_LINK_UP_PASSWORD=` + +By default, `CONNECT_LINK_UP_SERVER` is set to `api-eu.libreview.io` because the +default value for `CONNECT_LINK_UP_REGION` is `EU`. +Other available values for `CONNECT_LINK_UP_REGION`: + * `US`, `EU`, `DE`, `FR`, `JP`, `AP`, `AU`, `AE` + +For folks connected to many patients, you can provide the patient ID by setting +the `CONNECT_LINK_UP_PATIENT_ID` variable. + +###### Minimed Carelink + +To synchronize from Medtronic Minimed Carelink, set the following +environment variables. +* `CONNECT_SOURCE=minimedcarelink` +* `CONNECT_CARELINK_USERNAME` +* `CONNECT_CARELINK_PASSWORD` +* `CONNECT_CARELINK_REGION` Either `eu` to set `CONNECT_CARELINK_SERVER` to + `carelink.minimed.eu` or `us` to use `carelink.minimed.com`. + +For folks using the new Many to Many feature, please provide the username of the +patient to follow using `CONNECT_CARELINK_PATIENT_USERNAME` variable. + + ##### `bridge` (Share2Nightscout bridge) - Glucose reading directly from the Dexcom Share service, uses these extended settings: + +> **Deprecated** Please consider using the `connect` plugin instead. + +Fetch glucose reading directly from the Dexcom Share service, uses these extended settings: * `BRIDGE_USER_NAME` - Your username for the Share service. * `BRIDGE_PASSWORD` - Your password for the Share service. * `BRIDGE_INTERVAL` (`150000` *2.5 minutes*) - The time (in milliseconds) to wait between each update. @@ -496,6 +591,9 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or * `BRIDGE_SERVER` (``) - The default blank value is used to fetch data from Dexcom servers in the US. Set to (`EU`) to fetch from European servers instead. ##### `mmconnect` (MiniMed Connect bridge) + +> **Deprecated** Please consider using the `connect` plugin instead. + Transfer real-time MiniMed Connect data from the Medtronic CareLink server into Nightscout ([read more](https://github.com/mddub/minimed-connect-to-nightscout)) * `MMCONNECT_USER_NAME` - Your user name for CareLink Connect. * `MMCONNECT_PASSWORD` - Your password for CareLink Connect. diff --git a/app.json b/app.json index 9f77094f565..7bf58f03247 100644 --- a/app.json +++ b/app.json @@ -151,6 +151,11 @@ "description": "Default setting for new browser views, for the time mode. ('12' or '24')", "value": "12", "required": false + }, + "USE_NPM_INSTALL": { + "description": "You need to have this set for deployment to work in Heroku", + "value": "true", + "required": true } }, "addons": [ diff --git a/azuredeploy.json b/azuredeploy.json index bff5e3c41f7..1ec7524c56c 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -218,7 +218,7 @@ }, "WEBSITE_NODE_DEFAULT_VERSION": { "type": "string", - "defaultValue": "8.11.1" + "defaultValue": "16.16.0" } }, "resources": [{ diff --git a/bundle/bundle.source.js b/bundle/bundle.source.js index 85d68097387..2504c9bfed5 100644 --- a/bundle/bundle.source.js +++ b/bundle/bundle.source.js @@ -18,14 +18,20 @@ require('../node_modules/flot/jquery.flot.time'); require('../node_modules/flot/jquery.flot.pie'); require('../node_modules/flot/jquery.flot.fillbetween'); -window.moment = require('moment-timezone'); +const moment = require('moment-timezone'); + +window.moment = moment; window.Nightscout = window.Nightscout || {}; +var ctx = { + moment: moment +}; + window.Nightscout = { client: require('../lib/client'), units: require('../lib/units')(), - admin_plugins: require('../lib/admin_plugins/')() + admin_plugins: require('../lib/admin_plugins/')(ctx) }; window.Nightscout.report_plugins_preinit = require('../lib/report_plugins/'); diff --git a/docker-compose.yml b/docker-compose.yml index b757f89d370..6e0e5dd1ab5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,18 @@ version: '3' +x-logging: + &default-logging + options: + max-size: '10m' + max-file: '5' + driver: json-file + services: mongo: image: mongo:4.4 volumes: - ${NS_MONGO_DATA_DIR:-./mongo-data}:/data/db:cached + logging: *default-logging nightscout: image: nightscout/cgm-remote-monitor:latest @@ -19,6 +27,7 @@ services: - 'traefik.http.routers.nightscout.rule=Host(`localhost`)' - 'traefik.http.routers.nightscout.entrypoints=websecure' - 'traefik.http.routers.nightscout.tls.certresolver=le' + logging: *default-logging environment: ### Variables for the container NODE_ENV: production @@ -74,3 +83,4 @@ services: volumes: - './letsencrypt:/letsencrypt' - '/var/run/docker.sock:/var/run/docker.sock:ro' + logging: *default-logging diff --git a/lib/admin_plugins/cleanentriesdb.js b/lib/admin_plugins/cleanentriesdb.js index 3793eef8ffd..c13bfc48109 100644 --- a/lib/admin_plugins/cleanentriesdb.js +++ b/lib/admin_plugins/cleanentriesdb.js @@ -1,6 +1,6 @@ 'use strict'; -var moment = require('moment'); +var moment; var cleanentriesdb = { name: 'cleanentriesdb' @@ -8,7 +8,8 @@ var cleanentriesdb = { , pluginType: 'admin' }; -function init() { +function init(ctx) { + moment = ctx.moment; return cleanentriesdb; } diff --git a/lib/admin_plugins/cleanstatusdb.js b/lib/admin_plugins/cleanstatusdb.js index 29fb99bae16..44772f0de47 100644 --- a/lib/admin_plugins/cleanstatusdb.js +++ b/lib/admin_plugins/cleanstatusdb.js @@ -1,6 +1,6 @@ 'use strict'; -var moment = require('moment'); +var moment; var cleanstatusdb = { name: 'cleanstatusdb' @@ -8,7 +8,8 @@ var cleanstatusdb = { , pluginType: 'admin' }; -function init () { +function init (ctx) { + moment = ctx.moment; return cleanstatusdb; } diff --git a/lib/admin_plugins/cleantreatmentsdb.js b/lib/admin_plugins/cleantreatmentsdb.js index a8cc725fd82..bd5d3c52087 100644 --- a/lib/admin_plugins/cleantreatmentsdb.js +++ b/lib/admin_plugins/cleantreatmentsdb.js @@ -1,6 +1,6 @@ 'use strict'; -var moment = require('moment'); +var moment; var cleantreatmentsdb = { name: 'cleantreatmentsdb' @@ -8,7 +8,8 @@ var cleantreatmentsdb = { , pluginType: 'admin' }; -function init() { +function init(ctx) { + moment = ctx.moment; return cleantreatmentsdb; } diff --git a/lib/admin_plugins/index.js b/lib/admin_plugins/index.js index 224054538d1..8bc3f1ae0ba 100644 --- a/lib/admin_plugins/index.js +++ b/lib/admin_plugins/index.js @@ -3,14 +3,14 @@ var _find = require('lodash/find'); var _each = require('lodash/each'); -function init() { +function init(ctx) { var allPlugins = [ - require('./subjects')() - , require('./roles')() - , require('./cleanstatusdb')() - , require('./cleantreatmentsdb')() - , require('./cleanentriesdb')() - , require('./futureitems')() + require('./subjects')(ctx) + , require('./roles')(ctx) + , require('./cleanstatusdb')(ctx) + , require('./cleantreatmentsdb')(ctx) + , require('./cleanentriesdb')(ctx) + , require('./futureitems')(ctx) ]; function plugins(name) { diff --git a/lib/api/activity/index.js b/lib/api/activity/index.js index 7d67926b4d0..ca1f7572ca6 100644 --- a/lib/api/activity/index.js +++ b/lib/api/activity/index.js @@ -88,7 +88,7 @@ function configure(app, wares, ctx) { api.post('/activity/', ctx.authorization.isPermitted('api:activity:create'), post_response); api.delete('/activity/:_id', ctx.authorization.isPermitted('api:activity:delete'), function(req, res) { - ctx.activity.remove(req.params._id, function() { + ctx.activity.deleteOne(req.params._id, function() { res.json({}); }); }); diff --git a/lib/api/alexa/index.js b/lib/api/alexa/index.js index d85cf1274d8..fcdaa2c012b 100644 --- a/lib/api/alexa/index.js +++ b/lib/api/alexa/index.js @@ -94,7 +94,7 @@ function configure (app, wares, ctx, env) { var handler = ctx.alexa.getIntentHandler(intentName, metric); if (handler){ - var sbx = initializeSandbox(); + var sbx = ctx.sbx; handler(next, slots, sbx); return; } else { @@ -103,13 +103,6 @@ function configure (app, wares, ctx, env) { } } - function initializeSandbox() { - var sbx = require('../../sandbox')(); - sbx.serverInit(env, ctx); - ctx.plugins.setProperties(sbx); - return sbx; - } - return api; } diff --git a/lib/api/entries/index.js b/lib/api/entries/index.js index 6382e4fa2af..0f1113ab2c6 100644 --- a/lib/api/entries/index.js +++ b/lib/api/entries/index.js @@ -472,14 +472,16 @@ function configure (app, wares, ctx, env) { }); } else { inMemoryCollection = ctx.cache.getData('entries'); - - inMemoryCollection = _.sortBy(inMemoryCollection, function(item) { - return item.mills; - }).reverse(); } if (inMemoryPossible && query.count <= inMemoryCollection.length) { res.entries = _.cloneDeep(_.take(inMemoryCollection,query.count)); + + for (let i = 0; i < res.entries.length; i++) { + let e = res.entries[i]; + e.mills = e.mills || e.date; + } + res.entries_err = null; return next(); } diff --git a/lib/api/food/index.js b/lib/api/food/index.js index 5db962db403..fbd56ceefd8 100644 --- a/lib/api/food/index.js +++ b/lib/api/food/index.js @@ -71,7 +71,7 @@ function configure (app, wares, ctx) { }); // delete record api.delete('/food/:_id', ctx.authorization.isPermitted('api:food:delete'), function(req, res) { - ctx.food.remove(req.params._id, function ( ) { + ctx.food.deleteOne(req.params._id, function ( ) { res.json({ }); }); }); diff --git a/lib/api/googlehome/index.js b/lib/api/googlehome/index.js index d2a33ce5f4b..d5f8eefdb53 100644 --- a/lib/api/googlehome/index.js +++ b/lib/api/googlehome/index.js @@ -31,7 +31,7 @@ function configure (app, wares, ctx, env) { var handler = ctx.googleHome.getIntentHandler(req.body.queryResult.intent.displayName, req.body.queryResult.parameters.metric); if (handler){ - var sbx = initializeSandbox(); + var sbx = ctx.sbx; handler(function (title, response) { res.json(ctx.googleHome.buildSpeechletResponse(response, false)); next( ); @@ -46,13 +46,6 @@ function configure (app, wares, ctx, env) { ctx.virtAsstBase.setupMutualIntents(ctx.googleHome); - function initializeSandbox() { - var sbx = require('../../sandbox')(); - sbx.serverInit(env, ctx); - ctx.plugins.setProperties(sbx); - return sbx; - } - return api; } diff --git a/lib/api/notifications-api.js b/lib/api/notifications-api.js index d08a03a7ead..7d8ebafd8dd 100644 --- a/lib/api/notifications-api.js +++ b/lib/api/notifications-api.js @@ -1,12 +1,16 @@ 'use strict'; var consts = require('../constants'); +var bodyParser = require('body-parser'); function configure (app, wares, ctx) { var express = require('express') , api = express.Router( ) ; + app.use(bodyParser.urlencoded({extended : true})); + app.use(bodyParser.json()); + api.post('/notifications/pushovercallback', function (req, res) { if (ctx.pushnotify.pushoverAck(req.body)) { res.sendStatus(consts.HTTP_OK); diff --git a/lib/api/profile/index.js b/lib/api/profile/index.js index 57cce59e69a..9b6e1960a1a 100644 --- a/lib/api/profile/index.js +++ b/lib/api/profile/index.js @@ -92,7 +92,7 @@ function configure (app, wares, ctx) { }); api.delete('/profile/:_id', ctx.authorization.isPermitted('api:profile:delete'), function(req, res) { - ctx.profile.remove(req.params._id, function ( ) { + ctx.profile.deleteOne(req.params._id, function ( ) { res.json({ }); }); }); diff --git a/lib/api/treatments/index.js b/lib/api/treatments/index.js index fc009ae1835..996c646a02d 100644 --- a/lib/api/treatments/index.js +++ b/lib/api/treatments/index.js @@ -63,18 +63,20 @@ function configure (app, wares, ctx, env) { } }); - if (!_isNil(d1)) res.setHeader('Last-Modified', d1.toUTCString()); - - if (ifModifiedSince && d1.getTime() <= moment(ifModifiedSince).valueOf()) { - res.status(304).send({ - status: 304 - , message: 'Not modified' - , type: 'internal' - }); - return; - } else { - return res.json(results); + if (!_isNil(d1)) { + res.setHeader('Last-Modified', d1.toUTCString()); + + if (ifModifiedSince && d1.getTime() <= moment(ifModifiedSince).valueOf()) { + res.status(304).send({ + status: 304 + , message: 'Not modified' + , type: 'internal' + }); + return; + } } + + return res.json(results); } // List treatments available diff --git a/lib/api2/index.js b/lib/api2/index.js new file mode 100644 index 00000000000..9e5653047c1 --- /dev/null +++ b/lib/api2/index.js @@ -0,0 +1,22 @@ +'use strict'; + +function create (env, ctx, apiv1) { + var express = require('express') + , app = express( ) + ; + + const ddata = require('../data/endpoints')(env, ctx); + const notificationsV2 = require('./notifications-v2')(app, ctx); + const summary = require('./summary')(env, ctx); + + app.use('/', apiv1); + app.use('/properties', ctx.properties); + app.use('/authorization', ctx.authorization.endpoints); + app.use('/ddata', ddata); + app.use('/notifications', notificationsV2); + app.use('/summary', summary); + + return app; +} + +module.exports = create; diff --git a/lib/api/notifications-v2.js b/lib/api2/notifications-v2.js similarity index 100% rename from lib/api/notifications-v2.js rename to lib/api2/notifications-v2.js diff --git a/lib/api/properties.js b/lib/api2/properties.js similarity index 80% rename from lib/api/properties.js rename to lib/api2/properties.js index 7e9fd88ebab..61334f8a3f3 100644 --- a/lib/api/properties.js +++ b/lib/api2/properties.js @@ -18,11 +18,11 @@ function create (env, ctx) { * * Expecting to define extended syntax and support for several query params */ + properties.use(ctx.authorization.isPermitted('api:entries:read'), + ctx.authorization.isPermitted('api:treatments:read')); properties.get(['/', '/*'], function getProperties (req, res) { - var sbx = sandbox.serverInit(env, ctx); - - ctx.plugins.setProperties(sbx); + if (!ctx.sbx) res.json({}); function notEmpty (part) { return ! _isEmpty(part); @@ -36,10 +36,10 @@ function create (env, ctx) { selected = _filter(segments[0].split(','), notEmpty); } - var result = sbx.properties; + var result = ctx.sbx.properties; if (selected.length > 0) { - result = _pick(sbx.properties, selected); + result = _pick(ctx.sbx.properties, selected); } result = env.settings.filteredSettings(result); @@ -57,4 +57,4 @@ function create (env, ctx) { return properties; } -module.exports = create; \ No newline at end of file +module.exports = create; diff --git a/lib/api2/summary/basaldataprocessor.js b/lib/api2/summary/basaldataprocessor.js new file mode 100644 index 00000000000..67ff6c8b99a --- /dev/null +++ b/lib/api2/summary/basaldataprocessor.js @@ -0,0 +1,139 @@ +const { data } = require("jquery"); + +const dataProcessor = {}; + +function _hhmmAfter (hhmm, mills) { + var date = new Date(mills); + var withSameDate = new Date( + 1900 + date.getYear() + , date.getMonth() + , date.getDate() + , parseInt(hhmm.substr(0, 2), 10) + , parseInt(hhmm.substr(3, 5), 10) + ).getTime(); + return withSameDate > date ? withSameDate : withSameDate + 24 * 60 * 60 * 1000; +} + +// Outputs temp basal objects describing the profile temps for the duration +function _profileBasalsInWindow (basals, start, end) { + if (basals.length === 0) { + return []; + } + + var i; + var out = []; + + function nextProfileBasal () { + i = (i + 1) % basals.length; + var lastStart = out[out.length - 1].start; + return { + start: _hhmmAfter(basals[i]['time'], lastStart) + , absolute: parseFloat(basals[i]['value']) + , profile: 1 + }; + } + + i = 0; + var startHHMM = new Date(start).toTimeString().substr(0, 5); + while (i < basals.length - 1 && basals[i + 1]['time'] <= startHHMM) { + i++; + } + out.push({ + start: start + , absolute: parseFloat(basals[i]['value']) + , }); + + var next = nextProfileBasal(); + while (next.start < end) { + out.push(next); + next = nextProfileBasal(); + } + + return out; +} + +dataProcessor.filterSameAbsTemps = function filterSameAbsTemps (tempdata) { + + var out = []; + var j = 0; + + for (let i = 0; i < tempdata.length; i++) { + const temp = tempdata[i]; + + if (i == tempdata.length - 1) { + // If last was merged, skip + if (j != i) { + out.push(temp); + } + break; + } + + const nextTemp = tempdata[i + 1]; + + if (temp.duration && (temp.start + temp.duration) >= nextTemp.start) { + if (temp.absolute == nextTemp.absolute) { + // Merge and skip next + temp.duration = nextTemp.start - temp.start + nextTemp.duration; + i += 1; + j = i; + } else { + // Adjust duration + temp.duration = nextTemp.start - temp.start; + } + } + out.push(temp); + } + return out; +} + +dataProcessor.processTempBasals = function processTempBasals (profile, tempBasals, dataCap) { + var profileBasals = profile.basal; + var temps = tempBasals.map(function(temp) { + return { + start: new Date(temp['created_at']).getTime() + , duration: temp['duration'] === undefined ? 0 : parseInt(temp['duration'], 10) * 60 * 1000 + , absolute: temp['absolute'] === undefined ? 0 : parseFloat(temp['absolute']) + }; + }).concat([ + { start: Date.now() - 24 * 60 * 60 * 1000, duration: 0 } + , { start: Date.now(), duration: 0} + ]).sort(function(a, b) { + return a.start - b.start; + }); + + var out = []; + temps.forEach(function(temp) { + var last = out[out.length - 1]; + if (last && last.duration !== undefined && last.start + last.duration < temp.start) { + Array.prototype.push.apply(out, _profileBasalsInWindow(profileBasals, last.start + last.duration, temp.start)); + } + if (temp.duration) out.push(temp); + }); + + var o2 = out; + var prevLength = 1; + var newLength = 0; + + while (prevLength != newLength) { + prevLength = o2.length; + o2 = dataProcessor.filterSameAbsTemps(o2); + newLength = o2.length; + } + + var o3 = []; + + // Return temps from last hours + for (var i = 0; i < o2.length; i++) { + if ((o2[i].start + o2[i].duration) > dataCap) o3.push(o2[i]); + } + + // Convert durations to seconds + + for (var i = 0; i < o3.length; i++) { + o3[i].duration = o3[i].duration / 1000; + } + + return o3; +} + +module.exports = dataProcessor; diff --git a/lib/api2/summary/index.js b/lib/api2/summary/index.js new file mode 100644 index 00000000000..31deec2c76b --- /dev/null +++ b/lib/api2/summary/index.js @@ -0,0 +1,135 @@ +'use strict'; + +function configure (env, ctx) { + const _ = require('lodash') + , basalProcessor = require('./basaldataprocessor') + , express = require('express') + , api = express.Router(); + + const defaultHours = 6; + + api.use(ctx.wares.compression()); + + function removeProps(obj,keys){ + if(Array.isArray(obj)){ + obj.forEach(function(item){ + removeProps(item,keys) + }); + } + else if(typeof obj === 'object' && obj != null){ + Object.getOwnPropertyNames(obj).forEach(function(key){ + if(keys.indexOf(key) !== -1)delete obj[key]; + else removeProps(obj[key],keys); + }); + } + } + + function processSGVs(sgvs, hours) { + + const bgData = []; + const dataCap = Date.now() - (hours * 60 * 60 * 1000); + + for (let i = 0; i < sgvs.length; i++) { + const bg = sgvs[i]; + if (bg.mills >= dataCap) { + + let item = { + sgv: bg.mgdl + , mills: bg.mills + }; + + // only push noise data if there is noise + if (bg.noise != 1) { item.noise = bg.noise; } + bgData.push(item); + + } + } + return bgData; + } + + // Collect treatments that contain insulin or carbs, temp basals + function processTreatments(treatments, profile, hours) { + + const rVal = { + tempBasals: [], + treatments: [], + targets: [] + }; + + let _temps = []; + const dataCap = Date.now() - (hours * 60 * 60 * 1000); + + for (let i = 0; i < treatments.length; i++) { + const t = treatments[i]; + + if (t.eventType == 'Temp Basal') { + _temps.push(t); + continue; + } + if (t.eventType == 'Temporary Target') { + rVal.targets.push({ + targetTop: Math.round(t.targetTop), + targetBottom: Math.round(t.targetBottom), + duration: t.duration*60, + mills: t.mills + }); + continue; + } + + if (t.insulin || t.carbs) { + if (t.mills >= dataCap) { + const _t = { + mills: t.mills + }; + if (!isNaN(t.carbs)) _t.carbs = t.carbs; + if (!isNaN(t.insulin)) _t.insulin = t.insulin; + rVal.treatments.push(_t); + } + continue; + } + } + + rVal.tempBasals = basalProcessor.processTempBasals(profile,_temps, dataCap); + + return rVal; + } + + function constructState() { + + const p = _.get(ctx, 'sbx.properties'); + + const state = { + iob: Math.round(_.get(p,'iob.iob')*100)/100, + cob: Math.round(_.get(p,'cob.cob')), + bwp: Math.round(_.get(p,'bwp.bolusEstimate')*100)/100, + cage: _.get(p,'cage.age'), + sage: _.get(p,'sage.age'), + iage: _.get(p,'iage.age'), + bage: _.get(p,'bage.age'), + battery: _.get(p,'upbat.level') + } + return state; + } + + api.get('/', ctx.authorization.isPermitted('api:*:read'), function (req, res) { + + const hours = req.query.hours || defaultHours; + const sgvs = processSGVs(ctx.ddata.sgvs, hours); + const profile = _.clone(ctx.sbx.data.profile.getCurrentProfile()); + removeProps(profile,['timeAsSeconds']); + const treatments = processTreatments(ctx.ddata.treatments, profile, hours); + const state = constructState(); + + res.setHeader('content-type', 'application/json'); + res.write(JSON.stringify({ + sgvs, + treatments, + profile, + state + })); + res.end( ); + }); + + return api; +} +module.exports = configure; diff --git a/lib/api3/alarmSocket.js b/lib/api3/alarmSocket.js new file mode 100644 index 00000000000..5fe30a620c1 --- /dev/null +++ b/lib/api3/alarmSocket.js @@ -0,0 +1,152 @@ +'use strict'; + +const apiConst = require('./const'); +const forwarded = require('forwarded-for'); + +function getRemoteIP (req) { + const address = forwarded(req, req.headers); + return address.ip; +} + +/** + * Socket.IO broadcaster of alarm and annoucements + */ +function AlarmSocket (app, env, ctx) { + + const self = this; + + var levels = ctx.levels; + + const LOG_GREEN = '\x1B[32m' + , LOG_MAGENTA = '\x1B[35m' + , LOG_RESET = '\x1B[0m' + , LOG = LOG_GREEN + 'ALARM SOCKET: ' + LOG_RESET + , LOG_ERROR = LOG_MAGENTA + 'ALARM SOCKET: ' + LOG_RESET + , NAMESPACE = '/alarm' + ; + + + /** + * Initialize socket namespace and bind the events + * @param {Object} io Socket.IO object to multiplex namespaces + */ + self.init = function init (io) { + self.io = io; + + self.namespace = io.of(NAMESPACE); + self.namespace.on('connection', function onConnected (socket) { + + const remoteIP = getRemoteIP(socket.request); + console.log(LOG + 'Connection from client ID: ', socket.client.id, ' IP: ', remoteIP); + + socket.on('disconnect', function onDisconnect () { + console.log(LOG + 'Disconnected client ID: ', socket.client.id); + }); + + socket.on('subscribe', function onSubscribe (message, returnCallback) { + self.subscribe(socket, message, returnCallback); + }); + + }); + + ctx.bus.on('notification', self.emitNotification); + }; + + + /** + * Authorize Socket.IO client and subscribe him to authorized rooms + * + * Support webclient authorization with api_secret is added + * + * @param {Object} socket + * @param {Object} message input message from the client + * @param {Function} returnCallback function for returning a value back to the client + */ + self.subscribe = function subscribe (socket, message, returnCallback) { + const shouldCallBack = typeof(returnCallback) === 'function'; + + // Native client + if (message && message.accessToken) { + return ctx.authorization.resolveAccessToken(message.accessToken, function resolveFinishForToken (err, auth) { + if (err) { + console.log(`${LOG_ERROR} Authorization failed for accessToken:`, message.accessToken); + + if (shouldCallBack) { + returnCallback({ success: false, message: apiConst.MSG.SOCKET_MISSING_OR_BAD_ACCESS_TOKEN }); + } + return err; + } else { + // Subscribe for acking alarms + socket.on('ack', function onAck (level, group, silenceTime) { + ctx.notifications.ack(level, group, silenceTime, true); + console.info(LOG + 'ack received ' + level + ' ' + group + ' ' + silenceTime); + }); + + var okResponse = { success: true, message: 'Subscribed for alarms' } + if (shouldCallBack) { + returnCallback(okResponse); + } + return okResponse; + } + }); + } + + // Web client (jwt access token or api_hash) + if (message && (message.jwtToken || message.secret)) { + return ctx.authorization.resolve({ api_secret: message.secret, token: message.jwtToken, ip: getRemoteIP(socket.request) }, function resolveFinish (err, auth) { + if (err) { + console.log(`${LOG_ERROR} Authorization failed for jwtToken:`, message.jwtToken); + + if (shouldCallBack) { + returnCallback({ success: false, message: apiConst.MSG.SOCKET_MISSING_OR_BAD_ACCESS_TOKEN }); + } + return err; + } else { + // Subscribe for acking alarms + socket.on('ack', function onAck (level, group, silenceTime) { + ctx.notifications.ack(level, group, silenceTime, true); + console.info(LOG + 'ack received ' + level + ' ' + group + ' ' + silenceTime); + }); + + var okResponse = { success: true, message: 'Subscribed for alarms' } + if (shouldCallBack) { + returnCallback(okResponse); + } + return okResponse; + } + }); + } + + console.log(`${LOG_ERROR} Authorization failed for message:`, message); + if (shouldCallBack) { + returnCallback({ success: false, message: apiConst.MSG.SOCKET_MISSING_OR_BAD_ACCESS_TOKEN}); + } + }; + + + /** + * Emit alarm to subscribed clients + * @param {Object} notofication to emit + */ + + self.emitNotification = function emitNotification (notify) { + if (notify.clear) { + self.namespace.emit('clear_alarm', notify); + console.info(LOG + 'emitted clear_alarm to all clients'); + } else if (notify.level === levels.WARN) { + self.namespace.emit('alarm', notify); + console.info(LOG + 'emitted alarm to all clients'); + } else if (notify.level === levels.URGENT) { + self.namespace.emit('urgent_alarm', notify); + console.info(LOG + 'emitted urgent_alarm to all clients'); + } else if (notify.isAnnouncement) { + self.namespace.emit('announcement', notify); + console.info(LOG + 'emitted announcement to all clients'); + } else { + self.namespace.emit('notification', notify); + console.info(LOG + 'emitted notification to all clients'); + } + }; +} + +module.exports = AlarmSocket; diff --git a/lib/api3/doc/alarmsockets.md b/lib/api3/doc/alarmsockets.md new file mode 100644 index 00000000000..54d86e93a97 --- /dev/null +++ b/lib/api3/doc/alarmsockets.md @@ -0,0 +1,151 @@ +# APIv3: Socket.IO alarm channel + +### Complete sample client code +```html + + + + + + + + APIv3 Socket.IO sample for alarms + + + + + + + + + + +``` + +### Subscription (authorization) +The client must first subscribe to the channel that is exposed at `alarm` namespace, ie the `/alarm` subadress of the base Nightscout's web address (without `/api/v3` subaddress). +```javascript +const socket = io('https://nsapiv3.herokuapp.com/alarm'); +``` + + +Subscription is requested by emitting `subscribe` event to the server, while including document with parameter: +* `accessToken`: required valid accessToken of the security subject, which has been prepared in *Admin Tools* of Nightscout. + +```javascript +socket.on('connect', function () { + socket.emit('subscribe', { + accessToken: 'testadmin-ad3b1f9d7b3f59d5' + }, ... +``` + + +On the server, the subject is identified and authenticated (by the accessToken). Ne special rights are required. + +If the authentication was successful `success` = `true` is set in the response object and the field `message` contains a text response. +In other case `success` = `false` is set in the response object and the field `message` contains an error message. + +```javascript +function (data) { + if (data.success) { + console.log('subscribed for alarms', data.message); + } + else { + console.error(data.message); + } + }); +}); +``` + +### Acking alarms and announcements +If the client is successfully subscribed it can ack alarms and announcements by emitting `ack` message. + +```javascript + socket.emit('ack', level, group, silenceTimeInMilliseconds); +``` + +where `level` and `group` are values from alarm being acked and `silenceTimeInMilliseconds` is duration. During this time alarms of the same type are not emmited. + +### Receiving events +After the successful subscription the client can start listening to `announcement`, `alarm` , `urgent_alarm` and/or `clear_alarm` events of the socket. + + +##### announcement + +The received object contains similiar json: + +```javascript + { + "level":0, + "title":"Announcement", + "message":"test", + "plugin":{"name":"treatmentnotify","label":"Treatment Notifications","pluginType":"notification","enabled":true}, + "group":"Announcement", + "isAnnouncement":true, + "key":"9ac46ad9a1dcda79dd87dae418fce0e7955c68da" + } +``` + + +##### alarm, urgent_alarm + +The received object contains similiar json: + +```javascript + { + "level":1, + "title":"Warning HIGH", + "message":"BG Now: 5 -0.2 → mmol\/L\nRaw BG: 4.8 mmol\/L Čistý\nBG 15m: 4.8 mmol\/L\nIOB: -0.02U\nCOB: 0g", + "eventName":"high", + "plugin":{"name":"simplealarms","label":"Simple Alarms","pluginType":"notification","enabled":true}, + "pushoverSound":"climb", + "debug":{"lastSGV":5,"thresholds":{"bgHigh":180,"bgTargetTop":75,"bgTargetBottom":72,"bgLow":70}}, + "group":"default", + "key":"simplealarms_1" + } +``` + + +##### clear_alarm + +The received object contains similiar json: + +```javascript + { + "clear":true, + "title":"All Clear", + "message":"default - Urgent was ack'd", + "group":"default" + } +``` \ No newline at end of file diff --git a/lib/api3/doc/security.md b/lib/api3/doc/security.md index 49a2505ca0e..99972fe8830 100644 --- a/lib/api3/doc/security.md +++ b/lib/api3/doc/security.md @@ -20,8 +20,7 @@ The identity of the client is represented by the *subject* to whom the access le For each security *subject*, the system automatically generates an *access token* that is difficult to guess since it is derived from the secret *API_SECRET*. The *access token* must be included in every secured API operation to decode the client's identity and determine its authorization level. In this way, it is then possible to resolve whether the client has the permission required by a particular API operation. -There are two ways to authorize API calls: -- use `token` query parameter to pass the *access token*, eg. `token=testreadab-76eaff2418bfb7e0` +There is only one way to authorize API calls: - use so-called [JSON Web Tokens](https://jwt.io "JSON Web Tokens") - at first let the `/api/v2/authorization/request` generates you a particular JWT, eg. `GET https://nsapiv3.herokuapp.com/api/v2/authorization/request/testreadab-76eaff2418bfb7e0` - then, to each secure API operation attach a JWT token in the HTTP header, eg. `Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NUb2tlbiI6InRlc3RyZWFkYWItNzZlYWZmMjQxOGJmYjdlMCIsImlhdCI6MTU2NTAzOTczMSwiZXhwIjoxNTY1MDQzMzMxfQ.Y-OFtFJ-gZNJcnZfm9r4S7085Z7YKVPiaQxuMMnraVk` (until the JWT expires) diff --git a/lib/api3/doc/tutorial.md b/lib/api3/doc/tutorial.md index 50ab57c5b93..7ea482f6cff 100644 --- a/lib/api3/doc/tutorial.md +++ b/lib/api3/doc/tutorial.md @@ -16,22 +16,23 @@ It is public (there is no need to add authorization parameters/headers). Sample GET `/version` client code (to get actual versions): ```javascript -const request = require('request'); - -request('https://nsapiv3.herokuapp.com/api/v3/version', - (error, response, body) => console.log(body)); +const axios = require('axios'); +axios.get(`https://nsapiv3.herokuapp.com/api/v3/version`) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json { "status": 200, "result": { - "version": "14.1.0", - "apiVersion": "3.0.2-alpha", - "srvDate": 1609402081548, + "version": "14.2.0", + "apiVersion": "3.0.4-alpha", + "srvDate": 1613056980085, "storage": { "storage": "mongodb", - "version": "4.2.11" + "version": "4.4.3" } } } @@ -46,23 +47,33 @@ It is public (there is no need to add authorization parameters/headers). Sample GET `/status` client code (to get my actual permissions): ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; - -request(`https://nsapiv3.herokuapp.com/api/v3/status?${auth}`, - (error, response, body) => console.log(body)); +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios.get(`https://nsapiv3.herokuapp.com/api/v3/status`, + { + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json { "status": 200, "result": { - "version": "14.1.0", - "apiVersion": "3.0.2-alpha", - "srvDate": 1609427571833, + "version": "14.2.0", + "apiVersion": "3.0.4-alpha", + "srvDate": 1613057148579, "storage": { "storage": "mongodb", - "version": "4.2.11" + "version": "4.4.3" }, "apiPermissions": { "devicestatus": "crud", @@ -85,31 +96,41 @@ Sample result: Sample GET `/entries` client code (to retrieve last 3 BG values): ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; - -request(`https://nsapiv3.herokuapp.com/api/v3/entries?${auth}&sort$desc=date&limit=3&fields=dateString,sgv,direction`, - (error, response, body) => console.log(body)); +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios.get(`https://nsapiv3.herokuapp.com/api/v3/entries?sort$desc=date&limit=3&fields=dateString,sgv,direction`, + { + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json { - "status": 200, - "result": [ - { - "dateString": "2019-07-30T02:24:50.434+0200", - "sgv": 115, + "status": 200, + "result": [ + { + "dateString": "2021-02-11T15:25:28.928Z", + "sgv": 116, "direction": "FortyFiveDown" }, - { - "dateString": "2019-07-30T02:19:50.374+0200", - "sgv": 121, + { + "dateString": "2021-02-11T15:20:28.239Z", + "sgv": 124, "direction": "FortyFiveDown" }, - { - "dateString": "2019-07-30T02:14:50.450+0200", - "sgv": 129, - "direction": "FortyFiveDown" + { + "dateString": "2021-02-11T15:15:28.225Z", + "sgv": 130, + "direction": "Flat" } ] } @@ -123,29 +144,37 @@ Sample result: Sample POST `/treatments` client code: ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; const doc = { - date: 1564591511232, // (new Date()).getTime(), + date: 1613057404186, // (new Date()).getTime(), app: 'AndroidAPS', device: 'Samsung XCover 4-861536030196001', eventType: 'Correction Bolus', insulin: 0.3 }; -request({ - method: 'post', - body: doc, - json: true, - url: `https://nsapiv3.herokuapp.com/api/v3/treatments?${auth}` - }, - (error, response, body) => console.log(body)); +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios(`https://nsapiv3.herokuapp.com/api/v3/treatments`, + { + method: 'post', + data: doc, + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json { "status": 201, - "identifier": "95e1a6e3-1146-5d6a-a3f1-41567cae0895", - "lastModified": 1564591511711 + "identifier": "5b0f7124-475f-5db0-824c-a73c5eea0975", + "lastModified": 1613057523148 } ``` @@ -157,28 +186,38 @@ Sample result: Sample GET `/treatments/{identifier}` client code: ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; -const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; - -request(`https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}`, - (error, response, body) => console.log(body)); +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +const identifier = '5b0f7124-475f-5db0-824c-a73c5eea0975'; +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios.get(`https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}`, + { + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json { "status": 200, - "result": { - "date": 1564591511232, + "result": { + "date": 1613057404186, "app": "AndroidAPS", "device": "Samsung XCover 4-861536030196001", "eventType": "Correction Bolus", "insulin": 0.3, - "identifier": "95e1a6e3-1146-5d6a-a3f1-41567cae0895", "utcOffset": 0, - "created_at": "2019-07-31T16:45:11.232Z", - "srvModified": 1564591627732, - "srvCreated": 1564591511711, + "created_at": "2021-02-11T15:30:04.186Z", + "identifier": "5b0f7124-475f-5db0-824c-a73c5eea0975", + "srvModified": 1613057523148, + "srvCreated": 1613057523148, "subject": "test-admin" } } @@ -192,23 +231,33 @@ Sample result: Sample GET `/lastModified` client code (to get latest modification dates): ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; - -request(`https://nsapiv3.herokuapp.com/api/v3/lastModified?${auth}`, - (error, response, body) => console.log(body)); +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios.get(`https://nsapiv3.herokuapp.com/api/v3/lastModified`, + { + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json -{ +{ "status": 200, - "result": { - "srvDate": 1564591783202, - "collections": { - "devicestatus": 1564591490074, - "entries": 1564591486801, - "profile": 1548524042744, - "treatments": 1564591627732 + "result": { + "srvDate": 1613057924021, + "collections": { + "devicestatus": 1613057731281, + "entries": 1613057728148, + "profile": 1580337948416, + "treatments": 1613057523148 } } } @@ -222,29 +271,37 @@ Sample result: Sample PUT `/treatments/{identifier}` client code (to update `insulin` from 0.3 to 0.4): ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; -const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +const identifier = '5b0f7124-475f-5db0-824c-a73c5eea0975'; const doc = { - date: 1564591511232, + date: 1613057404186, app: 'AndroidAPS', device: 'Samsung XCover 4-861536030196001', eventType: 'Correction Bolus', insulin: 0.4 }; - -request({ - method: 'put', - body: doc, - json: true, - url: `https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}` - }, - (error, response, body) => console.log(body)); +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios(`https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}`, + { + method: 'put', + data: doc, + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json { - "status": 200 + "status": 200, + "lastModified": 1613058295307 } ``` @@ -256,20 +313,27 @@ Sample result: Sample PATCH `/treatments/{identifier}` client code (to update `insulin` from 0.4 to 0.5): ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; -const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +const identifier = '5b0f7124-475f-5db0-824c-a73c5eea0975'; const doc = { insulin: 0.5 }; - -request({ - method: 'patch', - body: doc, - json: true, - url: `https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}` - }, - (error, response, body) => console.log(body)); +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios(`https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}`, + { + method: 'patch', + data: doc, + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json @@ -284,17 +348,25 @@ Sample result: [DELETE](https://nsapiv3insecure.herokuapp.com/api3-docs/#/generic/delete__collection___identifier_) operation deletes existing document from the collection. -Sample DELETE `/treatments/{identifier}` client code (to update `insulin` from 0.4 to 0.5): +Sample DELETE `/treatments/{identifier}` client code: ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; -const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; - -request({ - method: 'delete', - url: `https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}` - }, - (error, response, body) => console.log(body)); +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +const identifier = '5b0f7124-475f-5db0-824c-a73c5eea0975'; +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios(`https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}`, + { + method: 'delete', + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json @@ -311,12 +383,22 @@ Sample result: Sample HISTORY `/treatments/history/{lastModified}` client code: ```javascript -const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5`; -const lastModified = 1564521267421; - -request(`https://nsapiv3.herokuapp.com/api/v3/treatments/history/${lastModified}?${auth}`, - (error, response, body) => console.log(response.body)); +const axios = require('axios'); +const accessToken = 'token=testadmin-ad3b1f9d7b3f59d5'; +const lastModified = 1613057520148; +axios.get(`https://nsapiv3.herokuapp.com/api/v2/authorization/request/${accessToken}`) + .then(res => { + const jwt = res.data.token; + return axios(`https://nsapiv3.herokuapp.com/api/v3/treatments/history/${lastModified}`, + { + headers: { + 'Authorization': `Bearer ${jwt}` + } + }); + }) + .then(res => { + console.log(res.data); + }); ``` Sample result: ```json @@ -324,32 +406,19 @@ Sample result: "status": 200, "result": [ { - "date": 1564521267421, + "date": 1613057404186, "app": "AndroidAPS", "device": "Samsung XCover 4-861536030196001", "eventType": "Correction Bolus", "insulin": 0.5, "utcOffset": 0, - "created_at": "2019-07-30T21:14:27.421Z", - "identifier": "95e1a6e3-1146-5d6a-a3f1-41567cae0895", - "srvModified": 1564592440416, - "srvCreated": 1564592334853, + "created_at": "2021-02-11T15:30:04.186Z", + "identifier": "5b0f7124-475f-5db0-824c-a73c5eea0975", + "srvModified": 1613058548149, + "srvCreated": 1613057523148, "subject": "test-admin", "modifiedBy": "test-admin", "isValid": false - }, - { - "date": 1564592545299, - "app": "AndroidAPS", - "device": "Samsung XCover 4-861536030196001", - "eventType": "Snack Bolus", - "carbs": 10, - "identifier": "267c43c2-f629-5191-a542-4f410c69e486", - "utcOffset": 0, - "created_at": "2019-07-31T17:02:25.299Z", - "srvModified": 1564592545781, - "srvCreated": 1564592545781, - "subject": "test-admin" } ] } diff --git a/lib/api3/generic/history/operation.js b/lib/api3/generic/history/operation.js index 47bd41b2056..e374f981c47 100644 --- a/lib/api3/generic/history/operation.js +++ b/lib/api3/generic/history/operation.js @@ -103,9 +103,7 @@ function parseFilter (opCtx) { } return [ - { field: 'srvModified', operator: operator, value: lastModified.getTime() }, - { field: 'created_at', operator: operator, value: lastModified.toISOString() }, - { field: 'date', operator: operator, value: lastModified.getTime() } + { field: 'srvModified', operator: operator, value: lastModified.getTime() } ]; } @@ -116,9 +114,7 @@ function parseFilter (opCtx) { */ function prepareSort () { return { - srvModified: 1, - created_at: 1, - date: 1 + srvModified: 1 }; } diff --git a/lib/api3/generic/patch/operation.js b/lib/api3/generic/patch/operation.js index 1e5cd0f129b..dff18c70dbe 100644 --- a/lib/api3/generic/patch/operation.js +++ b/lib/api3/generic/patch/operation.js @@ -22,8 +22,10 @@ async function patch (opCtx) { } await security.demandPermission(opCtx, `api:${col.colName}:update`); - - col.parseDate(doc); + + // parseDate is not valid for patch operation + // (it is adding new fields) + // col.parseDate(doc); const identifier = req.params.identifier , identifyingFilter = col.storage.identifyingFilter(identifier); diff --git a/lib/api3/index.js b/lib/api3/index.js index 83db322a452..2ba0aa762b1 100644 --- a/lib/api3/index.js +++ b/lib/api3/index.js @@ -3,7 +3,8 @@ const express = require('express') , bodyParser = require('body-parser') , renderer = require('./shared/renderer') - , StorageSocket = require('./storageSocket') + , storageSocket = require('./storageSocket') + , alarmSocket = require('./alarmSocket') , apiConst = require('./const.json') , security = require('./security') , genericSetup = require('./generic/setup') @@ -108,7 +109,8 @@ function configure (env, ctx) { opTools.sendJSONStatus(res, apiConst.HTTP.NOT_FOUND, apiConst.MSG.HTTP_404_BAD_OPERATION); }) - ctx.storageSocket = new StorageSocket(app, env, ctx); + ctx.storageSocket = new storageSocket(app, env, ctx); + ctx.alarmSocket = new alarmSocket(app, env, ctx); return app; } diff --git a/lib/api3/security.js b/lib/api3/security.js index 57f57107724..c42e5a114bd 100644 --- a/lib/api3/security.js +++ b/lib/api3/security.js @@ -25,7 +25,14 @@ function authenticate (opCtx) { return resolve({ shiros: [ adminShiro ] }); } - let token = ctx.authorization.extractToken(req); + let token + if (req.header('Authorization')) { + const parts = req.header('Authorization').split(' '); + if (parts.length === 2 && parts[0].toLowerCase() === 'bearer') { + token = parts[1]; + } + } + if (!token) { return reject( opTools.sendJSONStatus(res, apiConst.HTTP.UNAUTHORIZED, apiConst.MSG.HTTP_401_MISSING_OR_BAD_TOKEN)); diff --git a/lib/api3/shared/operationTools.js b/lib/api3/shared/operationTools.js index 6b2e62e12e7..c8b8a008f6d 100644 --- a/lib/api3/shared/operationTools.js +++ b/lib/api3/shared/operationTools.js @@ -2,7 +2,7 @@ const apiConst = require('../const.json') , stringTools = require('./stringTools') - , uuidv5 = require('uuid/v5') + , uuid = require('uuid') , uuidNamespace = [...Buffer.from("NightscoutRocks!", "ascii")] // official namespace for NS :-) ; @@ -103,7 +103,7 @@ function calculateIdentifier (doc) { key += '_' + doc.eventType; } - return uuidv5(key, uuidNamespace); + return uuid.v5(key, uuidNamespace); } diff --git a/lib/api3/storage/mongoCollection/modify.js b/lib/api3/storage/mongoCollection/modify.js index 7183f1c971a..20b4013d206 100644 --- a/lib/api3/storage/mongoCollection/modify.js +++ b/lib/api3/storage/mongoCollection/modify.js @@ -69,7 +69,7 @@ function updateOne (col, identifier, setFields) { if (err) { reject(err); } else { - resolve({ updated: result.result.nModified }); + resolve({ updated: result.modifiedCount }); } }); }); @@ -91,7 +91,7 @@ function deleteOne (col, identifier) { if (err) { reject(err); } else { - resolve({ deleted: result.result.n }); + resolve({ deleted: result.deletedCount }); } }); }); diff --git a/lib/api3/storage/mongoCollection/utils.js b/lib/api3/storage/mongoCollection/utils.js index a2f7b16520c..094d663ca24 100644 --- a/lib/api3/storage/mongoCollection/utils.js +++ b/lib/api3/storage/mongoCollection/utils.js @@ -2,7 +2,7 @@ const _ = require('lodash') , checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$") - , ObjectID = require('mongodb').ObjectID + , ObjectID = require('mongodb-legacy').ObjectId ; @@ -112,7 +112,7 @@ function filterForOne (identifier) { // fallback to "identifier = _id" if (checkForHexRegExp.test(identifier)) { - filterOpts.push({ _id: ObjectID(identifier) }); + filterOpts.push({ _id: new ObjectID(identifier) }); } return { $or: filterOpts }; @@ -137,7 +137,7 @@ function identifyingFilter (identifier, doc, dedupFallbackFields) { // fallback to "identifier = _id" (APIv1) if (checkForHexRegExp.test(identifier)) { - filterItems.push({ identifier: { $exists: false }, _id: ObjectID(identifier) }); + filterItems.push({ identifier: { $exists: false }, _id: new ObjectID(identifier) }); } } diff --git a/lib/api3/storageSocket.js b/lib/api3/storageSocket.js index 9171f834c44..d4ebb1254f3 100644 --- a/lib/api3/storageSocket.js +++ b/lib/api3/storageSocket.js @@ -3,6 +3,11 @@ const apiConst = require('./const'); const forwarded = require('forwarded-for'); +function getRemoteIP (req) { + const address = forwarded(req, req.headers); + return address.ip; +} + /** * Socket.IO broadcaster of any storage change */ @@ -29,8 +34,7 @@ function StorageSocket (app, env, ctx) { self.namespace = io.of(NAMESPACE); self.namespace.on('connection', function onConnected (socket) { - const address = forwarded(socket.request, socket.request.headers); - const remoteIP = address.ip; + const remoteIP = getRemoteIP(socket.request); console.log(LOG + 'Connection from client ID: ', socket.client.id, ' IP: ', remoteIP); socket.on('disconnect', function onDisconnect () { diff --git a/lib/api3/swagger.json b/lib/api3/swagger.json index 67a54d97d95..20a8830a214 100644 --- a/lib/api3/swagger.json +++ b/lib/api3/swagger.json @@ -11,7 +11,7 @@ "name": "AGPL 3", "url": "https://www.gnu.org/licenses/agpl.txt" }, - "version": "3.0.3" + "version": "3.0.4" }, "servers": [ { @@ -49,17 +49,6 @@ "$ref": "#/components/schemas/paramCollection" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "filter_parameters", "in": "query", @@ -175,7 +164,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -216,9 +205,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -241,17 +227,6 @@ "schema": { "$ref": "#/components/schemas/paramCollection" } - }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } } ], "requestBody": { @@ -313,7 +288,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -354,9 +329,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -393,17 +365,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "If-Modified-Since", "in": "header", @@ -473,7 +434,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -524,9 +485,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -561,17 +519,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "If-Unmodified-Since", "in": "header", @@ -632,7 +579,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -693,9 +640,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -730,17 +674,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "permanent", "in": "query", @@ -765,7 +698,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -806,9 +739,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -843,17 +773,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "If-Unmodified-Since", "in": "header", @@ -899,7 +818,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -960,9 +879,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -989,17 +905,6 @@ "$ref": "#/components/schemas/paramCollection" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "Last-Modified", "in": "header", @@ -1087,7 +992,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -1128,9 +1033,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -1169,17 +1071,6 @@ "format": "int64" } }, - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, { "name": "limit", "in": "query", @@ -1256,7 +1147,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -1297,9 +1188,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -1346,7 +1234,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -1367,9 +1255,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -1384,19 +1269,6 @@ "summary": "LAST MODIFIED: Retrieves timestamp of the last modification of every collection", "description": "LAST MODIFIED operation inspects collections separately (in parallel) and for each of them it finds the date of any last modification (insertion, update, deletion).\nNot only `srvModified`, but also `date` and `created_at` fields are inspected (as a fallback to previous API).\n\nThis operation requires `read` permission for the API and the collections (e.g. `api:treatments:read`). For each collection the permission is checked separately, you will get timestamps only for those collections that you have access to.", "operationId": "LAST-MODIFIED", - "parameters": [ - { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - } - ], "responses": { "200": { "description": "Successful operation returning the timestamps", @@ -1409,7 +1281,7 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -1430,9 +1302,6 @@ } }, "security": [ - { - "accessToken": [] - }, { "jwtoken": [] } @@ -1545,7 +1414,7 @@ }, "subject": { "type": "string", - "description": "Name of the security subject (within Nightscout scope) which has created the document. This field is automatically set by the server from the passed token or JWT.\n\nNote: this field is immutable by the client (it cannot be updated or patched)", + "description": "Name of the security subject (within Nightscout scope) which has created the document. This field is automatically set by the server from the passed JWT.\n\nNote: this field is immutable by the client (it cannot be updated or patched)", "example": "uploader" }, "srvModified": { @@ -2352,7 +2221,7 @@ } }, "401Unauthorized": { - "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "description": "The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy.", "content": { "application/json": { "schema": { @@ -2506,17 +2375,6 @@ } }, "parameters": { - "tokenParam": { - "name": "token", - "in": "query", - "description": "An alternative way of authorization - passing accessToken in a query parameter.\n\nExample:\n\n
token=testadmin-bf2591231bd2c042
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "string" - } - }, "limitParam": { "name": "limit", "in": "query", @@ -2645,12 +2503,6 @@ } }, "securitySchemes": { - "accessToken": { - "type": "apiKey", - "description": "Add token as query item in the URL or as HTTP header. You can manage access token in `/admin`.\nEach operation requires a specific permission that has to be granted (via security role) to the security subject, which was authenticated by `token` parameter/header or `JWT`. E.g. for creating new `devicestatus` document via API you need `api:devicestatus:create` permission.", - "name": "token", - "in": "query" - }, "jwtoken": { "type": "http", "description": "Use this if you know the temporary json webtoken.", diff --git a/lib/api3/swagger.yaml b/lib/api3/swagger.yaml index c9b764a7409..332b00e86bf 100644 --- a/lib/api3/swagger.yaml +++ b/lib/api3/swagger.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 servers: - url: '/api/v3' info: - version: 3.0.3 + version: 3.0.4 title: Nightscout API contact: name: NS development discussion channel @@ -75,8 +75,6 @@ paths: schema: $ref: '#/components/schemas/paramCollection' - - $ref: '#/components/parameters/tokenParam' - ###################################################################################### get: tags: @@ -113,7 +111,6 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - accessToken: [] - jwtoken: [] responses: @@ -158,7 +155,6 @@ paths: $ref: '#/components/schemas/DocumentToPost' security: - - accessToken: [] - jwtoken: [] responses: @@ -196,8 +192,6 @@ paths: schema: $ref: '#/components/schemas/paramIdentifier' - - $ref: '#/components/parameters/tokenParam' - ###################################################################################### get: tags: @@ -221,7 +215,6 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - accessToken: [] - jwtoken: [] responses: @@ -276,7 +269,6 @@ paths: $ref: '#/components/schemas/DocumentToPost' security: - - accessToken: [] - jwtoken: [] responses: @@ -341,7 +333,6 @@ paths: $ref: '#/components/schemas/DocumentToPost' security: - - accessToken: [] - jwtoken: [] responses: @@ -382,7 +373,6 @@ paths: - $ref: '#/components/parameters/permanentParam' security: - - accessToken: [] - jwtoken: [] responses: @@ -408,8 +398,6 @@ paths: schema: $ref: '#/components/schemas/paramCollection' - - $ref: '#/components/parameters/tokenParam' - get: tags: - generic @@ -439,7 +427,6 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - accessToken: [] - jwtoken: [] responses: @@ -475,8 +462,6 @@ paths: type: integer format: int64 - - $ref: '#/components/parameters/tokenParam' - get: tags: - generic @@ -497,7 +482,6 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - accessToken: [] - jwtoken: [] responses: @@ -543,7 +527,6 @@ paths: This operation requires authorization in contrast with VERSION operation. security: - - accessToken: [] - jwtoken: [] responses: @@ -560,9 +543,6 @@ paths: ###################################################################################### /lastModified: - parameters: - - $ref: '#/components/parameters/tokenParam' - get: tags: - other @@ -577,7 +557,6 @@ paths: This operation requires `read` permission for the API and the collections (e.g. `api:treatments:read`). For each collection the permission is checked separately, you will get timestamps only for those collections that you have access to. security: - - accessToken: [] - jwtoken: [] responses: @@ -594,22 +573,6 @@ components: parameters: - tokenParam: - in: query - name: token - schema: - type: string - required: false - description: - An alternative way of authorization - passing accessToken in a query parameter. - - - Example: - - -
token=testadmin-bf2591231bd2c042
- - limitParam: in: query name: limit @@ -887,7 +850,7 @@ components: example: 400 401Unauthorized: - description: The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy. + description: The request was not successfully authenticated using JWT, so that the request cannot continue due to the security policy. content: application/json: schema: @@ -1226,7 +1189,7 @@ components: subject: type: string description: - Name of the security subject (within Nightscout scope) which has created the document. This field is automatically set by the server from the passed token or JWT. + Name of the security subject (within Nightscout scope) which has created the document. This field is automatically set by the server from the passed JWT. Note: this field is immutable by the client (it cannot be updated or patched) @@ -1750,16 +1713,6 @@ components: ###################################################################################### securitySchemes: - accessToken: - type: apiKey - name: token - in: query - description: >- - Add token as query item in the URL or as HTTP header. You can manage access token in - `/admin`. - - Each operation requires a specific permission that has to be granted (via security role) to the security subject, which was authenticated by `token` parameter/header or `JWT`. E.g. for creating new `devicestatus` document via API you need `api:devicestatus:create` permission. - jwtoken: type: http scheme: bearer diff --git a/lib/authorization/index.js b/lib/authorization/index.js index b501981f3fa..d14a7a6afac 100644 --- a/lib/authorization/index.js +++ b/lib/authorization/index.js @@ -298,7 +298,7 @@ function init (env, ctx) { const token = env.enclave.signJWT({ accessToken: subject.accessToken }); const decoded = env.enclave.verifyJWT(token); - var roles = _.uniq(subject.roles.concat(defaultRoles)); + var roles = subject.roles ? _.uniq(subject.roles.concat(defaultRoles)) : defaultRoles; authorized = { token diff --git a/lib/authorization/storage.js b/lib/authorization/storage.js index 054f9a07b0d..c119cd7e1cd 100644 --- a/lib/authorization/storage.js +++ b/lib/authorization/storage.js @@ -3,7 +3,7 @@ var _ = require('lodash'); var crypto = require('crypto'); var shiroTrie = require('shiro-trie'); -var ObjectID = require('mongodb').ObjectID; +var ObjectID = require('mongodb-legacy').ObjectId; var find_options = require('../server/query'); @@ -27,14 +27,14 @@ function init (env, ctx) { if (!Object.prototype.hasOwnProperty.call(obj, 'created_at')) { obj.created_at = (new Date()).toISOString(); } - collection.insert(obj, function (err, doc) { + collection.insertOne(obj, function (err, doc) { if (err != null && err.message) { console.log('Data insertion error', err.message); fn(err.message, null); return; } storage.reload(function loaded() { - fn(null, doc.ops); + fn(null, obj); }); }); } @@ -42,7 +42,7 @@ function init (env, ctx) { } function list (collection) { - function doList(opts, fn) { + function doList(opts, fn) { // these functions, find, sort, and limit, are used to // dynamically configure the request, based on the options we've // been given @@ -65,6 +65,8 @@ function init (env, ctx) { fn(err, entries); } + console.log('Loading',opts); + // now just stitch them all together limit.call(collection .find(query_for(opts)) @@ -77,7 +79,7 @@ function init (env, ctx) { function remove (collection) { function doRemove (_id, callback) { - collection.remove({ '_id': new ObjectID(_id) }, function (err) { + collection.deleteOne({ '_id': new ObjectID(_id) }, function (err) { storage.reload(function loaded() { callback(err, null); }); @@ -92,7 +94,7 @@ function init (env, ctx) { if (!obj.created_at) { obj.created_at = (new Date()).toISOString(); } - collection.save(obj, function (err) { + collection.insertOne(obj, function (err) { //id should be added for new docs storage.reload(function loaded() { callback(err, obj); @@ -122,6 +124,11 @@ function init (env, ctx) { , { name: 'activity', permissions: [ 'api:activity:create' ] } ]; + storage.ensureIndexes = function ensureIndexes() { + ctx.store.ensureIndexes(rolesCollection, ['name']); + ctx.store.ensureIndexes(subjectsCollection, ['name']); + } + storage.getSHA1 = function getSHA1 (message) { var shasum = crypto.createHash('sha1'); shasum.update(message); @@ -130,8 +137,14 @@ function init (env, ctx) { storage.reload = function reload (callback) { + console.log('Reloading auth data'); + storage.listRoles({sort: {name: 1}}, function listResults (err, results) { + + console.log('Roles listed'); + if (err) { + console.log('Problem listing roles', err); return callback && callback(err); } @@ -147,6 +160,7 @@ function init (env, ctx) { storage.listSubjects({sort: {name: 1}}, function listResults (err, results) { if (err) { + console.log('Problem listing subjects', err); return callback && callback(err); } diff --git a/lib/client/boluscalc.js b/lib/client/boluscalc.js index da61e983616..67637ad4d30 100644 --- a/lib/client/boluscalc.js +++ b/lib/client/boluscalc.js @@ -1,7 +1,6 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment-timezone'); var times = require('../times'); var Storages = require('js-storage'); @@ -46,9 +45,9 @@ function init (client, $) { } function setDateAndTime (time) { - time = time || moment(); - eventTime.val(time.format('HH:mm')); - eventDate.val(time.format('YYYY-MM-DD')); + time = time || new Date(); + eventTime.val(time.getHours() + ":" + time.getMinutes()); + eventDate.val(time.toISOString().split('T')[0]); } function mergeDateAndTime () { @@ -125,16 +124,15 @@ function init (client, $) { boluscalc.calculateInsulin(); maybePrevent(event); - // Nightscout.utils.updateBrushToTime(moment.toDate()); }; boluscalc.eventTimeTypeChange = function eventTimeTypeChange (event) { if ($('#bc_othertime').is(':checked')) { $('#bc_eventTimeValue').focus(); $('#bc_retro').css('display', ''); - if (mergeDateAndTime() < moment()) { + if (mergeDateAndTime() < Date.now()) { $('#bc_retro').css('background-color', 'red').text(translate('RETRO MODE')); - } else if (mergeDateAndTime() > moment()) { + } else if (mergeDateAndTime() > Date.now()) { $('#bc_retro').css('background-color', 'blue').text(translate('IN THE FUTURE')); } else { $('#bc_retro').css('display', 'none'); diff --git a/lib/client/browser-settings.js b/lib/client/browser-settings.js index d2cb675a100..91fd37dbc07 100644 --- a/lib/client/browser-settings.js +++ b/lib/client/browser-settings.js @@ -142,9 +142,10 @@ function init (client, serverSettings, $) { const id = e.plugin.name + "-" + p.id; const label = p.label; if (p.type == 'boolean') { - const html = $(`
`); + const html = $(`
`); dl.append(html); - if (storage.get(id) == true) { + const settingsBase = settings.extendedSettings[e.plugin.name]; + if (settingsBase[p.id] == true) { toggleCheckboxes.push(id); } } diff --git a/lib/client/careportal.js b/lib/client/careportal.js index 9c18609ce1f..514dbf5d650 100644 --- a/lib/client/careportal.js +++ b/lib/client/careportal.js @@ -1,6 +1,5 @@ 'use strict'; -var moment = require('moment-timezone'); var _ = require('lodash'); var parse_duration = require('parse-duration'); // https://www.npmjs.com/package/parse-duration var times = require('../times'); @@ -18,9 +17,9 @@ function init (client, $) { var eventDate = $('#eventDateValue'); function setDateAndTime (time) { - time = time || moment(); - eventTime.val(time.format('HH:mm')); - eventDate.val(time.format('YYYY-MM-DD')); + time = time || client.ctx.moment(); + eventTime.val(time.hours() + ":" + time.minutes()); + eventDate.val(time.toISOString().split('T')[0]); } function mergeDateAndTime () { @@ -525,6 +524,11 @@ function init (client, $) { careportal.dateTimeChange = function dateTimeChange (event) { $('#othertime').prop('checked', true); + + // Can't decipher why the following logic was in place + // and it's now bugging out and resetting any date set manually + // so I'm disabling this + /* var ele = $(this); var merged = mergeDateAndTime(); @@ -537,6 +541,8 @@ function init (client, $) { setDateAndTime(merged); updateTime(ele, merged); + */ + maybePrevent(event); }; diff --git a/lib/client/hashauth.js b/lib/client/hashauth.js index 99d867e9212..1f9b101877a 100644 --- a/lib/client/hashauth.js +++ b/lib/client/hashauth.js @@ -85,7 +85,7 @@ hashauth.init = function init (client, $) { client.browserUtils.reload(); } - // clear eveything just in case + // clear everything just in case hashauth.apisecret = null; hashauth.apisecrethash = null; hashauth.authenticated = false; diff --git a/lib/client/index.js b/lib/client/index.js index a60b7c624ad..5d08e34616e 100644 --- a/lib/client/index.js +++ b/lib/client/index.js @@ -9,7 +9,6 @@ var Storages = require('js-storage'); var language = require('../language')(); var sandbox = require('../sandbox')(); -var profile = require('../profilefunctions')(); var units = require('../units')(); var levels = require('../levels'); var times = require('../times'); @@ -18,6 +17,8 @@ var receiveDData = require('./receiveddata'); var brushing = false; var browserSettings; +var moment = window.moment; +var timezones = moment.tz.names(); var client = {}; @@ -67,7 +68,7 @@ client.init = function init (callback) { }).done(function success (serverSettings) { if (serverSettings.runtimeState !== 'loaded') { console.log('Server is still loading data'); - $('#loadingMessageText').html('Server is starting and still loading data, retrying load in 5 seconds'); + $('#loadingMessageText').html('Nightscout is still starting and should be available within about 15 seconds.'); window.setTimeout(window.Nightscout.client.init, 5000); return; } @@ -152,6 +153,7 @@ client.load = function load (serverSettings, callback) { var chart , socket + , alarmSocket , isInitialData = false , opacity = { current: 1, DAY: 1, NIGHT: 0.5 } , clientAlarms = {} @@ -203,6 +205,7 @@ client.load = function load (serverSettings, callback) { , extendedSettings: client.settings.extendedSettings , language: language , levels: levels + , moment: moment }).registerClientDefaults(); browserSettings.loadPluginSettings(client); @@ -210,6 +213,7 @@ client.load = function load (serverSettings, callback) { client.utils = require('../utils')({ settings: client.settings , language: language + , moment: moment }); client.rawbg = client.plugins('rawbg'); @@ -223,6 +227,8 @@ client.load = function load (serverSettings, callback) { , bus: require('../bus')(client.settings, client.ctx) , settings: client.settings , pluginBase: client.plugins.base(majorPills, minorPills, statusPills, bgStatus, client.tooltip, Storages.localStorage) + , moment: moment + , timezones: timezones }; client.ctx.language = language; @@ -298,6 +304,8 @@ client.load = function load (serverSettings, callback) { client.careportal = require('./careportal')(client, $); client.boluscalc = require('./boluscalc')(client, $); + var profile = require('../profilefunctions')(null, client.ctx); + client.profilefunctions = profile; client.editMode = false; @@ -804,7 +812,7 @@ client.load = function load (serverSettings, callback) { // only emit ack if client invoke by button press if (isClient && currentNotify) { - socket.emit('ack', currentNotify.level, currentNotify.group, silenceTime); + alarmSocket.emit('ack', currentNotify.level, currentNotify.group, silenceTime); } currentNotify = null; @@ -1033,7 +1041,8 @@ client.load = function load (serverSettings, callback) { // Client-side code to connect to server and handle incoming data //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* global io */ - client.socket = socket = io.connect(); + client.socket = socket = io.connect({ transports: ["polling"] }); + client.alarmSocket = alarmSocket = io.connect("/alarm", { multiplex: true, transports: ["polling"] }); socket.on('dataUpdate', dataUpdate); @@ -1120,6 +1129,41 @@ client.load = function load (serverSettings, callback) { client.authorizeSocket(); }); + client.subscribeForAlarms = function subscribeForAlarms () { + + var auth_data = { + secret: client.authorized && client.authorized.token ? null : client.hashauth.hash() + , jwtToken: client.authorized && client.authorized.token + }; + + alarmSocket.emit( + 'subscribe' + , auth_data + , function subscribeCallback (data) { + if (!data) { + console.log('Crashed!'); + client.crashed(); + } + + console.log('Subscribed for alarms', data); + if (client.settings.authenticationPromptOnLoad && !data.success) { + client.hashauth.requestAuthentication(function afterRequest () { + client.hashauth.updateSocketAuth(); + if (callback) { + callback(); + } + }); + } else if (callback) { + callback(); + } + } + ); + } + + alarmSocket.on('connect', function() { + client.subscribeForAlarms(); + }); + function hasRequiredPermission () { if (client.requiredPermission) { if (client.hashauth && client.hashauth.isAuthenticated()) { @@ -1144,7 +1188,7 @@ client.load = function load (serverSettings, callback) { return client.latestSGV && client.latestSGV.mgdl <= client.settings.thresholds.bgTargetTop; } - socket.on('notification', function(notify) { + alarmSocket.on('notification', function(notify) { console.log('notification from server:', notify); if (notify.timestamp && previousNotifyTimestamp !== notify.timestamp) { previousNotifyTimestamp = notify.timestamp; @@ -1154,14 +1198,14 @@ client.load = function load (serverSettings, callback) { } }); - socket.on('announcement', function(notify) { + alarmSocket.on('announcement', function(notify) { console.info('announcement received from server'); currentAnnouncement = notify; currentAnnouncement.received = Date.now(); updateTitle(); }); - socket.on('alarm', function(notify) { + alarmSocket.on('alarm', function(notify) { console.info('alarm received from server'); var enabled = (isAlarmForHigh() && client.settings.alarmHigh) || (isAlarmForLow() && client.settings.alarmLow); if (enabled) { @@ -1173,7 +1217,7 @@ client.load = function load (serverSettings, callback) { chart.update(false); }); - socket.on('urgent_alarm', function(notify) { + alarmSocket.on('urgent_alarm', function(notify) { console.info('urgent alarm received from server'); var enabled = (isAlarmForHigh() && client.settings.alarmUrgentHigh) || (isAlarmForLow() && client.settings.alarmUrgentLow); if (enabled) { @@ -1185,7 +1229,7 @@ client.load = function load (serverSettings, callback) { chart.update(false); }); - socket.on('clear_alarm', function(notify) { + alarmSocket.on('clear_alarm', function(notify) { if (alarmInProgress) { console.log('clearing alarm'); stopAlarm(false, null, notify); diff --git a/lib/data/dataloader.js b/lib/data/dataloader.js index dfb78eafde9..6361b37b333 100644 --- a/lib/data/dataloader.js +++ b/lib/data/dataloader.js @@ -139,7 +139,6 @@ function init(env, ctx) { }); console.info('Load Complete:\n\t', counts.join(', ')); - done(err, result); } diff --git a/lib/data/ddata.js b/lib/data/ddata.js index caab8e04139..0ee1d9ebc7f 100644 --- a/lib/data/ddata.js +++ b/lib/data/ddata.js @@ -265,33 +265,42 @@ function init () { ddata.tempbasalTreatments = ddata.processDurations(tempbasalTreatments, false); // filter temp target - var tempTargetTreatments = ddata.treatments.filter(function filterTargets (tt) { + var tempTargetTreatments = ddata.treatments.filter(function filterTargets (t) { + return t.eventType && t.eventType.indexOf('Temporary Target') > -1; + }); + + function convertTempTargetTreatmentUnites (_treatments) { + + let treatments = _.cloneDeep(_treatments); - // Clone the treatment before modifying it - let t = _.cloneDeep(tt); + for (let i = 0; i < treatments.length; i++) { - //check for a units being sent - if (t.units) { - if (t.units == 'mmol') { - //convert to mgdl + let t = treatments[i]; + let converted = false; + + // if treatment is in mmol, convert to mg/dl + if (Object.prototype.hasOwnProperty.call(t,'units')) { + if (t.units == 'mmol') { + //convert to mgdl + t.targetTop = t.targetTop * consts.MMOL_TO_MGDL; + t.targetBottom = t.targetBottom * consts.MMOL_TO_MGDL; + t.units = 'mg/dl'; + converted = true; + } + } + + //if we have a temp target thats below 20, assume its mmol and convert to mgdl for safety. + if (!converted && (t.targetTop < 20 || t.targetBottom < 20)) { t.targetTop = t.targetTop * consts.MMOL_TO_MGDL; t.targetBottom = t.targetBottom * consts.MMOL_TO_MGDL; t.units = 'mg/dl'; } } - //if we have a temp target thats below 20, assume its mmol and convert to mgdl for safety. - if (t.targetTop < 20) { - t.targetTop = t.targetTop * consts.MMOL_TO_MGDL; - t.units = 'mg/dl'; - } - if (t.targetBottom < 20) { - t.targetBottom = t.targetBottom * consts.MMOL_TO_MGDL; - t.units = 'mg/dl'; - } - return t.eventType && t.eventType.indexOf('Temporary Target') > -1; - }); - if (preserveOrignalTreatments) - tempTargetTreatments = _.cloneDeep(tempTargetTreatments); + return treatments; + } + + if (preserveOrignalTreatments) tempTargetTreatments = _.cloneDeep(tempTargetTreatments); + tempTargetTreatments = convertTempTargetTreatmentUnites(tempTargetTreatments); ddata.tempTargetTreatments = ddata.processDurations(tempTargetTreatments, false); }; diff --git a/lib/data/endpoints.js b/lib/data/endpoints.js index 252cac9f690..10d041e132a 100644 --- a/lib/data/endpoints.js +++ b/lib/data/endpoints.js @@ -64,6 +64,8 @@ function configure (app, ctx) { next( ); }); + api.use(ctx.authorization.isPermitted('api:entries:read'), + ctx.authorization.isPermitted('api:treatments:read')); api.get('/at/:at?', ensure_at, get_ddata, format_result); return api; diff --git a/lib/food/food.js b/lib/food/food.js index 299418d5b1a..d4601cb73c6 100644 --- a/lib/food/food.js +++ b/lib/food/food.js @@ -243,13 +243,13 @@ client.init(function loaded () { .append($('').attr('title',translate('Edit record')).attr('src',icon_edit).attr('index',i).attr('class','fe_editimg')) .append($('').attr('title',translate('Delete record')).attr('src',icon_remove).attr('index',i).attr('class','fe_removeimg')) ) - .append($('').addClass('width200px').append(foodlist[i].name)) + .append($('').addClass('width200px').text(foodlist[i].name)) .append($('').addClass('width150px').css('text-align','center').append(foodlist[i].portion)) - .append($('').addClass('width50px').css('text-align','center').append(foodlist[i].unit)) + .append($('').addClass('width50px').css('text-align','center').text(foodlist[i].unit)) .append($('').addClass('width100px').css('text-align','center').append(foodlist[i].carbs)) .append($('').addClass('width100px').css('text-align','center').append(foodlist[i].gi)) - .append($('').addClass('width150px').append(foodlist[i].category)) - .append($('').addClass('width150px').append(foodlist[i].subcategory)) + .append($('').addClass('width150px').text(foodlist[i].category)) + .append($('').addClass('width150px').text(foodlist[i].subcategory)) .append($('').addClass('width100px').append(foodlist[i].fat)) .append($('').addClass('width100px').append(foodlist[i].protein)) .append($('').addClass('width100px').append(foodlist[i].energy)) diff --git a/lib/language.js b/lib/language.js index 34da3d6dbf4..17bf1e0170c 100644 --- a/lib/language.js +++ b/lib/language.js @@ -39,6 +39,7 @@ function init (fs) { , { code: 'sl', file: 'sl_SL', language: 'Slovenščina', speechCode: 'sl-SL' } , { code: 'sv', file: 'sv_SE', language: 'Svenska', speechCode: 'sv-SE' } , { code: 'tr', file: 'tr_TR', language: 'Türkçe', speechCode: 'tr-TR' } + , { code: 'uk', file: 'uk_UA', language: 'українська', speechCode: 'uk-UA' } , { code: 'zh_cn', file: 'zh_CN', language: '中文(简体)', speechCode: 'cmn-Hans-CN' } // , { code: 'zh_tw', file: 'zh_TW', language: '中文(繁體)', speechCode: 'cmn-Hant-TW' } ]; diff --git a/lib/plugins/ar2.js b/lib/plugins/ar2.js index 5232feb0245..31ab4766f50 100644 --- a/lib/plugins/ar2.js +++ b/lib/plugins/ar2.js @@ -2,7 +2,6 @@ var _ = require('lodash'); var times = require('../times'); -var moment = require('moment'); var BG_REF = 140; //Central tendency var BG_MIN = 36; //Not 39, but why? @@ -17,6 +16,7 @@ var AR2_COLOR = 'cyan'; function init (ctx) { var translate = ctx.language.translate; + var moment = ctx.moment; var ar2 = { name: 'ar2' diff --git a/lib/plugins/basalprofile.js b/lib/plugins/basalprofile.js index 806dde5859d..69da48c98d6 100644 --- a/lib/plugins/basalprofile.js +++ b/lib/plugins/basalprofile.js @@ -1,10 +1,10 @@ 'use strict'; var times = require('../times'); -var moment = require('moment'); var consts = require('../constants'); var _ = require('lodash'); function init (ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; diff --git a/lib/plugins/batteryage.js b/lib/plugins/batteryage.js index 466c4faa77a..941cb3199d7 100644 --- a/lib/plugins/batteryage.js +++ b/lib/plugins/batteryage.js @@ -1,9 +1,9 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); function init(ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var levels = ctx.levels; diff --git a/lib/plugins/bgnow.js b/lib/plugins/bgnow.js index 35b96c024b4..43120eeb1e1 100644 --- a/lib/plugins/bgnow.js +++ b/lib/plugins/bgnow.js @@ -1,7 +1,6 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); var times = require('../times'); var offset = times.mins(2.5).msecs; @@ -9,6 +8,7 @@ var bucketFields = ['index', 'fromMills', 'toMills']; function init (ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var utils = require('../utils')(ctx); diff --git a/lib/plugins/cannulaage.js b/lib/plugins/cannulaage.js index 841848b9549..3b3f52eca49 100644 --- a/lib/plugins/cannulaage.js +++ b/lib/plugins/cannulaage.js @@ -1,9 +1,9 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); function init(ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var levels = ctx.levels; diff --git a/lib/plugins/cob.js b/lib/plugins/cob.js index 250614ecfd6..a75de32f9f8 100644 --- a/lib/plugins/cob.js +++ b/lib/plugins/cob.js @@ -1,10 +1,10 @@ 'use strict'; var _ = require('lodash') - , moment = require('moment') , times = require('../times'); function init (ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var iob = require('./iob')(ctx); diff --git a/lib/plugins/insulinage.js b/lib/plugins/insulinage.js index 0346ab24cc2..53da82c1ee8 100644 --- a/lib/plugins/insulinage.js +++ b/lib/plugins/insulinage.js @@ -1,9 +1,9 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); function init(ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var levels = ctx.levels; diff --git a/lib/plugins/iob.js b/lib/plugins/iob.js index cdcc15706e3..7ea38c168ae 100644 --- a/lib/plugins/iob.js +++ b/lib/plugins/iob.js @@ -1,10 +1,10 @@ 'use strict'; -var _ = require('lodash') - , moment = require('moment') - , times = require('../times'); +const _ = require('lodash') +const times = require('../times'); function init(ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var utils = require('../utils')(ctx); diff --git a/lib/plugins/loop.js b/lib/plugins/loop.js index 6521526860c..a08edb0a479 100644 --- a/lib/plugins/loop.js +++ b/lib/plugins/loop.js @@ -1,12 +1,13 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); var times = require('../times'); // var ALL_STATUS_FIELDS = ['status-symbol', 'status-label', 'iob', 'freq', 'rssi']; Unused variable function init (ctx) { + var moment = ctx.moment; + var utils = require('../utils')(ctx); var translate = ctx.language.translate; var levels = ctx.levels; @@ -231,7 +232,6 @@ function init (ctx) { , split: false , targets: false , reasons: reasonconf - , otp: true , submitHook: postLoopNotification }, { diff --git a/lib/plugins/openaps.js b/lib/plugins/openaps.js index fc9b7d04603..81e7bc25a05 100644 --- a/lib/plugins/openaps.js +++ b/lib/plugins/openaps.js @@ -1,13 +1,13 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); var times = require('../times'); var consts = require('../constants'); // var ALL_STATUS_FIELDS = ['status-symbol', 'status-label', 'iob', 'meal-assist', 'freq', 'rssi']; Unused variable function init (ctx) { + var moment = ctx.moment; var utils = require('../utils')(ctx); var openaps = { name: 'openaps' diff --git a/lib/plugins/pump.js b/lib/plugins/pump.js index dc087ba04f7..f055a4b1299 100644 --- a/lib/plugins/pump.js +++ b/lib/plugins/pump.js @@ -1,12 +1,12 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); var times = require('../times'); var ALL_STATUS_FIELDS = ['reservoir', 'battery', 'clock', 'status', 'device']; function init (ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var timeago = require('./timeago')(ctx); var openaps = require('./openaps')(ctx); diff --git a/lib/plugins/sensorage.js b/lib/plugins/sensorage.js index a28db2109df..a14b4f7c213 100644 --- a/lib/plugins/sensorage.js +++ b/lib/plugins/sensorage.js @@ -1,10 +1,10 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); var times = require('../times'); function init(ctx) { + var moment = ctx.moment; var translate = ctx.language.translate; var levels = ctx.levels; diff --git a/lib/plugins/treatmentnotify.js b/lib/plugins/treatmentnotify.js index 40216d97ace..be76b8cac5f 100644 --- a/lib/plugins/treatmentnotify.js +++ b/lib/plugins/treatmentnotify.js @@ -123,6 +123,11 @@ function init(ctx) { message = '...'; } + if (!eventType && lastTreatment.carbs && lastTreatment.insulin) eventType = "Meal Bolus"; + if (!eventType && lastTreatment.carbs) eventType = "Carb Correction"; + if (!eventType && lastTreatment.insulin) eventType = "Correcton Bolus"; + if (!eventType) eventType = "Note"; + const hash = crypto.createHash('sha1'); const info = JSON.stringify({ eventType, timestamp}); hash.update(info); diff --git a/lib/plugins/upbat.js b/lib/plugins/upbat.js index 5d25ff2447b..fb870cdf343 100644 --- a/lib/plugins/upbat.js +++ b/lib/plugins/upbat.js @@ -72,6 +72,7 @@ function init(ctx) { var battery = uploaderStatus.battery; var voltage = uploaderStatus.batteryVoltage; + var charging = status.isCharging ? status.isCharging : false; var voltageDisplay; if (voltage) { @@ -93,7 +94,7 @@ function init(ctx) { uploaderStatus.voltageDisplay = voltageDisplay; } - uploaderStatus.display = battery ? battery + '%' : voltageDisplay; + uploaderStatus.display = (battery ? battery + '%' : voltageDisplay) + (charging ? "⚡" : ""); if (battery >= 95) { uploaderStatus.level = 100; diff --git a/lib/plugins/virtAsstBase.js b/lib/plugins/virtAsstBase.js index 591bc5a24b9..e7cf2c731a3 100644 --- a/lib/plugins/virtAsstBase.js +++ b/lib/plugins/virtAsstBase.js @@ -1,9 +1,10 @@ 'use strict'; -var moment = require('moment'); var _each = require('lodash/each'); function init(env, ctx) { + var moment = ctx.moment; + function virtAsstBase() { return virtAsstBase; } diff --git a/lib/plugins/xdripjs.js b/lib/plugins/xdripjs.js index ffecc78c336..e1e64b89528 100644 --- a/lib/plugins/xdripjs.js +++ b/lib/plugins/xdripjs.js @@ -1,10 +1,10 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment'); var times = require('../times'); function init(ctx) { + var moment = ctx.moment; var levels = ctx.levels; var utils = require('../utils')(ctx); var firstPrefs = true; diff --git a/lib/profile/profileeditor.js b/lib/profile/profileeditor.js index d05d4ba1161..9a9062603c1 100644 --- a/lib/profile/profileeditor.js +++ b/lib/profile/profileeditor.js @@ -4,7 +4,6 @@ var init = function init () { //for the tests window isn't the global object var $ = window.$; var _ = window._; - var moment = window.moment; var Nightscout = window.Nightscout; var client = Nightscout.client; @@ -157,7 +156,7 @@ var init = function init () { // Load timezones timezoneInput.empty(); - moment.tz.names().forEach(function addTz(tz) { + client.ctx.timezones.forEach(function addTz(tz) { timezoneInput.append(''); }); @@ -198,8 +197,8 @@ var init = function init () { } databaseRecords.val(currentrecord); - timeInput.val(moment(mongorecords[currentrecord].startDate).format('HH:mm')); - dateInput.val(moment(mongorecords[currentrecord].startDate).format('YYYY-MM-DD')); + timeInput.val(client.ctx.moment(mongorecords[currentrecord].startDate).format('HH:mm')); + dateInput.val(client.ctx.moment(mongorecords[currentrecord].startDate).format('YYYY-MM-DD')); initProfile(); } @@ -313,11 +312,10 @@ var init = function init () { profileSubmit(); } GUIToObject(); - mongorecords.push(_.cloneDeep(mongorecords[currentrecord])); + mongorecords.push(_.omit(mongorecords[currentrecord], ['_id', 'srvModified', 'srvCreated', 'identifier', 'mills'])); currentrecord = mongorecords.length - 1; mongorecords[currentrecord].startDate = new Date().toISOString(); currentprofile = mongorecords[currentrecord].defaultProfile; - delete mongorecords[currentrecord]._id; initRecord(); dirty = true; @@ -390,6 +388,7 @@ var init = function init () { newname += '1'; } record.store[newname] = _.cloneDeep(record.store[currentprofile]); + currentprofile = newname; dirty = true; @@ -565,7 +564,20 @@ var init = function init () { $('#pe_delay_high').val(c_profile.delay_high); $('#pe_delay_medium').val(c_profile.delay_medium); $('#pe_delay_low').val(c_profile.delay_low); - timezoneInput.val(c_profile.timezone); + + // find the right zone regardless of string case + + var foundCase = c_profile.timezone; + + if (foundCase != "") { + var lcZone = c_profile.timezone.toLowerCase(); + + client.ctx.timezones.forEach(function testCase(tz) { + if (tz.toLowerCase() == lcZone) foundCase = tz; + }); + } + + timezoneInput.val(foundCase); var index; [ { prefix:'pe_basal', array:'basal' }, @@ -602,7 +614,15 @@ var init = function init () { c_profile.delay_high = parseInt($('#pe_delay_high').val()); c_profile.delay_medium = parseInt($('#pe_delay_medium').val()); c_profile.delay_low = parseInt($('#pe_delay_low').val()); - c_profile.timezone = timezoneInput.val(); + + // If the zone in the profile matches the editor profile + // but case is different, preserve case + + var zone = timezoneInput.val(); + + if (c_profile.timezone.toLowerCase() == timezoneInput.val().toLowerCase()) zone = c_profile.timezone; + + c_profile.timezone = zone; var index; [ { prefix:'pe_basal', array:'basal' }, @@ -635,11 +655,11 @@ var init = function init () { } function toTimeString(minfrommidnight) { - return moment.utc().startOf('day').add(minfrommidnight,'minutes').format('HH:mm'); // using utc to avoid daylight saving offset + return client.ctx.moment.utc().startOf('day').add(minfrommidnight,'minutes').format('HH:mm'); // using utc to avoid daylight saving offset } function toDisplayTime (minfrommidnight) { - var time = moment.utc().startOf('day').add(minfrommidnight,'minutes'); // using utc to avoid daylight saving offset + var time = client.ctx.moment.utc().startOf('day').add(minfrommidnight,'minutes'); // using utc to avoid daylight saving offset return client.settings.timeFormat === 24 ? time.format('HH:mm') : time.format('h:mm A'); } @@ -652,6 +672,8 @@ var init = function init () { profileChange(event); var record = mongorecords[currentrecord]; record.startDate = new Date(client.utils.mergeInputTime(timeInput.val(), dateInput.val())).toISOString( ); + record.created_at = new Date().toISOString( ); + record.srvModified = new Date().getTime(); // remove when switching to v3 API var adjustedRecord = _.cloneDeep(record); diff --git a/lib/profilefunctions.js b/lib/profilefunctions.js index 167e64ca5e7..e5dafe45275 100644 --- a/lib/profilefunctions.js +++ b/lib/profilefunctions.js @@ -1,14 +1,15 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment-timezone'); var c = require('memory-cache'); var times = require('./times'); var cacheTTL = 5000; var prevBasalTreatment = null; -function init (profileData) { +function init (profileData, ctx) { + +var moment = ctx.moment; var cache = new c.Cache(); var profile = {}; @@ -174,7 +175,10 @@ function init (profileData) { }; profile.getTimezone = function getTimezone (spec_profile) { - return profile.getCurrentProfile(null, spec_profile)['timezone']; + let rVal = profile.getCurrentProfile(null, spec_profile)['timezone']; + // Work around Loop uploading non-ISO compliant time zone string + if (rVal) rVal.replace('ETC','Etc'); + return rVal; }; profile.hasData = function hasData () { diff --git a/lib/report/reportclient.js b/lib/report/reportclient.js index b62a5467b64..bf806591436 100644 --- a/lib/report/reportclient.js +++ b/lib/report/reportclient.js @@ -4,7 +4,6 @@ var init = function init () { //for the tests window isn't the global object var $ = window.$; var _ = window._; - var moment = window.moment; var Nightscout = window.Nightscout; var client = Nightscout.client; var report_plugins_preinit = Nightscout.report_plugins_preinit; @@ -12,6 +11,8 @@ var init = function init () { client.init(function loaded () { + var moment = client.ctx.moment; + report_plugins = report_plugins_preinit(client.ctx); Nightscout.report_plugins = report_plugins; @@ -257,9 +258,11 @@ var init = function init () { function datefilter () { if ($('#rp_enabledate').is(':checked')) { matchesneeded++; - var from = moment.tz($('#rp_from').val().replace(/\//g, '-') + 'T00:00:00', zone); - var to = moment.tz($('#rp_to').val().replace(/\//g, '-') + 'T23:59:59', zone); + var from = moment.tz(moment($('#rp_from').val()).startOf('day'), zone).startOf('day'); + var to = moment.tz(moment($('#rp_to').val()).endOf('day'), zone).endOf('day'); timerange = '&find[created_at][$gte]=' + from.toISOString() + '&find[created_at][$lt]=' + to.toISOString(); + + console.log("FROM", from.format( ), "TO", to.format( ), 'timerange', timerange); //console.log($('#rp_from').val(),$('#rp_to').val(),zone,timerange); while (from <= to) { if (daystoshow[from.format('YYYY-MM-DD')]) { diff --git a/lib/report_plugins/daytoday.js b/lib/report_plugins/daytoday.js index 49aad99ed16..c44cdf0386f 100644 --- a/lib/report_plugins/daytoday.js +++ b/lib/report_plugins/daytoday.js @@ -96,7 +96,9 @@ daytoday.report = function report_daytoday (datastorage, sorteddaystoshow, optio var fatSum = 0; daytoday.prepareHtml(sorteddaystoshow); + console.log('DAY2DAY', 'sorteddaystoshow', sorteddaystoshow); sorteddaystoshow.forEach(function eachDay (day) { + drawChart(day, datastorage[day], options); }); @@ -168,7 +170,7 @@ daytoday.report = function report_daytoday (datastorage, sorteddaystoshow, optio // create svg and g to contain the chart contents charts = d3.select('#daytodaychart-' + day).html( '' + - report_plugins.utils.localeDate(day) + + report_plugins.utils.localeDate(moment(day)) + '
' ).append('svg'); @@ -432,8 +434,8 @@ daytoday.report = function report_daytoday (datastorage, sorteddaystoshow, optio contextCircles.exit() .remove(); - var to = moment(day).add(1, 'days'); - var from = moment(day); + var from = moment.tz(moment(day), profile.getTimezone( )).startOf('day'); + var to = moment(from.clone( )).add(1, 'days'); var iobpolyline = '' , cobpolyline = ''; diff --git a/lib/sandbox.js b/lib/sandbox.js index 85e0e86dc1d..6b338e7b1cc 100644 --- a/lib/sandbox.js +++ b/lib/sandbox.js @@ -55,7 +55,7 @@ function init () { sbx.language = ctx.language; sbx.translate = ctx.language.translate; - var profile = require('./profilefunctions')(); + var profile = require('./profilefunctions')(null, ctx); //Plugins will expect the right profile based on time profile.loadData(_.cloneDeep(ctx.ddata.profiles)); profile.updateTreatments(ctx.ddata.profileTreatments, ctx.ddata.tempbasalTreatments, ctx.ddata.combobolusTreatments); diff --git a/lib/server/activity.js b/lib/server/activity.js index 45b77e60587..7be7d3d1581 100644 --- a/lib/server/activity.js +++ b/lib/server/activity.js @@ -4,7 +4,7 @@ var find_options = require('./query'); function storage (env, ctx) { - var ObjectID = require('mongodb').ObjectID; + var ObjectID = require('mongodb-legacy').ObjectId; function create (obj, fn) { obj.created_at = (new Date( )).toISOString( ); @@ -62,7 +62,7 @@ function storage (env, ctx) { function remove (_id, fn) { var objId = new ObjectID(_id); - return api( ).remove({ '_id': objId }, fn); + return api( ).deleteOne({ '_id': objId }, fn); } function api ( ) { diff --git a/lib/server/app.js b/lib/server/app.js index bb68a2f711a..8e9b967b7b9 100644 --- a/lib/server/app.js +++ b/lib/server/app.js @@ -184,9 +184,8 @@ function create (env, ctx) { /////////////////////////////////////////////////// const apiRoot = require('../api/root')(env, ctx); var api = require('../api/')(env, ctx); + var api2 = require('../api2/')(env,ctx, api); var api3 = require('../api3/')(env, ctx); - var ddata = require('../data/endpoints')(env, ctx); - var notificationsV2 = require('../api/notifications-v2')(app, ctx); app.use(compression({ filter: function shouldCompress (req, res) { @@ -245,16 +244,8 @@ function create (env, ctx) { app.use("/clock", clockviews); app.use('/api', apiRoot); - app.use('/api/v1', api); - - app.use('/api/v2', api); - - app.use('/api/v2/properties', ctx.properties); - app.use('/api/v2/authorization', ctx.authorization.endpoints); - app.use('/api/v2/ddata', ddata); - app.use('/api/v2/notifications', notificationsV2); - + app.use('/api/v2', api2); app.use('/api/v3', api3); // pebble data @@ -320,7 +311,7 @@ function create (env, ctx) { } // Production bundling - const tmpFiles = express.static(resolvePath('/tmp/public'), { + const tmpFiles = express.static(resolvePath('/node_modules/.cache/_ns_cache/public'), { maxAge: maxAge }); @@ -343,7 +334,7 @@ function create (env, ctx) { , coffee_match: /coffeescript/ , json_match: /json/ , cssmin: myCssmin - , cache: resolvePath('/tmp/public') + , cache: resolvePath('/node_modules/.cache/_ns_cache/public') , onerror: undefined , })); diff --git a/lib/server/bootevent.js b/lib/server/bootevent.js index 592f122b18f..61a6149a43d 100644 --- a/lib/server/bootevent.js +++ b/lib/server/bootevent.js @@ -1,14 +1,18 @@ 'use strict'; const _ = require('lodash'); -const UPDATE_THROTTLE = 5000; +const UPDATE_THROTTLE = 15000; function boot (env, language) { function startBoot(ctx, next) { - console.log('Executing startBoot'); + console.log('++++++++++++++++++++++++++++++'); + console.log('Nightscout Executing startBoot'); + console.log('++++++++++++++++++++++++++++++'); + ctx.bootErrors = [ ]; + ctx.moment = require('moment-timezone'); ctx.runtimeState = 'booting'; ctx.settings = env.settings; ctx.bus = require('../bus')(env.settings, ctx); @@ -23,7 +27,8 @@ function boot (env, language) { ////////////////////////////////////////////////// // Check Node version. - // Latest Node 10 to 14 LTS are recommended and supported. + // Latest Node LTS releases are recommended and supported. + // Current Node releases MAY work, but are not recommended. Will be tested in CI // Older Node versions or Node versions with known security issues will not work. /////////////////////////////////////////////////// function checkNodeVersion (ctx, next) { @@ -34,10 +39,10 @@ function boot (env, language) { var nodeVersion = process.version; const isLTS = process.release.lts ? true : false; - - if (isLTS && (semver.satisfies(nodeVersion, '^16.0.0') || semver.satisfies(nodeVersion, '^14.0.0') || semver.satisfies(nodeVersion, '^12.0.0') || semver.satisfies(nodeVersion, '^10.0.0'))) { - //Latest Node 10 LTS and Node 12 LTS are recommended and supported. - //Require at least Node 8 LTS and Node 10 LTS without known security issues + + if (isLTS || (semver.satisfies(nodeVersion, '^20.0.0') || semver.satisfies(nodeVersion, '^18.0.0') || semver.satisfies(nodeVersion, '^16.0.0') || semver.satisfies(nodeVersion, '^14.0.0'))) { + //Latest Node 14 LTS and Node 16 LTS are recommended and supported. + //Require at least Node 14 without known security issues console.debug('Node LTS version ' + nodeVersion + ' is supported'); next(); return; @@ -71,29 +76,35 @@ function boot (env, language) { var configURL = env.IMPORT_CONFIG || null; var url = require('url'); var href = null; - try { - href = url.parse(configURL).href; - } catch (e) { - console.error('Parsing config URL from IMPORT_CONFIG failed'); + + if (configURL) { + try { + href = url.parse(configURL).href; + } catch (e) { + console.error('Parsing config URL from IMPORT_CONFIG failed'); + } } + if(configURL && href) { - var request = require('request'); + var axios_default = { headers: { 'Accept': 'application/json' } }; + var axios = require('axios').create(axios_default); console.log('Getting settings from', href); - request.get({url: href, json: true}, function (err, resp, body) { - if (err) { - console.log('Attempt to fetch config', href, 'failed.'); - console.error(err); - throw err; - } else { - var settings = body.settings || body; - console.log('extending settings with', settings); - _.merge(env.settings, settings); - if (body.extendedSettings) { - console.log('extending extendedSettings with', body.extendedSettings); - _.merge(env.extendedSettings, body.extendedSettings); - } + return axios.get(href).then(function (resp) { + var body = resp.data; + var settings = body.settings || body; + console.log('extending settings with', settings); + _.merge(env.settings, settings); + if (body.extendedSettings) { + console.log('extending extendedSettings with', body.extendedSettings); + _.merge(env.extendedSettings, body.extendedSettings); } next( ); + }).catch(function (err) { + var synopsis = ['Attempt to fetch config', href, 'failed.']; + console.log('Attempt to fetch config', href, 'failed.', err.response); + ctx.bootErrors.push({desc: synopsis.join(' '), err}); + next( ); + }); } else { next( ); @@ -139,16 +150,6 @@ function boot (env, language) { } try { - if (_.startsWith(env.storageURI, 'openaps://')) { - require('../storage/openaps-storage')(env, function ready (err, store) { - if (err) { - throw err; - } - ctx.store = store; - console.log('OpenAPS Storage system ready'); - next(); - }); - } else { //TODO assume mongo for now, when there are more storage options add a lookup require('../storage/mongo-storage')(env, function ready(err, store) { // FIXME, error is always null, if there is an error, the index.js will throw an exception @@ -161,7 +162,6 @@ function boot (env, language) { ctx.store = store; next(); }); - } } catch (err) { console.info('ERROR CONNECTING TO MONGO', err); ctx.bootErrors = ctx.bootErrors || [ ]; @@ -179,6 +179,7 @@ function boot (env, language) { } ctx.authorization = require('../authorization')(env, ctx); + ctx.authorization.storage.ensureIndexes(); ctx.authorization.storage.reload(function loaded (err) { if (err) { ctx.bootErrors = ctx.bootErrors || [ ]; @@ -206,6 +207,7 @@ function boot (env, language) { settings: env.settings , language: ctx.language , levels: ctx.levels + , moment: ctx.moment }).registerServerDefaults(); ctx.wares = require('../middleware/')(env); @@ -222,7 +224,7 @@ function boot (env, language) { ctx.profile = require('./profile')(env.profile_collection, ctx); ctx.food = require('./food')(env, ctx); ctx.pebble = require('./pebble')(env, ctx); - ctx.properties = require('../api/properties')(env, ctx); + ctx.properties = require('../api2/properties')(env, ctx); ctx.ddata = require('../data/ddata')(); ctx.cache = require('./cache')(env,ctx); ctx.dataloader = require('../data/dataloader')(env, ctx); @@ -284,6 +286,7 @@ function boot (env, language) { ctx.bus.on('data-received', function forceReloadData ( ) { console.info('got data-received event, requesting reload'); + ctx.bus.emit('data-loaded'); // Since we update local sandbox instantly, process data-loaded right away in case this gets debounced updateData(); }); @@ -294,7 +297,8 @@ function boot (env, language) { ctx.notifications.initRequests(); ctx.plugins.checkNotifications(sbx); ctx.notifications.process(sbx); - ctx.bus.emit('data-processed'); + ctx.sbx = sbx; + ctx.bus.emit('data-processed', sbx); }); ctx.bus.on('data-processed', function processed ( ) { @@ -306,6 +310,13 @@ function boot (env, language) { next( ); } + function setupConnect (ctx, next) { + console.log('Executing setupConnect'); + ctx.nightscoutConnect = require('nightscout-connect')(env, ctx) + // ctx.nightscoutConnect. + return next( ); + } + function setupBridge (ctx, next) { console.log('Executing setupBridge'); @@ -317,6 +328,7 @@ function boot (env, language) { ctx.bridge = require('../plugins/bridge')(env, ctx.bus); if (ctx.bridge) { ctx.bridge.startEngine(ctx.entries); + console.log("DEPRECATION WARNING", "PLEASE CONSIDER nightscout-connect instead."); } next( ); } @@ -332,6 +344,7 @@ function boot (env, language) { ctx.mmconnect = require('../plugins/mmconnect').init(env, ctx.entries, ctx.devicestatus, ctx.bus); if (ctx.mmconnect) { ctx.mmconnect.run(); + console.log("DEPRECATION WARNING", "PLEASE CONSIDER nightscout-connect instead."); } next( ); } @@ -343,6 +356,7 @@ function boot (env, language) { if (hasBootErrors(ctx)) { return next(); } + ctx.bus.emit('finishBoot'); ctx.runtimeState = 'booted'; ctx.bus.uptime( ); @@ -361,6 +375,7 @@ function boot (env, language) { .acquire(setupInternals) .acquire(ensureIndexes) .acquire(setupListeners) + .acquire(setupConnect) .acquire(setupBridge) .acquire(setupMMConnect) .acquire(finishBoot); diff --git a/lib/server/cache.js b/lib/server/cache.js index 5b92e42f58d..06e55c2a665 100644 --- a/lib/server/cache.js +++ b/lib/server/cache.js @@ -29,23 +29,31 @@ function cache (env, ctx) { , entries: constants.TWO_DAYS }; + function getObjectAge(object) { + let age = object.mills || object.date; + if (isNaN(age) && object.created_at) age = Date.parse(object.created_at).valueOf(); + return age; + } + function mergeCacheArrays (oldData, newData, retentionPeriod) { const ageLimit = Date.now() - retentionPeriod; - var filteredOld = filterForAge(oldData, ageLimit); + var filteredOld = filterForAge(oldData, ageLimit); var filteredNew = filterForAge(newData, ageLimit); const merged = ctx.ddata.idMergePreferNew(filteredOld, filteredNew); return _.sortBy(merged, function(item) { - return -item.mills; + const age = getObjectAge(item); + return -age; }); function filterForAge(data, ageLimit) { return _.filter(data, function hasId(object) { const hasId = !_.isEmpty(object._id); - const isFresh = object.mills >= ageLimit; + const age = getObjectAge(object); + const isFresh = age >= ageLimit; return isFresh && hasId; }); } diff --git a/lib/server/devicestatus.js b/lib/server/devicestatus.js index bf71437d646..0bde778a6a6 100644 --- a/lib/server/devicestatus.js +++ b/lib/server/devicestatus.js @@ -24,16 +24,16 @@ function storage (collection, ctx) { obj.utcOffset = d.utcOffset(); api().insertOne(obj, function(err, results) { - if (err !== null && err.message) { + + if (err) { console.log('Error inserting the device status object', err.message); errorOccurred = true; fn(err.message, null); return; } - if (!err) { - - if (!obj._id) obj._id = results.insertedIds[0]._id; + if (results) { + if (!obj._id) obj._id = results.insertedId; r.push(obj); ctx.bus.emit('data-update', { @@ -47,6 +47,11 @@ function storage (collection, ctx) { fn(null, r); ctx.bus.emit('data-received'); } + } else { + console.log('Error inserting the device status object', err.message); + errorOccurred = true; + fn(err.message, null); + return; } }); }; @@ -100,17 +105,19 @@ function storage (collection, ctx) { function removed (err, stat) { + console.log('removed', err, stat); + ctx.bus.emit('data-update', { type: 'devicestatus' , op: 'remove' - , count: stat.result.n + , count: stat.deletedCount , changes: opts.find._id }); fn(err, stat); } - return api().remove( + return api().deleteMany( query_for(opts), removed); } diff --git a/lib/server/enclave.js b/lib/server/enclave.js index 2ae0ef2ebcb..03dc8facf96 100644 --- a/lib/server/enclave.js +++ b/lib/server/enclave.js @@ -19,7 +19,7 @@ const init = function init () { let apiKeySet = false; function readKey (filename) { - let filePath = path.resolve(__dirname + '/../../tmp/' + filename); + let filePath = path.resolve(__dirname + '/../../node_modules/.cache/_ns_cache/' + filename); if (fs.existsSync(filePath)) { return fs.readFileSync(filePath).toString().trim(); } @@ -32,7 +32,7 @@ const init = function init () { function genHash(data, algorihtm) { const hash = crypto.createHash(algorihtm); data = hash.update(data, 'utf-8'); - return data.digest('hex'); + return data.digest('hex').toLowerCase(); } enclave.setApiKey = function setApiKey (keyValue) { @@ -48,7 +48,7 @@ const init = function init () { } enclave.isApiKey = function isApiKey (keyValue) { - return keyValue == secrets[apiKeySHA1] || keyValue == secrets[apiKeySHA512]; + return keyValue.toLowerCase() == secrets[apiKeySHA1] || keyValue == secrets[apiKeySHA512]; } enclave.setJWTKey = function setJWTKey (keyValue) { @@ -72,7 +72,7 @@ const init = function init () { var shasum = crypto.createHash('sha1'); shasum.update(secrets[apiKeySHA1]); shasum.update(id); - return shasum.digest('hex'); + return shasum.digest('hex').toLowerCase(); } return enclave; diff --git a/lib/server/entries.js b/lib/server/entries.js index 50c8e0cc41a..0fbe46acca4 100644 --- a/lib/server/entries.js +++ b/lib/server/entries.js @@ -2,7 +2,7 @@ var es = require('event-stream'); var find_options = require('./query'); -var ObjectID = require('mongodb').ObjectID; +var ObjectId = require('mongodb-legacy').ObjectId; var moment = require('moment'); /**********\ @@ -46,12 +46,12 @@ function storage (env, ctx) { } function remove (opts, fn) { - api().remove(query_for(opts), function(err, stat) { + api().deleteMany(query_for(opts), function(err, stat) { ctx.bus.emit('data-update', { type: 'entries' , op: 'remove' - , count: stat.result.n + , count: stat.deletedCount , changes: opts.find._id }); @@ -99,20 +99,23 @@ function storage (env, ctx) { // Normalize dates to be in UTC, store offset in utcOffset - var _sysTime = moment(doc.dateString).isValid() ? moment.parseZone(doc.dateString) : moment(doc.date); - _sysTime = _sysTime.isValid() ? _sysTime : moment(); + var _sysTime; + + if (doc.dateString) { _sysTime = moment.parseZone(doc.dateString); } + if (!_sysTime && doc.date) { _sysTime = moment(doc.date); } + if (!_sysTime) _sysTime = moment(); doc.utcOffset = _sysTime.utcOffset(); doc.sysTime = _sysTime.toISOString(); if (doc.dateString) doc.dateString = doc.sysTime; var query = (doc.sysTime && doc.type) ? { sysTime: doc.sysTime, type: doc.type } : doc; - api().update(query, doc, { upsert: true }, function(err, updateResults) { + api().replaceOne(query, doc, { upsert: true }, function(err, updateResults) { firstErr = firstErr || err; - if (!err) { - if (updateResults.result.upserted) { - doc._id = updateResults.result.upserted[0]._id + if (updateResults) { + if (updateResults.upsertedCount == 1) { + doc._id = updateResults.upsertedId } ctx.bus.emit('data-update', { @@ -132,7 +135,7 @@ function storage (env, ctx) { } function getEntry (id, fn) { - api().findOne({ _id: ObjectID(id) }, function(err, entry) { + api().findOne({ "_id": new ObjectId(id) }, function(err, entry) { if (err) { fn(err); } else { @@ -163,17 +166,11 @@ function storage (env, ctx) { api.aggregate = require('./aggregate')({}, api); api.indexedFields = [ 'date' - , 'type' - , 'sgv' - , 'mbg' - , 'sysTime' - , 'dateString' - , { 'type': 1, 'date': -1, 'dateString': 1 } ]; return api; diff --git a/lib/server/food.js b/lib/server/food.js index 92c41843f7b..8076ad5aa7a 100644 --- a/lib/server/food.js +++ b/lib/server/food.js @@ -1,7 +1,7 @@ 'use strict'; function storage (env, ctx) { - var ObjectID = require('mongodb').ObjectID; + var ObjectID = require('mongodb-legacy').ObjectId; function create (obj, fn) { obj.created_at = (new Date( )).toISOString( ); @@ -42,7 +42,7 @@ function storage (env, ctx) { function remove (_id, fn) { var objId = new ObjectID(_id); - return api( ).remove({ '_id': objId }, fn); + return api( ).deleteOne({ '_id': objId }, fn); } diff --git a/lib/server/loop.js b/lib/server/loop.js index 83a488ef72d..3b31c0ec78c 100644 --- a/lib/server/loop.js +++ b/lib/server/loop.js @@ -1,6 +1,6 @@ //'use strict'; -const apn = require('apn'); +const apn = require('@parse/node-apn'); function init (env, ctx) { @@ -128,6 +128,7 @@ function init (env, ctx) { notification.topic = loopSettings.bundleIdentifier; notification.contentAvailable = 1; notification.payload = payload; + notification.interruptionLevel = "time-sensitive" provider.send(notification, [loopSettings.deviceToken]).then( (response) => { if (response.sent && response.sent.length > 0) { diff --git a/lib/server/profile.js b/lib/server/profile.js index e49e366d15a..6f5b2b96194 100644 --- a/lib/server/profile.js +++ b/lib/server/profile.js @@ -4,7 +4,7 @@ var find_options = require('./query'); var consts = require('../constants'); function storage (collection, ctx) { - var ObjectID = require('mongodb').ObjectID; + var ObjectID = require('mongodb-legacy').ObjectId; function create (obj, fn) { obj.created_at = (new Date( )).toISOString( ); @@ -79,7 +79,7 @@ function storage (collection, ctx) { function remove (_id, fn) { var objId = new ObjectID(_id); - api( ).remove({ '_id': objId }, fn); + api( ).deleteOne({ '_id': objId }, fn); ctx.bus.emit('data-received'); } diff --git a/lib/server/query.js b/lib/server/query.js index 8279d5ad1e8..0e9750ad562 100644 --- a/lib/server/query.js +++ b/lib/server/query.js @@ -1,7 +1,7 @@ 'use strict'; const traverse = require('traverse'); -const ObjectID = require('mongodb').ObjectID; +const ObjectID = require('mongodb-legacy').ObjectId; const moment = require('moment'); const TWO_DAYS = 172800000; diff --git a/lib/server/server.js b/lib/server/server.js index ea75d5ac636..49efaeb9394 100644 --- a/lib/server/server.js +++ b/lib/server/server.js @@ -70,14 +70,6 @@ require('./bootevent')(env, language).boot(function booted (ctx) { /////////////////////////////////////////////////// var websocket = require('./websocket')(env, ctx, server); - ctx.bus.on('data-processed', function() { - websocket.update(); - }); - - ctx.bus.on('notification', function(notify) { - websocket.emitNotification(notify); - }); - //after startup if there are no alarms send all clear let sendStartupAllClearTimer = setTimeout(function sendStartupAllClear () { var alarm = ctx.notifications.findHighestAlarm(); diff --git a/lib/server/treatments.js b/lib/server/treatments.js index a9107ea99b2..687d7cfd914 100644 --- a/lib/server/treatments.js +++ b/lib/server/treatments.js @@ -6,7 +6,7 @@ var moment = require('moment'); var find_options = require('./query'); function storage (env, ctx) { - var ObjectID = require('mongodb').ObjectID; + var ObjectID = require('mongodb-legacy').ObjectId; function create (objOrArray, fn) { @@ -46,18 +46,18 @@ function storage (env, ctx) { , eventType: obj.eventType }; - api( ).update(query, obj, {upsert: true}, function complete (err, updateResults) { + api( ).replaceOne(query, obj, {upsert: true}, function complete (err, updateResults) { if (err) console.error('Problem upserting treatment', err); - if (!err) { - if (updateResults.result.upserted) { - obj._id = updateResults.result.upserted[0]._id + if (updateResults) { + if (updateResults.upsertedCount == 1) { + obj._id = updateResults.upsertedId } } // TODO document this feature - if (!err && obj.preBolus) { + if (updateResults && obj.preBolus) { //create a new object to insert copying only the needed fields var pbTreat = { created_at: (new Date(new Date(results.created_at).getTime() + (obj.preBolus * 60000))).toISOString(), @@ -70,11 +70,11 @@ function storage (env, ctx) { } query.created_at = pbTreat.created_at; - api( ).update(query, pbTreat, {upsert: true}, function pbComplete (err, updateResults) { + api( ).replaceOne(query, pbTreat, {upsert: true}, function pbComplete (err, updateResults) { - if (!err) { - if (updateResults.result.upserted) { - pbTreat._id = updateResults.result.upserted[0]._id + if (updateResults) { + if (updateResults.upsertedCount == 1) { + pbTreat._id = updateResults.upsertedId } } @@ -122,14 +122,14 @@ function storage (env, ctx) { } function remove (opts, fn) { - return api( ).remove(query_for(opts), function (err, stat) { + return api( ).deleteMany(query_for(opts), {}, function (err, stat) { //TODO: this is triggering a read from Mongo, we can do better //console.log('Treatment removed', opts); // , stat); ctx.bus.emit('data-update', { type: 'treatments', op: 'remove', - count: stat.result.n, + count: stat.deletedCount, changes: opts.find._id }); diff --git a/lib/server/websocket.js b/lib/server/websocket.js index 22039f52b65..b3ad9df59af 100644 --- a/lib/server/websocket.js +++ b/lib/server/websocket.js @@ -2,17 +2,20 @@ var times = require('../times'); var calcData = require('../data/calcdelta'); -var ObjectID = require('mongodb').ObjectID; +var ObjectID = require('mongodb-legacy').ObjectId; const forwarded = require('forwarded-for'); +function getRemoteIP (req) { + const address = forwarded(req, req.headers); + return address.ip; +} + function init (env, ctx, server) { function websocket () { return websocket; } - var levels = ctx.levels; - //var log_yellow = '\x1B[33m'; var log_green = '\x1B[32m'; var log_magenta = '\x1B[35m'; @@ -69,13 +72,19 @@ function init (env, ctx, server) { function start () { io = require('socket.io')({ - 'transports': ['xhr-polling'] - , 'log level': 0 + 'log level': 0 }).listen(server, { //these only effect the socket.io.js file that is sent to the client, but better than nothing 'browser client minification': true , 'browser client etag': true , 'browser client gzip': false + , 'perMessageDeflate': { + threshold: 512 + } + , transports: ["polling", "websocket"] + , httpCompression: { + threshold: 512 + } }); ctx.bus.on('teardown', function serverTeardown () { @@ -84,6 +93,11 @@ function init (env, ctx, server) { }); io.close(); }); + + ctx.bus.on('data-processed', function() { + update(); + }); + } function verifyAuthorization (message, ip, callback) { @@ -117,7 +131,7 @@ function init (env, ctx, server) { delta.status = status(ctx.ddata.profiles); lastProfileSwitch = ctx.ddata.lastProfileFromSwitch; } - io.to('DataReceivers').emit('dataUpdate', delta); + io.to('DataReceivers').compress(true).emit('dataUpdate', delta); } } @@ -128,15 +142,10 @@ function init (env, ctx, server) { var timeDiff; var history; - const address = forwarded(socket.request, socket.request.headers); - const remoteIP = address.ip; + const remoteIP = getRemoteIP(socket.request); console.log(LOG_WS + 'Connection from client ID: ', socket.client.id, ' IP: ', remoteIP); io.emit('clients', ++watchers); - socket.on('ack', function onAck (level, group, silenceTime) { - ctx.notifications.ack(level, group, silenceTime, true); - }); - socket.on('disconnect', function onDisconnect () { io.emit('clients', --watchers); console.log(LOG_WS + 'Disconnected client ID: ', socket.client.id); @@ -179,7 +188,7 @@ function init (env, ctx, server) { callback({ result: 'success' }); } //TODO: use opts to only send delta for retro data - socket.emit('retroUpdate', { devicestatus: lastData.devicestatus }); + socket.compress(true).emit('retroUpdate', { devicestatus: lastData.devicestatus }); console.info('sent retroUpdate', opts); }); @@ -211,7 +220,7 @@ function init (env, ctx, server) { id = new ObjectID(); } - ctx.store.collection(collection).update({ '_id': id } + ctx.store.collection(collection).updateOne({ '_id': id } , { $set: data.data } , function(err, results) { @@ -259,7 +268,7 @@ function init (env, ctx, server) { } var objId = new ObjectID(data._id); - ctx.store.collection(collection).update({ '_id': objId }, { $unset: data.data } + ctx.store.collection(collection).updateOne({ '_id': objId }, { $unset: data.data } , function(err, results) { if (!err) { @@ -385,7 +394,7 @@ function init (env, ctx, server) { console.log(LOG_DEDUP + 'Found similiar', array[0]); array[0].created_at = data.data.created_at; var objId = new ObjectID(array[0]._id); - ctx.store.collection(collection).update({ '_id': objId }, { $set: { created_at: data.data.created_at } }); + ctx.store.collection(collection).updateOne({ '_id': objId }, { $set: { created_at: data.data.created_at } }); if (callback) { callback([array[0]]); } @@ -497,14 +506,14 @@ function init (env, ctx, server) { } var objId = new ObjectID(data._id); - ctx.store.collection(collection).remove({ '_id': objId } + ctx.store.collection(collection).deleteOne({ '_id': objId } , function(err, stat) { if (!err) { ctx.bus.emit('data-update', { type: data.collection , op: 'remove' - , count: stat.result.n + , count: stat.deletedCount , changes: data._id }); @@ -525,7 +534,7 @@ function init (env, ctx, server) { // [, status : true ] // } socket.on('authorize', function authorize (message, callback) { - const remoteIP = socket.request.connection.remoteAddress; + const remoteIP = getRemoteIP(socket.request); verifyAuthorization(message, remoteIP, function verified (err, authorization) { if (err) { @@ -559,23 +568,10 @@ function init (env, ctx, server) { } }); }); - - // Pind message - // { - // mills: - // } - socket.on('nsping', function ping (message, callback) { - var clientTime = message.mills; - timeDiff = new Date().getTime() - clientTime; - // console.log(LOG_WS + 'Ping from client ID: ',socket.client.id, ' client: ', clientType, ' timeDiff: ', (timeDiff/1000).toFixed(1) + 'sec'); - if (callback) { - callback({ result: 'pong', mills: new Date().getTime(), authorization: socketAuthorization }); - } - }); }); } - websocket.update = function update () { + function update () { // console.log(LOG_WS + 'running websocket.update'); if (lastData.sgvs) { var delta = calcData(lastData, ctx.ddata); @@ -588,25 +584,6 @@ function init (env, ctx, server) { lastData = ctx.ddata.clone(); }; - websocket.emitNotification = function emitNotification (notify) { - if (notify.clear) { - io.emit('clear_alarm', notify); - console.info(LOG_WS + 'emitted clear_alarm to all clients'); - } else if (notify.level === levels.WARN) { - io.emit('alarm', notify); - console.info(LOG_WS + 'emitted alarm to all clients'); - } else if (notify.level === levels.URGENT) { - io.emit('urgent_alarm', notify); - console.info(LOG_WS + 'emitted urgent_alarm to all clients'); - } else if (notify.isAnnouncement) { - io.emit('announcement', notify); - console.info(LOG_WS + 'emitted announcement to all clients'); - } else { - io.emit('notification', notify); - console.info(LOG_WS + 'emitted notification to all clients'); - } - }; - start(); listeners(); @@ -614,6 +591,10 @@ function init (env, ctx, server) { ctx.storageSocket.init(io); } + if (ctx.alarmSocket) { + ctx.alarmSocket.init(io); + } + return websocket(); } diff --git a/lib/settings.js b/lib/settings.js index d538f226591..8de44d64a73 100644 --- a/lib/settings.js +++ b/lib/settings.js @@ -72,6 +72,7 @@ function init () { , adminNotifiesEnabled: true , obscured: '' , obscureDeviceProvenance: '' + , authenticationPromptOnLoad: false }; var secureSettings = [ @@ -111,6 +112,7 @@ function init () { , bgTargetBottom: mapNumber , authFailDelay: mapNumber , adminNotifiesEnabled: mapTruthy + , authenticationPromptOnLoad: mapTruthy }; function filterObj(obj, secureKeys) { diff --git a/lib/storage/mongo-storage.js b/lib/storage/mongo-storage.js index 987e41ef67d..1175cb0d81a 100644 --- a/lib/storage/mongo-storage.js +++ b/lib/storage/mongo-storage.js @@ -1,6 +1,6 @@ 'use strict'; -const MongoClient = require('mongodb').MongoClient; +const MongoClient = require('mongodb-legacy').MongoClient; const mongo = { client: null, @@ -82,10 +82,11 @@ function init(env, cb, forceNewConnection) { mongo.ensureIndexes = function ensureIndexes(collection, fields) { fields.forEach(function (field) { - console.info('ensuring index for: ' + field); + const name = collection.collectionName + "." + field; + console.info('ensuring index for: ' + name); collection.createIndex(field, { 'background': true }, function (err) { if (err) { - console.error('unable to ensureIndex for: ' + field + ' - ' + err); + console.error('unable to ensureIndex for: ' + name + ' - ' + err); } }); }); diff --git a/lib/storage/openaps-storage.js b/lib/storage/openaps-storage.js deleted file mode 100644 index 0c9c238015e..00000000000 --- a/lib/storage/openaps-storage.js +++ /dev/null @@ -1,191 +0,0 @@ -'use strict'; - -var _ = require('lodash'); -var fs = require('fs'); -var crypto = require('crypto'); -var MongoMock = require('mongomock'); - -var config = { - collections: {} -}; - -function init (env, callback) { - - if (!env.storageURI || !_.isString(env.storageURI)) { - throw new Error('openaps config uri is missing or invalid'); - } - - var configPath = env.storageURI.split('openaps://').pop(); - - function addId (data) { - var shasum = crypto.createHash('sha1'); - shasum.update(JSON.stringify(data)); - data._id = shasum.digest('hex'); - } - - function loadData (path) { - - if (!path || !_.isString(path)) { - return [ ]; - } - - try { - purgeCache(path); - var inputData = require(path); - if (_.isArray(inputData)) { - //console.info('>>>input is an array', path); - _.forEach(inputData, addId); - } else if (!_.isEmpty(inputData) && _.isObject(inputData)) { - //console.info('>>>input is an object', path); - inputData.created_at = new Date(fs.statSync(path).mtime).toISOString(); - addId(inputData); - inputData = [ inputData ]; - } else { - //console.info('>>>input is something else', path, inputData); - inputData = [ ]; - } - - return inputData; - } catch (err) { - console.error('unable to find input data for', path, err); - return [ ]; - } - - } - - function reportAsCollection (name) { - var data = { }; - var input = _.get(config, 'collections.' + name + '.input'); - - if (_.isArray(input)) { - //console.info('>>>input is an array', input); - data[name] = _.flatten(_.map(input, loadData)); - } else { - data[name] = loadData(input); - } - - var mock = new MongoMock(data); - - var collection = mock.collection(name); - - var wrapper = { - findQuery: null - , sortQuery: null - , limitCount: null - , find: function find (query) { - query = _.cloneDeepWith(query, function booleanize (value) { - //TODO: for some reason we're getting {$exists: NaN} instead of true/false - if (value && _.isObject(value) && '$exists' in value) { - return {$exists: true}; - } - }); - wrapper.findQuery = query; - return wrapper; - } - , limit: function limit (count) { - wrapper.limitCount = count; - return wrapper; - } - , sort: function sort (query) { - wrapper.sortQuery = query; - return wrapper; - } - , toArray: function toArray(callback) { - collection.find(wrapper.findQuery).toArray(function intercept (err, results) { - if (err) { - return callback(err, results); - } - - if (wrapper.sortQuery) { - var field = _.keys(wrapper.sortQuery).pop(); - //console.info('>>>sortField', field); - if (field) { - results = _.sortBy(results, field); - if (-1 === wrapper.sortQuery[field]) { - //console.info('>>>sort reverse'); - results = _.reverse(results); - } - } - } - - if (wrapper.limitCount !== null && _.isNumber(wrapper.limitCount)) { - //console.info('>>>limit count', wrapper.limitCount); - results = _.take(results, wrapper.limitCount); - } - - //console.info('>>>toArray', name, wrapper.findQuery, wrapper.sortQuery, wrapper.limitCount, results.length); - - callback(null, results); - }); - return wrapper; - } - }; - - return wrapper; - - } - - try { - var customConfig = require(configPath); - - config = _.merge({}, customConfig, config); - - callback(null, { - collection: reportAsCollection - , ensureIndexes: _.noop - }); - } catch (err) { - callback(err); - } -} - -/** - * Removes a module from the cache - * - * see http://stackoverflow.com/a/14801711 - */ -function purgeCache(moduleName) { - // Traverse the cache looking for the files - // loaded by the specified module name - searchCache(moduleName, function (mod) { - delete require.cache[mod.id]; - }); - - // Remove cached paths to the module. - // Thanks to @bentael for pointing this out. - Object.keys(module.constructor._pathCache).forEach(function(cacheKey) { - if (cacheKey.indexOf(moduleName)>0) { - delete module.constructor._pathCache[cacheKey]; - } - }); -} - -/** - * Traverses the cache to search for all the cached - * files of the specified module name - * - * see http://stackoverflow.com/a/14801711 - */ -function searchCache(moduleName, callback) { - // Resolve the module identified by the specified name - var mod = require.resolve(moduleName); - - // Check if the module has been resolved and found within - // the cache - if (mod && ((mod = require.cache[mod]) !== undefined)) { - // Recursively go over the results - (function traverse(mod) { - // Go over each of the module's children and - // traverse them - mod.children.forEach(function (child) { - traverse(child); - }); - - // Call the specified callback providing the - // found cached module - callback(mod); - }(mod)); - } -} - -module.exports = init; diff --git a/lib/utils.js b/lib/utils.js index 7d6d434472e..8cd32bba529 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,12 +1,11 @@ 'use strict'; var _ = require('lodash'); -var moment = require('moment-timezone'); var units = require('./units')(); function init(ctx) { - + var moment = ctx.moment; var settings = ctx.settings; var translate = ctx.language.translate; var timeago = require('./plugins/timeago')(ctx); diff --git a/package-lock.json b/package-lock.json index d3332cc1174..53146c954f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,665 +1,474 @@ { "name": "nightscout", - "version": "14.2.6", + "version": "15.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==" + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" }, "@babel/core": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", - "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.4", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", - "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } } } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "requires": { - "@babel/types": "^7.12.10" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.18.6" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - } - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - } - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", + "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "regexpu-core": "^4.7.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" } }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.18.6" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "requires": { - "@babel/types": "^7.10.4" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.20.7" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.20.2" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.20.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" } }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", - "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==" + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", + "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", + "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", + "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", + "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-async-generators": { @@ -671,11 +480,19 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -694,6 +511,14 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -750,1405 +575,391 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", + "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", + "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - } - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - } - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - } - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - } - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - } - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - } - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - } - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - } - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - } - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - } - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - } - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - }, - "dependencies": { - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - } - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - } - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - } - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", - "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", - "requires": { - "@babel/types": "^7.12.10" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", - "requires": { - "@babel/types": "^7.12.11" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" - }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", + "requires": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "requires": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2158,312 +969,428 @@ } }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, "@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" }, "@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@parse/node-apn": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@parse/node-apn/-/node-apn-5.1.3.tgz", + "integrity": "sha512-Bwhmbm895lEIF2772PJ8dSvBjrtOG9/q/TDMxmX40IgZxQFoXS73+JUIKTq3CA7SUB/Szu5roJINQ0L2U/1MJw==", + "requires": { + "debug": "4.3.3", + "jsonwebtoken": "8.5.1", + "node-forge": "1.3.0", + "verror": "1.10.1" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { - "type-fest": "^0.8.1" + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "@polka/url": { - "version": "1.0.0-next.11", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.11.tgz", - "integrity": "sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==", + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true + "@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "requires": { + "@types/node": "*" + } }, "@types/eslint": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", - "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==" + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "@types/node": { - "version": "14.14.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", - "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==" + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, + "@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz", - "integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==" }, "@webpack-cli/info": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz", - "integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz", - "integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==" }, "@xtuc/ieee754": { "version": "1.2.0", @@ -2478,27 +1405,27 @@ "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" + "integrity": "sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==" }, "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", - "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==" + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, "acorn-globals": { "version": "4.3.4", @@ -2516,25 +1443,33 @@ } } }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "acorn-walk": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } }, "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2552,124 +1487,39 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "apn": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apn/-/apn-2.2.0.tgz", - "integrity": "sha512-YIypYzPVJA9wzNBLKZ/mq2l1IZX/2FadPvwmSv4ZeR0VH7xdNITQ6Pucgh0Uw6ZZKC+XwheaJ57DFZAhJ0FvPg==", - "requires": { - "debug": "^3.1.0", - "http2": "https://github.com/node-apn/node-http2/archive/apn-2.1.4.tar.gz", - "jsonwebtoken": "^8.1.0", - "node-forge": "^0.7.1", - "verror": "^1.10.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "append-transform": { @@ -2684,7 +1534,7 @@ "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "argparse": { @@ -2696,56 +1546,15 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==" }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "array.prototype.map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", - "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.4" - } - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "arrify": { "version": "2.0.1", @@ -2754,9 +1563,9 @@ "dev": true }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "requires": { "safer-buffer": "~2.1.0" } @@ -2773,22 +1582,16 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "astral-regex": { "version": "2.0.0", @@ -2799,13 +1602,7 @@ "async": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" }, "async-limiter": { "version": "1.0.1", @@ -2815,31 +1612,33 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" + } + }, + "axios-cookiejar-support": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", + "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", + "requires": { + "http-cookie-agent": "^5.0.4" } }, "babel-eslint": { @@ -2854,115 +1653,50 @@ "@babel/types": "^7.7.0", "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" - }, - "dependencies": { - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", "schema-utils": "^2.6.5" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { - "object.assign": "^4.1.0" + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -2974,15 +1708,10 @@ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "requires": { "tweetnacl": "^0.14.3" } @@ -2990,7 +1719,7 @@ "benv": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/benv/-/benv-3.3.0.tgz", - "integrity": "sha1-c3XsAalaAAM+uYCESINmKFKCJDU=", + "integrity": "sha512-5eq2WZ+tZsLLP+Zt7Z1jLaQxGfSsU5tTPKl5knv7uuDSJBhy//H8TIDLPynFLyUBoDqDXptVF8ODKIpA0TzziA==", "dev": true, "requires": { "jsdom": ">= 10.0", @@ -3003,117 +1732,64 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "bootevent": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/bootevent/-/bootevent-0.0.1.tgz", - "integrity": "sha1-yNkAtymk0S+yU2wW+hfwYvzPxqg=", + "integrity": "sha512-kKeAwPdpIAguDxuSjOCsUI/o5WWYYX0JrWBSk7SYRm6yGY4xtsTier0x9lfVpJy2Y1gGDg4xKcMWSY2l03BY/Q==", "requires": { "chainsaw": "~0.1.0" } }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "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, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "braces": { @@ -3127,7 +1803,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-process-hrtime": { "version": "1.0.0", @@ -3197,46 +1873,23 @@ "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "browserslist": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", - "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "requires": { - "caniuse-lite": "^1.0.30001173", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.634", - "escalade": "^3.1.1", - "node-releases": "^1.1.69" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==" }, "buffer": { "version": "6.0.3", @@ -3253,44 +1906,19 @@ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - } - } + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "caching-transform": { "version": "3.0.2", @@ -3302,6 +1930,33 @@ "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, "callsites": { @@ -3311,31 +1966,25 @@ "dev": true }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "caniuse-lite": { - "version": "1.0.30001179", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001179.tgz", - "integrity": "sha512-blMmO0QQujuUWZKyVrD1msR4WNDAqb/UPO1Sw2WWsQ7deoM5bJiicKnWJ1Y0NS/aGINSnKPIWBMw5luX+NDUCA==" - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true + "version": "1.0.30001448", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001448.tgz", + "integrity": "sha512-tq2YI+MJnooG96XpbTRYkBxLxklZPOdLmNIOdIhvf7SNJan6u5vCKum8iT7ZfCt70m1GPkuC7P3TtX6UuhupuA==" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", "requires": { "traverse": ">=0.3.0 <0.4" }, @@ -3343,7 +1992,7 @@ "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" } } }, @@ -3355,57 +2004,28 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "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, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", + "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.5.0" } }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "cipher-base": { "version": "1.0.4", @@ -3416,82 +2036,29 @@ "safe-buffer": "^5.0.1" } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "requires": { "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" }, "clone-deep": { "version": "4.0.1", @@ -3503,33 +2070,6 @@ "shallow-clone": "^3.0.0" } }, - "codacy-coverage": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", - "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.x", - "commander": "^2.x", - "jacoco-parse": "^2.x", - "joi": "^13.x", - "lcov-parse": "^1.x", - "lodash": "^4.17.4", - "log-driver": "^1.x", - "request": "^2.88.0", - "request-promise": "^4.x" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -3541,18 +2081,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -3562,20 +2101,16 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "compressible": { "version": "2.0.18", @@ -3602,46 +2137,32 @@ "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "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 - }, - "configstore": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", - "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", - "dev": true, - "requires": { - "dot-prop": "^4.2.1", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "content-disposition": { "version": "0.5.3", @@ -3649,6 +2170,13 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "content-type": { @@ -3656,6 +2184,11 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -3664,40 +2197,35 @@ "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, "core-js-compat": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.3.tgz", - "integrity": "sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog==", + "version": "3.27.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", + "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", "requires": { - "browserslist": "^4.16.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } + "browserslist": "^4.21.4" } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } }, "cp-file": { "version": "6.2.0", @@ -3710,6 +2238,24 @@ "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "create-ecdh": { @@ -3722,21 +2268,12 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -3766,50 +2303,12 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -3828,62 +2327,23 @@ "randomfill": "^1.0.3" } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, "css-loader": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.1.tgz", - "integrity": "sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", "requires": { - "camelcase": "^6.2.0", - "cssesc": "^3.0.0", - "icss-utils": "^5.0.0", + "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.1.4", + "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", "schema-utils": "^3.0.0", - "semver": "^7.3.2" + "semver": "^7.3.5" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3893,19 +2353,19 @@ } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } @@ -3925,7 +2385,7 @@ "cssmin": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.4.3.tgz", - "integrity": "sha1-yRlAd+Dr2s1pHV9ZAVudgZ840BU=" + "integrity": "sha512-A0hOtBUV5dPB/gRKsLZsqoyeFHuKIWCXdumFdsK/0nlhwK1NRZHwtm0svdTA4uEpixZD+o0xs7MirNsG2X1JBg==" }, "cssom": { "version": "0.3.8", @@ -3941,15 +2401,15 @@ } }, "csv-parse": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.12.0.tgz", - "integrity": "sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg==", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", "dev": true }, "csv-stringify": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.1.tgz", - "integrity": "sha512-HM0/86Ks8OwFbaYLd495tqTs1NhscZL52dC4ieKYumy8+nawQYC0xZ63w1NqLf0M148T2YLYqowoImc1giPn0g==" + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" }, "d3": { "version": "5.16.0", @@ -4218,7 +2678,7 @@ "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "requires": { "assert-plus": "^1.0.0" } @@ -4234,9 +2694,9 @@ }, "dependencies": { "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "whatwg-url": { "version": "7.1.0", @@ -4251,109 +2711,42 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "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=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "integrity": "sha512-B0n2zDIXpzLzKeoEozorDSa1cHc1t0NjmxP0zuAxbizNU2MBqYJJKYXrrFdKuQliojXynrxgd7l4ahfg/+aA5g==", "dev": true, "requires": { "strip-bom": "^3.0.0" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "denque": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", - "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "des.js": { "version": "1.0.1", @@ -4365,14 +2758,14 @@ } }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "diffie-hellman": { @@ -4386,9 +2779,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -4410,35 +2803,19 @@ } }, "dompurify": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.6.tgz", - "integrity": "sha512-7b7ZArhhH0SP6W2R9cqK6RjaU82FZ2UPM7RO8qN1b1wyvC/NY1FNWcX1Pu00fFOAnzEORtwXe4bPaClg6pUybQ==" - }, - "dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "easyxml": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/easyxml/-/easyxml-2.0.1.tgz", - "integrity": "sha1-7qCShCyREwCox4GRPL5b04pQcRw=", + "integrity": "sha512-qmQ+zRf6ASThHgW/ZTPa19u9TMJLumuyQP25LEKwqx6NAOtTbmdJDVHFAyBxkqnimgB2sGOV4zIG3hapPL2Nxw==", "requires": { "elementtree": "^0.1.6", "inflect": "^0.3.0" @@ -4447,7 +2824,7 @@ "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -4464,22 +2841,25 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "requires": { + "jake": "^10.8.5" + } }, "electron-to-chromium": { - "version": "1.3.645", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.645.tgz", - "integrity": "sha512-T7mYop3aDpRHIQaUYcmzmh6j9MAe560n6ukqjJMbVC6bVTau7dSpvB18bcsBPPtOSe10cKxhJFtlbEzLa0LL1g==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "elementtree": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", - "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", "requires": { "sax": "1.1.4" } @@ -4499,22 +2879,16 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, "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 + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -4524,111 +2898,75 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" }, "dependencies": { "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" } } - }, - "engine.io-client": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", - "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, + }, + "engine.io-client": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", + "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0" + }, + "dependencies": { "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" } } }, "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", + "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" }, "enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - } } }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -4648,54 +2986,13 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, "envinfo": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", - "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==" + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" }, "error-ex": { "version": "1.3.2", @@ -4715,61 +3012,10 @@ "escape-html": "~1.0.3" } }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", - "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", - "dev": true, - "requires": { - "es-abstract": "^1.17.4", - "has-symbols": "^1.0.1", - "is-arguments": "^1.0.4", - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, "es-module-lexer": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", - "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==" - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es6-error": { "version": "4.1.1", @@ -4777,11 +3023,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "es6-promisify": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4790,12 +3031,12 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { "version": "1.14.3", @@ -4810,29 +3051,32 @@ } }, "eslint": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", - "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.3.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", - "esquery": "^1.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -4840,7 +3084,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -4849,16 +3093,19 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } }, "ansi-styles": { "version": "4.3.0", @@ -4870,9 +3117,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -4894,30 +3141,33 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, + "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 + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4937,12 +3187,6 @@ "yallist": "^4.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -4964,21 +3208,21 @@ "dev": true }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "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": { - "ansi-regex": "^5.0.0" + "has-flag": "^4.0.0" } }, "type-check": { @@ -4999,12 +3243,12 @@ } }, "eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.0.tgz", + "integrity": "sha512-+ahcCh7M5w7fdFaNccaChBGq8nd3Wa+XvGJS+hY74kvrMhG4EuLbljRIjilOqh1iDMW/EckB1oOWmiVIYlVACQ==", "dev": true, "requires": { - "safe-regex": "^1.1.0" + "safe-regex": "^2.1.1" } }, "eslint-scope": { @@ -5014,23 +3258,6 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" - }, - "dependencies": { - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - } } }, "eslint-utils": { @@ -5049,53 +3276,36 @@ "dev": true }, "eslint-webpack-plugin": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.4.3.tgz", - "integrity": "sha512-+15ifHFkGn0gB7lQBe+xgyKcjelxv9xlTutGHEPYBUUj+1Rjrjq3+1REJLJpyAHgpQTatpqkRY1z8gQuyn3Aww==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz", + "integrity": "sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==", "dev": true, "requires": { - "@types/eslint": "^7.2.4", + "@types/eslint": "^7.29.0", "arrify": "^2.0.1", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "schema-utils": "^3.0.0" + "jest-worker": "^27.5.1", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "@types/estree": "*", + "@types/json-schema": "*" } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -5127,22 +3337,37 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -5156,12 +3381,12 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "requires": { "duplexer": "~0.1.1", "from": "~0", @@ -5170,19 +3395,12 @@ "split": "0.3", "stream-combiner": "~0.0.4", "through": "~2.3.1" - }, - "dependencies": { - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - } } }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "evp_bytestokey": { "version": "1.0.3", @@ -5193,69 +3411,6 @@ "safe-buffer": "^5.1.1" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "expose-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-2.0.0.tgz", @@ -5266,151 +3421,160 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "express-minify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/express-minify/-/express-minify-1.0.0.tgz", - "integrity": "sha512-04/iYxB79jGeNZBBkbAW7L7FMG4Wtu78F1SayXIKiJD6MfqYnOI3DD8no7QOntgedYCdYUpj+Skg8QWR/2WnMQ==", - "requires": { - "clean-css": "^4.1.7", - "on-headers": "^1.0.1", - "uglify-js": "^3.0.28" - }, - "dependencies": { - "uglify-js": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.2.tgz", - "integrity": "sha512-GXCYNwqoo0MbLARghYjxVBxDCnU0tLqN7IPLdHHbibCb1NI5zBkU2EPcy/GaVxc0BtTjqyGXJCINe6JMR2Dpow==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "is-descriptor": "^1.0.0" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "is-extendable": "^0.1.0" + "ms": "2.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "kind-of": "^6.0.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "requires": { - "kind-of": "^6.0.0" + "ee-first": "1.1.1" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" } } }, + "express-minify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/express-minify/-/express-minify-1.0.0.tgz", + "integrity": "sha512-04/iYxB79jGeNZBBkbAW7L7FMG4Wtu78F1SayXIKiJD6MfqYnOI3DD8no7QOntgedYCdYUpj+Skg8QWR/2WnMQ==", + "requires": { + "clean-css": "^4.1.7", + "on-headers": "^1.0.1", + "uglify-js": "^3.0.28" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extsprintf": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", - "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" }, "fast-deep-equal": { "version": "3.1.3", @@ -5425,7 +3589,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fast-password-entropy": { "version": "1.1.1", @@ -5433,14 +3597,14 @@ "integrity": "sha512-dxm29/BPFrNgyEDygg/lf9c2xQR0vnQhG7+hZjAI39M/3um9fD4xiqG6F0ZjW6bya5m9CI0u6YryHGRtxCGCiw==" }, "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" }, "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -5455,44 +3619,36 @@ "schema-utils": "^3.0.0" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5513,49 +3669,60 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + } } }, "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "requires": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - } + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flat-cache": { "version": "3.0.4", @@ -5565,23 +3732,12 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "flot": { @@ -5590,21 +3746,14 @@ "integrity": "sha512-xg2otcTJDvS+ERK+my4wxG/ASq90QURXtoM4LhacCq0jQW2jbyjdttbRNqU2cPykrpMvJ6b2uSp6SAgYAzj9tQ==" }, "follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "integrity": "sha512-3TOY+4TKV0Ml83PXJQY+JFQaHNV38lzQDIzzXYg1kWdBLenGgoZhAs0CKgzI31vi2pWEpQMq/Yi4bpKwCPkw7g==", "dev": true, "requires": { "cross-spawn": "^4", @@ -5614,25 +3763,49 @@ "cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true } } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -5640,9 +3813,9 @@ } }, "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", "dev": true }, "forwarded": { @@ -5655,41 +3828,32 @@ "resolved": "https://registry.npmjs.org/forwarded-for/-/forwarded-for-1.1.0.tgz", "integrity": "sha512-1Yam9ht7GyMXMBvuwJfUYqpdtLVodtT5ee5JMBzGiSwVVeh37ZN8LuOWkNHd6ho2zUxpSZCHuQrt1Vjl2AxDNA==" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" }, "fs-monkey": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", - "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "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 }, @@ -5701,58 +3865,55 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "requires": { "assert-plus": "^1.0.0" } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "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" @@ -5763,43 +3924,15 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "growl": { "version": "1.10.5", @@ -5819,7 +3952,7 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" }, "har-validator": { "version": "5.1.5", @@ -5835,91 +3968,19 @@ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "^1.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "function-bind": "^1.1.1" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -5928,28 +3989,6 @@ "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "hash.js": { @@ -5964,43 +4003,37 @@ "hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "integrity": "sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w==", "dev": true, "requires": { "is-stream": "^1.0.1" } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "helmet": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.1.0.tgz", - "integrity": "sha512-KWy75fYN8hOG2Rhl8e5B3WhOzb0by1boQum85TiddIE9iu6gV+TXbUjVC17wfej0o/ZUpqB9kxM0NFCZRMzf+Q==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", + "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==" }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "dev": true - }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "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 }, "html-encoding-sniffer": { @@ -6012,9 +4045,9 @@ } }, "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", "dev": true }, "html-escaper": { @@ -6023,37 +4056,36 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cookie-agent": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", + "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", + "requires": { + "agent-base": "^7.1.0" + } + }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, - "http2": { - "version": "https://github.com/node-apn/node-http2/archive/apn-2.1.4.tar.gz", - "integrity": "sha512-ad4u4I88X9AcUgxCRW3RLnbh7xHWQ1f5HbrXa7gEy2x4Xgq+rq+auGx5I+nUDE2YYuqteGIlbxrwQXkIaYTfnQ==" - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -6081,7 +4113,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=", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, "import-fresh": { @@ -6102,86 +4134,30 @@ } } }, - "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 - }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - } } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, "inflect": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/inflect/-/inflect-0.3.0.tgz", - "integrity": "sha1-gdDqqja1CmAjC3UQBIs5xBQv5So=" + "integrity": "sha512-ziAYvtAaDgJYlpdAKr9vsSzBmPTUYPFRj/8L7n9SfaDIXzf+/F07T3bIXQUaYqls+I/aE2DBKBrxcQ7BKZ6iCA==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -6189,56 +4165,29 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-binary-path": { @@ -6250,152 +4199,43 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "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==" }, "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==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", - "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-plain-object": { @@ -6406,102 +4246,37 @@ "isobject": "^3.0.1" } }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, - "is-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", - "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - }, - "dependencies": { - "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 - } - } - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "istanbul-lib-coverage": { "version": "2.0.5", @@ -6544,10 +4319,20 @@ "supports-color": "^6.1.0" }, "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "supports-color": { @@ -6574,25 +4359,29 @@ "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "ms": "^2.1.1" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -6604,143 +4393,108 @@ "dev": true, "requires": { "html-escaper": "^2.0.0" - } - }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, - "jacoco-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", - "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", - "dev": true, - "requires": { - "mocha": "^5.2.0", - "xml2js": "^0.4.9" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "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": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "color-convert": "^2.0.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "minimist": "0.0.8" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "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": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, + "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": "^3.0.0" + "has-flag": "^4.0.0" } } } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "dev": true, - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", + "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==" }, "jquery-ui-bundle": { "version": "1.12.1-migrate", "resolved": "https://registry.npmjs.org/jquery-ui-bundle/-/jquery-ui-bundle-1.12.1-migrate.tgz", - "integrity": "sha1-uTQ+LDEHQ1J2Ms/4vtsMXpYAsUw=" + "integrity": "sha512-ihyHzL6NYkCg1SNIRFrQAkgEeAJmet2G6rrecCRwq6RcWNApV6w2NSjqfuJUUoiKywkvlU+pqHJ5NAAEuTet4w==" }, "jquery.tooltips": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jquery.tooltips/-/jquery.tooltips-1.0.0.tgz", - "integrity": "sha1-/Ko2Il0IXQ/NY71E4rAGtUGDHHI=" + "integrity": "sha512-QQQcWPuk6jKogEIcsewhJmZJ8KN8BbB1vBFUIl+k+j85BMMr+nYPa86ihTFHfne9H8yI9F7okoQRzwkJsk3chg==" }, "js-storage": { "version": "1.1.0", @@ -6753,27 +4507,19 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "jsdom": { "version": "11.11.0", @@ -6828,12 +4574,18 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { "version": "0.4.1", @@ -6843,28 +4595,18 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonwebtoken": { "version": "9.0.0", @@ -6877,11 +4619,6 @@ "semver": "^7.3.8" }, "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6890,11 +4627,6 @@ "yallist": "^4.0.0" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -6902,24 +4634,39 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" }, "dependencies": { "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } } } }, @@ -6947,21 +4694,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", @@ -6970,7 +4702,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -6979,7 +4711,7 @@ "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -6991,64 +4723,53 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } }, "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } + "json5": "^2.1.2" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "lodash.includes": { @@ -7081,6 +4802,12 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -7089,12 +4816,12 @@ "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "log-symbols": { @@ -7107,19 +4834,18 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -7158,44 +4884,20 @@ } } }, - "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 - }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } + "yallist": "^3.0.2" } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "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": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "semver": "^6.0.0" } }, "map-age-cleaner": { @@ -7207,35 +4909,10 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" }, "md5.js": { "version": "1.3.5", @@ -7250,39 +4927,31 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "mem": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.0.0.tgz", - "integrity": "sha512-qrcJOe6uD+EW8Wrci1Vdiua/15Xw3n/QnaNXE7varnB6InxSk7nu3/i5jfy3S6kWxr8WYJ6R1o0afMUtvorTsA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "requires": { "map-age-cleaner": "^0.1.3", "mimic-fn": "^3.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } } }, "memfs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", - "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", + "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", "dev": true, "requires": { - "fs-monkey": "1.0.1" + "fs-monkey": "^1.0.3" } }, "memory-cache": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha1-eJCwHVLADI68nVM+H46xfjA0hxo=" + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==" }, "memory-pager": { "version": "1.5.0", @@ -7293,138 +4962,35 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "miller-rabin": { @@ -7437,34 +5003,35 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.52.0" } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true }, "minimalistic-assert": { "version": "1.0.1", @@ -7474,21 +5041,31 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + } } }, "minimed-connect-to-nightscout": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/minimed-connect-to-nightscout/-/minimed-connect-to-nightscout-1.5.3.tgz", - "integrity": "sha512-Cl1rJAJ96+PUAUz5aqNztye0/p7syEFXyg0jx3zXObo1Rjl2R75nVQdDSWMwJUkuirAGoZIk8jHG1yLQp3vJKA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/minimed-connect-to-nightscout/-/minimed-connect-to-nightscout-1.5.5.tgz", + "integrity": "sha512-2o/L8Nlc8Hki9H2yBRM8t/q0hFqxvmroZzrHUqwgIqZoZ2YOVBa2iPMIsYnLc/Tu/V8Et6o+BV4QurOLTzzbqw==", "requires": { "axios": "^0.26.0", "axios-cookiejar-support": "^1.0.0", @@ -8470,94 +6047,90 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } + "minimist": "^1.2.6" } }, "mocha": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.2.tgz", - "integrity": "sha512-I8FRAcuACNMLQn3lS4qeWLxXqLvGf6r2CaLstDpZmMUUSmvW6Cnm1AuHxgbc7ctZVRcfwspCRbDHymPsi3dkJw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { + "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.4.2", - "debug": "4.1.1", - "diff": "4.0.2", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.14.0", + "js-yaml": "4.0.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "object.assign": "4.1.0", - "promise.allsettled": "1.0.2", - "serialize-javascript": "4.0.0", - "strip-json-comments": "3.0.1", - "supports-color": "7.1.0", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.0.0", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.1" + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "debug": { + "ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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": { - "ms": "^2.1.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } }, "escape-string-regexp": { "version": "4.0.0", @@ -8565,12 +6138,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -8581,26 +6148,33 @@ "path-exists": "^4.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-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 }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "locate-path": { @@ -8612,19 +6186,34 @@ "p-locate": "^5.0.0" } }, + "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" + } + }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { @@ -8636,42 +6225,30 @@ "p-limit": "^3.0.2" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "randombytes": "^2.1.0" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "isexe": "^2.0.0" + "has-flag": "^4.0.0" } } } }, "moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "moment-locales-webpack-plugin": { "version": "1.2.0", @@ -8682,150 +6259,113 @@ } }, "moment-timezone": { - "version": "0.5.31", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", - "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", "requires": { "moment": ">= 2.9.0" } }, "moment-timezone-data-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/moment-timezone-data-webpack-plugin/-/moment-timezone-data-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-0V0xnHZpdHLsSerIQ2yNEPBC3uJWfU/zNT3nB0PO+tjmGHuNeUWqNDiw7ZpLo54uER6/OAE75EJ7ThmlwkGuZw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/moment-timezone-data-webpack-plugin/-/moment-timezone-data-webpack-plugin-1.5.1.tgz", + "integrity": "sha512-1le6a35GgYdWMVYFzrfpE/F6Pk4bj0M3QKD6Iv6ba9LqWGoVqHQRHyCTLvLis5E1J98Sz40ET6yhZzMVakwpjg==", "requires": { "find-cache-dir": "^3.0.0", "make-dir": "^3.0.0" + } + }, + "mongo-url-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongo-url-parser/-/mongo-url-parser-1.0.2.tgz", + "integrity": "sha512-mv0RXncyzNt+gtnKOjD3YJK4I6+r9jk3aU5psa8/E8zvpN03AsQ0DkLJPBs5vPAzCfMs4T8gA2UQgaFx3QANHw==" + }, + "mongodb": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.5.0.tgz", + "integrity": "sha512-XgrkUgAAdfnZKQfk5AsYL8j7O99WHd4YXPxYxnh8dZxD+ekYWFRA3JktUsBnfg+455Smf75/+asoU/YLwNGoQQ==", + "requires": { + "bson": "^5.3.0", + "mongodb-connection-string-url": "^2.6.0", + "saslprep": "^1.0.3", + "socks": "^2.7.1" + } + }, + "mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" }, "dependencies": { - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "requires": { - "p-limit": "^2.2.0" + "punycode": "^2.1.1" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "requires": { - "find-up": "^4.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" } } } }, - "mongo-url-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mongo-url-parser/-/mongo-url-parser-1.0.1.tgz", - "integrity": "sha512-jKygfGx7xf97yqp7Kwx0/fEOmMAbuhNGAhedD490BtN+UKSutkv7RBKk5p8o8W+hkA1AeOYdtLr+OjkXSLkh7g==" - }, - "mongodb": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.0.tgz", - "integrity": "sha512-/XWWub1mHZVoqEsUppE0GV7u9kanLvHxho6EvBxQbShXTKYF9trhZC2NzbulRGeG7xMJHD8IOWRcdKx5LPjAjQ==", + "mongodb-legacy": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mongodb-legacy/-/mongodb-legacy-5.0.0.tgz", + "integrity": "sha512-q2G+MRwde6114bCAF/EZLmMXSsebIKMHmzsfOJq6M/Tj4gr3wLT50+rJsJNkiR0e0kjFx3dllWjqwRR1n11Zsw==", "requires": { - "bl": "^2.2.0", - "bson": "^1.1.4", - "denque": "^1.4.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" + "mongodb": "^5.0.0" } }, "mongomock": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/mongomock/-/mongomock-0.1.2.tgz", - "integrity": "sha1-M4aFA9yqVJ4AaGcVz2qk+R+3Dnk=", + "integrity": "sha512-QI2HtcbiE43qfMGzFAwXEhM8Toddp0QLxhDofPpj1kq0GbebgNuLqWEhSPAprlr9L5Ci9jrwVDJ4qRe5fkg8nQ==", "requires": { "bson": "*" } }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -8833,11 +6373,94 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true }, + "nightscout-connect": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/nightscout-connect/-/nightscout-connect-0.0.12.tgz", + "integrity": "sha512-y4Dc+shzkmGQqJG2w2zNp1Jnu4Yzc4VtSCoBiinrssjy+7ksjmOenxVDyh0Xw2UCWMkqr4A4o+iJ28KvrHWcvw==", + "requires": { + "axios": "^1.3.4", + "axios-cookiejar-support": "^4.0.6", + "qs": "^6.11.1", + "tough-cookie": "^4.1.3", + "xstate": "^4.37.1", + "yargs": "^17.7.1" + }, + "dependencies": { + "axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, "node-cache": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", @@ -8848,204 +6471,65 @@ } }, "node-forge": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", - "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", + "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==" }, "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==" + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" }, "nodemon": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz", - "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", "dev": true, "requires": { - "chokidar": "^2.1.8", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" + "undefsafe": "^2.0.5" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "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" } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, "semver": { @@ -9053,28 +6537,18 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } } } }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -9087,15 +6561,6 @@ "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -9110,19 +6575,10 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, "nyc": { "version": "14.1.1", @@ -9157,13 +6613,109 @@ "yargs-parser": "^13.0.0" }, "dependencies": { - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "find-up": "^3.0.0" } }, "resolve-from": { @@ -9171,89 +6723,114 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -9266,20 +6843,12 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, "opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -9302,24 +6871,13 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", "dev": true }, "p-limit": { @@ -9331,11 +6889,11 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -9355,26 +6913,6 @@ "release-zalgo": "^1.0.0" } }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9404,7 +6942,7 @@ "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -9416,65 +6954,36 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "path-type": { "version": "3.0.0", @@ -9488,7 +6997,7 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } @@ -9496,15 +7005,15 @@ "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "requires": { "through": "~2.3" } }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -9513,49 +7022,34 @@ "sha.js": "^2.4.8" } }, - "pem": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.4.tgz", - "integrity": "sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g==", - "requires": { - "es6-promisify": "^6.0.0", - "md5": "^2.2.1", - "os-tmpdir": "^1.0.1", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" } }, "pn": { @@ -9563,20 +7057,14 @@ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "postcss": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", - "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "requires": { - "colorette": "^1.2.1", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, "postcss-modules-extract-imports": { @@ -9611,41 +7099,34 @@ } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -9653,19 +7134,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise.allsettled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", - "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.1", - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "iterate-value": "^1.0.0" - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -9675,16 +7143,21 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pstree.remy": { "version": "1.1.8", @@ -9706,32 +7179,39 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, "pushover-notifications": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/pushover-notifications/-/pushover-notifications-1.2.2.tgz", "integrity": "sha512-+3Xcj+kiMiouZK1Ws8yGBTyl8WMPZZdELgl/iVxYqNwDdlaObBHMhEGPRC6Zb9t0BE27ikOoOqSIO1cKZOtsDA==" }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "random-token": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/random-token/-/random-token-0.0.8.tgz", - "integrity": "sha1-HPhFrz+zHlf3yqS5oXNHjEZIO2E=" + "integrity": "sha512-L8osVTR9ZWUNs24m+/S0ibg5aveCme6+nEDmbzqdEog0skWDsTFXs8Y06Zt9y1a9jzZ70gomX9BaMqntYlN+IQ==" }, "randombytes": { "version": "2.1.0", @@ -9756,46 +7236,20 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, - "rc": { - "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", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -9811,42 +7265,67 @@ "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true } } }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "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, "requires": { "picomatch": "^2.2.1" } }, "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "requires": { "resolve": "^1.9.0" } @@ -9857,83 +7336,60 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "requires": { "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } + "regexp-tree": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", + "dev": true }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", "requires": { - "rc": "^1.0.1" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", - "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -9941,37 +7397,19 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "requires": { "es6-error": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -9999,53 +7437,18 @@ "uuid": "^3.3.2" }, "dependencies": { - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, - "request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "request-promise-core": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", @@ -10067,8 +7470,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", @@ -10082,29 +7484,19 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -10113,42 +7505,23 @@ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "requires": { "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } } }, "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "rewire": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/rewire/-/rewire-2.5.2.tgz", - "integrity": "sha1-ZCfee3/u+n02QBUH62SlOFvFjcc=", + "integrity": "sha512-9wOlgRHTOzUv5dQO2XD2qWob+7yi/QXh7SSwLJW5wMAkAdkYuaCtcPuLAXUTllK0MjSvtpxUqAWMuSrrdt9VNw==", "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -10166,20 +7539,20 @@ "rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "requires": { - "ret": "~0.1.10" + "regexp-tree": "~0.1.1" } }, "safer-buffer": { @@ -10199,16 +7572,16 @@ "sax": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", - "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==" }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "semver": { @@ -10216,23 +7589,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -10253,6 +7609,43 @@ "statuses": "~1.5.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -10262,14 +7655,36 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "requires": { + "ee-first": "1.1.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" } } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "requires": { "randombytes": "^2.1.0" } @@ -10288,36 +7703,13 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { "version": "2.4.11", @@ -11297,24 +8689,22 @@ } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shiro-trie": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/shiro-trie/-/shiro-trie-0.4.9.tgz", - "integrity": "sha512-iNdNhhYLb9BsTOp242Wmk359ZiRZqAcGbMsxP0GQns0K8HMeO5zhOTFdnQE7ewgFGEPnmZaXPVHNU6zyhG+kYQ==" + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/shiro-trie/-/shiro-trie-0.4.10.tgz", + "integrity": "sha512-W9uKR/lYlyBko88K5lcm8/zpmDLjS7HZsWB+cyhLLsqg+Wdr3sQIwVvDGtmZ/F63rkRjaQkHGTBDYGWQR50UQw==" }, "should": { "version": "13.2.3", @@ -11341,7 +8731,7 @@ "should-format": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", "dev": true, "requires": { "should-type": "^1.3.0", @@ -11351,7 +8741,7 @@ "should-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", "dev": true }, "should-type-adaptors": { @@ -11370,24 +8760,52 @@ "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "simple-statistics": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/simple-statistics/-/simple-statistics-0.7.0.tgz", - "integrity": "sha1-xQ8Tu9yX6aT9ICVjgtoX5o7asco=" + "integrity": "sha512-z3a2qaG5uau4gmphKiFgkbkuyLcQP3SFI7RuJv+kxMN9CpCg4QOzteR1fzRTflZwM5RJxeLfYevP3kvAS4dYJA==" + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } }, "sirv": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz", - "integrity": "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "dev": true, "requires": { - "@polka/url": "^1.0.0-next.9", - "mime": "^2.3.1", + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", "totalist": "^1.0.0" } }, @@ -11425,284 +8843,80 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz", + "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.1", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.2.1" } }, "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" }, "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", + "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.2.3", + "socket.io-parser": "~4.2.1" } }, "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", + "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -11724,6 +8938,26 @@ "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "spdx-correct": { @@ -11753,38 +8987,29 @@ } }, "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "requires": { "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -11797,36 +9022,15 @@ "tweetnacl": "~0.14.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" }, "stream-browserify": { "version": "3.0.0", @@ -11834,123 +9038,49 @@ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "requires": { "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "readable-stream": "^3.5.0" } }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "requires": { "duplexer": "~0.1.1" - }, - "dependencies": { - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - } } }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -11966,6 +9096,24 @@ "schema-utils": "^1.0.0" }, "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -11997,9 +9145,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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" @@ -12011,11 +9159,35 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -12030,24 +9202,29 @@ } }, "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==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "swagger-ui-dist": { - "version": "3.32.5", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.32.5.tgz", - "integrity": "sha512-3SKHv8UVqsKKknivtACHbFDGcn297jkoZN2h6zAZ7b2yoaJNMaRadQpC3qFw3GobZTGzqHCgHph4ZH9NkaCjrQ==" + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.15.5.tgz", + "integrity": "sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==" }, "swagger-ui-express": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.1.4.tgz", - "integrity": "sha512-Ea96ecpC+Iq9GUqkeD/LFR32xSs8gYqmTW1gXCuKg81c26WV6ZC2FsBSPVExQP6WkyUuz5HEiR0sEv/HCC343g==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.0.tgz", + "integrity": "sha512-ZxpQFp1JR2RF8Ar++CyJzEDdvufa08ujNUJgMVTMWPi86CuQeVdBtvaeO/ysrz6dJAYXf9kbVNhWD7JWocwqsA==", "requires": { - "swagger-ui-dist": "^3.18.1" + "swagger-ui-dist": ">=4.11.0" } }, "symbol-tree": { @@ -12056,21 +9233,22 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz", - "integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -12079,64 +9257,52 @@ "uri-js": "^4.2.2" } }, - "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 - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } } } }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, + "terser": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "requires": { - "execa": "^0.7.0" + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "test-exclude": { @@ -12154,61 +9320,18 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", @@ -12219,26 +9342,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "dev": true - } - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "totalist": { "version": "1.1.0", @@ -12253,17 +9359,6 @@ "dev": true, "requires": { "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - } } }, "tough-cookie": { @@ -12273,44 +9368,25 @@ "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } } }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } } }, "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "requires": { "safe-buffer": "^5.0.1" } @@ -12318,20 +9394,20 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "requires": { "prelude-ls": "~1.1.2" } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -12343,201 +9419,96 @@ "mime-types": "~2.1.24" } }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" + }, "undefsafe": { - "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" - } + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" } }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "requires": { - "prepend-http": "^1.0.1" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { @@ -12553,12 +9524,12 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -12574,9 +9545,9 @@ } }, "watchpack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.0.tgz", - "integrity": "sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -12588,151 +9559,58 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "5.20.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.20.2.tgz", - "integrity": "sha512-gGPip54KK7DznaaPHVuNGqym3LAXXL+bPkZ9SlLTCdHmmk+m5x+D4UZdhWvw32CMahYlZwZYPsioFIw36/txYQ==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", - "es-module-lexer": "^0.3.26", - "eslint-scope": "^5.1.1", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - }, - "acorn": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", - "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" - }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", - "requires": { - "mime-db": "1.45.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", - "requires": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.5.1" - } - }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } } } }, "webpack-bundle-analyzer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.0.tgz", - "integrity": "sha512-9DhNa+aXpqdHk8LkLPTBU/dMfl84Y+WE2+KnfI6rSpNRNVKa0VGLjPd2pjFubDeqnWmulFggxmWBxhfJXZnR0g==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", + "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", "dev": true, "requires": { "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", - "commander": "^6.2.0", + "commander": "^7.2.0", "gzip-size": "^6.0.0", "lodash": "^4.17.20", "opener": "^1.5.2", @@ -12740,16 +9618,10 @@ "ws": "^7.3.1" }, "dependencies": { - "acorn": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", - "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==", - "dev": true - }, "acorn-walk": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.0.2.tgz", - "integrity": "sha512-+bpA9MJsHdZ4bgfDcpk0ozQyhhVct7rzOmO0s1IIr0AGGgKBljss8n2zp11rRP2wid5VGeh04CgeKzgat5/25A==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "ansi-styles": { @@ -12762,9 +9634,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -12787,176 +9659,87 @@ "dev": true }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "supports-color": { + "version": "7.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" + } + }, "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true } } }, "webpack-cli": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz", - "integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.1", - "@webpack-cli/info": "^1.2.2", - "@webpack-cli/serve": "^1.3.0", - "colorette": "^1.2.1", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", "commander": "^7.0.0", - "enquirer": "^2.3.6", - "execa": "^5.0.0", + "cross-spawn": "^7.0.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { "commander": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz", - "integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==" - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, "webpack-dev-middleware": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", - "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, "requires": { - "colorette": "^1.2.1", - "mem": "^8.0.0", - "memfs": "^3.2.0", - "mime-types": "^2.1.28", + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", "range-parser": "^1.2.1", "schema-utils": "^3.0.0" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", - "dev": true, - "requires": { - "mime-db": "1.45.0" - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -12964,26 +9747,30 @@ } }, "webpack-hot-middleware": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", - "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", + "integrity": "sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==", "dev": true, "requires": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" } }, "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" } }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -13008,10 +9795,9 @@ } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } @@ -13019,7 +9805,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "wide-align": { @@ -13032,45 +9818,15 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true }, "string-width": { @@ -13086,7 +9842,7 @@ "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" @@ -13105,43 +9861,48 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workerpool": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", - "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.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==", - "dev": true + "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" + } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "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": { - "ansi-regex": "^4.1.0" + "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==" } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "write-file-atomic": { @@ -13162,14 +9923,15 @@ "requires": { "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -13192,102 +9954,63 @@ "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, + "xstate": { + "version": "4.38.2", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.38.2.tgz", + "integrity": "sha512-Fba/DwEPDLneHT3tbJ9F3zafbQXszOlyCJyQqqdzmtlY/cwE2th462KK48yaANf98jHlP6lJvxfNtN0LFKXPQg==" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", - "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "decamelize": "^1.2.0", - "flat": "^4.1.0", - "is-plain-obj": "^1.1.0", - "yargs": "^14.2.3" - }, - "dependencies": { - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - } - }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 1a5ba31e6c9..9c192b7de8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nightscout", - "version": "14.2.6", + "version": "15.0.0", "description": "Nightscout acts as a web-based CGM (Continuous Glucose Montinor) to allow multiple caregivers to remotely view a patients glucose data in realtime.", "license": "AGPL-3.0", "author": "Nightscout Team", @@ -31,11 +31,11 @@ "test-single": "env-cmd -f ./my.test.env mocha --timeout 5000 --require ./tests/hooks.js --exit ./tests/$TEST.test.js", "test-ci": "env-cmd -f ./tests/ci.test.env nyc --reporter=lcov --reporter=text-summary mocha --timeout 5000 --require ./tests/hooks.js --exit ./tests/*.test.js", "env": "env", - "postinstall": "webpack --mode production --config webpack/webpack.config.js && npm run-script generate-keys", - "bundle": "webpack --mode production --config webpack/webpack.config.js && npm run-script generate-keys", - "bundle-dev": "webpack --mode development --config webpack/webpack.config.js && npm run-script generate-keys", + "postinstall": "webpack --mode production --config webpack/webpack.config.js && npm run-script post-generate-keys", + "bundle": "webpack --mode production --config webpack/webpack.config.js && npm run-script post-generate-keys", + "bundle-dev": "webpack --mode development --config webpack/webpack.config.js && npm run-script post-generate-keys", "bundle-analyzer": "webpack --mode development --config webpack/webpack.config.js --profile --json > stats.json && webpack-bundle-analyzer stats.json", - "generate-keys": "node bin/generateRandomString.js >tmp/randomString", + "post-generate-keys": "node bin/generateRandomString.js >node_modules/.cache/_ns_cache/randomString", "coverage": "cat ./coverage/lcov.info | env-cmd -f ./tests/ci.test.env codacy-coverage || echo NO COVERAGE", "dev": "env-cmd -f ./my.env nodemon --inspect lib/server/server.js 0.0.0.0", "dev-test": "env-cmd -f ./my.devtest.env nodemon --inspect lib/server/server.js 0.0.0.0", @@ -65,17 +65,17 @@ } }, "engines": { - "node": "^16.x || ^14.x || ^12.x" + "node": "^16.x || ^14.x", + "npm": "^6.x" }, "dependencies": { - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.12.11", + "@babel/core": "^7.18.10", + "@babel/preset-env": "^7.18.10", + "@parse/node-apn": "^5.1.3", "acorn": "^8.0.5", "acorn-jsx": "^5.3.1", - "apn": "^2.2.0", "async": "^0.9.2", - "babel-loader": "^8.1.0", - "base64url": "^3.0.1", + "babel-loader": "^8.2.5", "body-parser": "^1.19.0", "bootevent": "0.0.1", "braces": "^3.0.2", @@ -88,11 +88,11 @@ "d3": "^5.16.0", "dompurify": "^2.2.6", "easyxml": "^2.0.1", - "ejs": "^2.7.4", + "ejs": "^3.1.8", "errorhandler": "^1.5.1", "event-stream": "3.3.4", "expose-loader": "^2.0.0", - "express": "^4.17.1", + "express": "4.17.1", "express-minify": "^1.0.0", "fast-password-entropy": "^1.1.1", "file-loader": "^6.2.0", @@ -103,22 +103,22 @@ "jquery-ui-bundle": "^1.12.1-migrate", "jquery.tooltips": "^1.0.0", "js-storage": "^1.1.0", - "jsdom": "^11.11.0", + "jsdom": "=11.11.0", "jsonwebtoken": "^9.0.0", "lodash": "^4.17.20", "memory-cache": "^0.2.0", "mime": "^2.4.6", - "minimed-connect-to-nightscout": "^1.5.3", + "minimed-connect-to-nightscout": "^1.5.5", "moment": "^2.27.0", "moment-locales-webpack-plugin": "^1.2.0", "moment-timezone": "^0.5.31", - "moment-timezone-data-webpack-plugin": "^1.3.0", - "mongo-url-parser": "^1.0.1", - "mongodb": "^3.6.0", + "moment-timezone-data-webpack-plugin": "^1.5.0", + "mongo-url-parser": "^1.0.2", + "mongodb-legacy": "^5.0.0", "mongomock": "^0.1.2", + "nightscout-connect": "^0.0.12", "node-cache": "^4.2.1", "parse-duration": "^0.1.3", - "pem": "^1.14.4", "process": "^0.11.10", "pushover-notifications": "^1.2.2", "random-token": "0.0.8", @@ -127,36 +127,35 @@ "share2nightscout-bridge": "^0.2.9", "shiro-trie": "^0.4.9", "simple-statistics": "^0.7.0", - "socket.io": "~2.4.0", + "socket.io": "~4.5.4", + "socket.io-client": "^4.5.4", "stream-browserify": "^3.0.0", "style-loader": "^0.23.1", - "swagger-ui-dist": "^3.32.1", - "swagger-ui-express": "^4.1.4", + "swagger-ui-dist": "^4.13.2", + "swagger-ui-express": "^4.5.0", "traverse": "^0.6.6", - "uuid": "^3.4.0", - "webpack": "^5.20.2", - "webpack-cli": "^4.5.0" + "uuid": "^9.0.0", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" }, "devDependencies": { "@types/tough-cookie": "^4.0.0", "axios": "^0.21.1", "babel-eslint": "^10.1.0", "benv": "^3.3.0", - "codacy-coverage": "^3.4.0", "csv-parse": "^4.12.0", "env-cmd": "^10.1.0", "eslint": "^7.19.0", "eslint-plugin-security": "^1.4.0", - "eslint-webpack-plugin": "^2.4.3", - "mocha": "^8.1.1", - "nodemon": "^1.19.4", + "eslint-webpack-plugin": "^2.7.0", + "mocha": "^8.4.0", + "nodemon": "^2.0.19", "nyc": "^14.1.1", "should": "^13.2.3", "supertest": "^3.4.2", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-middleware": "^4.1.0", - "webpack-hot-middleware": "^2.25.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-middleware": "^4.3.0", + "webpack-hot-middleware": "^2.25.2", "xml2js": "^0.4.23" - }, - "browserslist": "> 0.25%, not dead, ios_saf 10" + } } diff --git a/tests/XX_clean.test.js b/tests/XX_clean.test.js index 9b921a01721..3549baa4ba9 100644 --- a/tests/XX_clean.test.js +++ b/tests/XX_clean.test.js @@ -25,13 +25,13 @@ describe('Clean MONGO after tests', function ( ) { }); it('wipe treatment data', function (done) { - self.ctx.treatments().remove({ }, function ( ) { + self.ctx.treatments().deleteMany({ }, function ( ) { done(); }); }); it('wipe entries data', function (done) { - self.ctx.entries().remove({ }, function ( ) { + self.ctx.entries().deleteMany({ }, function ( ) { done(); }); }); diff --git a/tests/admintools.test.js b/tests/admintools.test.js index 59f10c720a7..4b7801419cd 100644 --- a/tests/admintools.test.js +++ b/tests/admintools.test.js @@ -70,7 +70,7 @@ describe('admintools', function ( ) { before(function (done) { benv.setup(function() { - benv.require(__dirname + '/../tmp/public/js/bundle.app.js'); + benv.require(__dirname + '/../node_modules/.cache/_ns_cache/public/js/bundle.app.js'); self.$ = $; diff --git a/tests/api.entries.test.js b/tests/api.entries.test.js index cbb1c885631..c4cbf90c948 100644 --- a/tests/api.entries.test.js +++ b/tests/api.entries.test.js @@ -4,8 +4,12 @@ var request = require('supertest'); var load = require('./fixtures/load'); var bootevent = require('../lib/server/bootevent'); var language = require('../lib/language')(); +const _ = require('lodash'); + require('should'); +const FIVE_MINUTES=1000*60*5; + describe('Entries REST api', function ( ) { var entries = require('../lib/api/entries/'); var self = this; @@ -24,25 +28,46 @@ describe('Entries REST api', function ( ) { bootevent(self.env, language).boot(function booted (ctx) { self.app.use('/', entries(self.app, self.wares, ctx, self.env)); self.archive = require('../lib/server/entries')(self.env, ctx); - - var creating = load('json'); - creating.push({type: 'sgv', sgv: 100, date: Date.now()}); - self.archive.create(creating, done); + self.ctx = ctx; + done(); }); }); beforeEach(function (done) { var creating = load('json'); - creating.push({type: 'sgv', sgv: 100, date: Date.now()}); - self.archive.create(creating, done); + + for (let i = 0; i < 20; i++) { + const e = {type: 'sgv', sgv: 100, date: Date.now()}; + e.date = e.date - FIVE_MINUTES * i; + creating.push(e); + } + + creating = _.sortBy(creating, function(item) { + return item.date; + }); + + function setupDone() { + console.log('Setup complete'); + done(); + } + + function waitForASecond() { + // wait for event processing of cache entries to actually finish + setTimeout(function() { + setupDone(); + }, 100); + } + + self.archive.create(creating, waitForASecond); + }); afterEach(function (done) { - self.archive( ).remove({ }, done); + self.archive( ).deleteMany({ }, done); }); after(function (done) { - self.archive( ).remove({ }, done); + self.archive( ).deleteMany({ }, done); }); // keep this test pinned at or near the top in order to validate all @@ -89,6 +114,23 @@ describe('Entries REST api', function ( ) { }); }); + it('gets entries in right order without type specifier', function (done) { + var defaultCount = 10; + request(self.app) + .get('/entries.json') + .expect(200) + .end(function (err, res) { + res.body.should.be.instanceof(Array).and.have.lengthOf(defaultCount); + + var array = res.body; + var firstEntry = array[0]; + var secondEntry = array[1]; + + firstEntry.date.should.be.above(secondEntry.date); + + done( ); + }); + }); it('/echo/ api shows query', function (done) { request(self.app) @@ -196,7 +238,7 @@ describe('Entries REST api', function ( ) { it('/entries/:id', function (done) { var app = self.app; - self.archive.list({count: 1}, function(err, records) { + self.archive.list({count: 10}, function(err, records) { var currentId = records.pop()._id.toString(); request(app) .get('/entries/'+currentId+'.json') diff --git a/tests/api.security.test.js b/tests/api.security.test.js index be203400e89..fd76696f7bd 100644 --- a/tests/api.security.test.js +++ b/tests/api.security.test.js @@ -29,7 +29,7 @@ describe('Security of REST API V1', function() { self.app.use('/api/v2/authorization', ctx.authorization.endpoints); let authResult = await authSubject(ctx.authorization.storage); self.subject = authResult.subject; - self.token = authResult.token; + self.token = authResult.accessToken; done(); }); @@ -71,6 +71,20 @@ describe('Security of REST API V1', function() { }); }); + it('Should return a JWT with default roles on broken role token', function(done) { + const now = Math.round(Date.now() / 1000) - 1; + request(self.app) + .get('/api/v2/authorization/request/' + self.token.noneSubject) + .expect(200) + .end(function(err, res) { + const decodedToken = jwt.decode(res.body.token); + decodedToken.accessToken.should.equal(self.token.noneSubject); + decodedToken.iat.should.be.aboveOrEqual(now); + decodedToken.exp.should.be.above(decodedToken.iat); + done(); + }); + }); + it('Data load should succeed with API SECRET', function(done) { request(self.app) .get('/api/v1/entries.json') @@ -138,7 +152,7 @@ describe('Security of REST API V1', function() { .expect(200) .end(function(err, res) { res.body.message.message.should.equal('OK'); - res.body.message.isAdmin.should.equal(true); + res.body.message.isAdmin.should.equal(true); done(); }); }); diff --git a/tests/api.treatments.test.js b/tests/api.treatments.test.js index 40e2d052de7..17241643a43 100644 --- a/tests/api.treatments.test.js +++ b/tests/api.treatments.test.js @@ -35,7 +35,7 @@ describe('Treatment API', function ( ) { it('post single treatments', function (done) { - self.ctx.treatments().remove({ }, function ( ) { + self.ctx.treatments.remove({ find: { created_at: { '$gte': '1999-01-01T00:00:00.000Z' } } }, function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') @@ -88,8 +88,8 @@ describe('Treatment API', function ( ) { var current_time = Date.now(); console.log('Testing date with local format: ', _moment(current_time).format("YYYY-MM-DDTHH:mm:ss.SSSZZ")); - - self.ctx.treatments().remove({ }, function ( ) { + + self.ctx.treatments.remove({ find: { created_at: { '$gte': '1999-01-01T00:00:00.000Z' } } }, function ( ) { request(self.app) .post('/api/treatments/') .set('api-secret', api_secret_hash || '') @@ -122,7 +122,7 @@ describe('Treatment API', function ( ) { it('post a treatment array', function (done) { - self.ctx.treatments().remove({ }, function ( ) { + self.ctx.treatments.remove({ find: { created_at: { '$gte': '1999-01-01T00:00:00.000Z' } } }, function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') @@ -149,7 +149,7 @@ describe('Treatment API', function ( ) { }); it('post a treatment array and dedupe', function (done) { - self.ctx.treatments().remove({ }, function ( ) { + self.ctx.treatments.remove({ find: { created_at: { '$gte': '1999-01-01T00:00:00.000Z' } } }, function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') diff --git a/tests/api.unauthorized.test.js b/tests/api.unauthorized.test.js index e1cfae62ac8..594e2dc6bf7 100644 --- a/tests/api.unauthorized.test.js +++ b/tests/api.unauthorized.test.js @@ -39,11 +39,11 @@ describe('authed REST api', function ( ) { }); afterEach(function (done) { - this.archive( ).remove({ }, done); + this.archive( ).deleteMany({ }, done); }); after(function (done) { - this.archive( ).remove({ }, done); + this.archive( ).deleteMany({ }, done); }); it('disallow unauthorized POST', function (done) { diff --git a/tests/api3.create.test.js b/tests/api3.create.test.js index 5d155f4ecc1..054d3e3254b 100644 --- a/tests/api3.create.test.js +++ b/tests/api3.create.test.js @@ -29,7 +29,7 @@ describe('API3 CREATE', function() { * Cleanup after successful creation */ self.delete = async function deletePermanent (identifier) { - let res = await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`) + let res = await self.instance.delete(`${self.url}/${identifier}?permanent=true`, self.jwt.delete) .expect(200); res.body.status.should.equal(200); @@ -40,7 +40,7 @@ describe('API3 CREATE', function() { * Get document detail for futher processing */ self.get = async function get (identifier) { - let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${identifier}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -52,7 +52,7 @@ describe('API3 CREATE', function() { * Get document detail for futher processing */ self.search = async function search (date) { - let res = await self.instance.get(`${self.url}?date$eq=${date}&token=${self.token.read}`) + let res = await self.instance.get(`${self.url}?date$eq=${date}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -68,11 +68,16 @@ describe('API3 CREATE', function() { self.col = 'treatments' self.url = `/api/v3/${self.col}`; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'create', + 'update', + 'read', + 'delete', + 'all' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; - self.urlToken = `${self.url}?token=${self.token.create}`; + self.jwt = authResult.jwt; self.cache = self.instance.cacheMonitor; }); @@ -103,7 +108,7 @@ describe('API3 CREATE', function() { it('should not found not existing collection', async () => { - let res = await self.instance.post(`/api/v3/NOT_EXIST?token=${self.url}`) + let res = await self.instance.post(`/api/v3/NOT_EXIST`, self.jwt.create) .send(self.validDoc) .expect(404); @@ -113,7 +118,7 @@ describe('API3 CREATE', function() { it('should require create permission', async () => { - let res = await self.instance.post(`${self.url}?token=${self.token.read}`) + let res = await self.instance.post(`${self.url}`, self.jwt.read) .send(self.validDoc) .expect(403); @@ -123,7 +128,7 @@ describe('API3 CREATE', function() { it('should reject empty body', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send({ }) .expect(400); @@ -132,7 +137,7 @@ describe('API3 CREATE', function() { it('should accept valid document', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(self.validDoc) .expect(201); @@ -161,7 +166,7 @@ describe('API3 CREATE', function() { let doc = Object.assign({}, self.validDoc); delete doc.date; - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(doc) .expect(400); @@ -171,7 +176,7 @@ describe('API3 CREATE', function() { it('should reject invalid date null', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { date: null })) .expect(400); @@ -181,7 +186,7 @@ describe('API3 CREATE', function() { it('should reject invalid date ABC', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { date: 'ABC' })) .expect(400); @@ -191,7 +196,7 @@ describe('API3 CREATE', function() { it('should reject invalid date -1', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { date: -1 })) .expect(400); @@ -202,7 +207,7 @@ describe('API3 CREATE', function() { it('should reject invalid date 1 (too old)', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { date: 1 })) .expect(400); @@ -212,7 +217,7 @@ describe('API3 CREATE', function() { it('should reject invalid date - illegal format', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { date: '2019-20-60T50:90:90' })) .expect(400); @@ -222,7 +227,7 @@ describe('API3 CREATE', function() { it('should reject invalid utcOffset -5000', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { utcOffset: -5000 })) .expect(400); @@ -232,7 +237,7 @@ describe('API3 CREATE', function() { it('should reject invalid utcOffset ABC', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { utcOffset: 'ABC' })) .expect(400); @@ -244,7 +249,7 @@ describe('API3 CREATE', function() { it('should accept valid utcOffset', async () => { const doc = Object.assign({}, self.validDoc, { utcOffset: 120 }); - await self.instance.post(self.urlToken) + await self.instance.post(self.url, self.jwt.create) .send(doc) .expect(201); @@ -258,7 +263,7 @@ describe('API3 CREATE', function() { it('should reject invalid utcOffset null', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { utcOffset: null })) .expect(400); @@ -271,7 +276,7 @@ describe('API3 CREATE', function() { let doc = Object.assign({}, self.validDoc); delete doc.app; - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(doc) .expect(400); @@ -281,7 +286,7 @@ describe('API3 CREATE', function() { it('should reject invalid app null', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { app: null })) .expect(400); @@ -291,7 +296,7 @@ describe('API3 CREATE', function() { it('should reject empty app', async () => { - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { app: '' })) .expect(400); @@ -301,7 +306,7 @@ describe('API3 CREATE', function() { it('should normalize date and store utcOffset', async () => { - await self.instance.post(self.urlToken) + await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { date: '2019-06-10T08:07:08,576+02:00' })) .expect(201); @@ -321,7 +326,7 @@ describe('API3 CREATE', function() { const doc = Object.assign({}, self.validDoc); - await self.instance.post(self.urlToken) + await self.instance.post(self.url, self.jwt.create) .send(doc) .expect(201); @@ -330,7 +335,7 @@ describe('API3 CREATE', function() { self.cache.nextShouldEql(self.col, doc) const doc2 = Object.assign({}, doc); - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(doc2) .expect(403); @@ -347,7 +352,7 @@ describe('API3 CREATE', function() { const doc = Object.assign({}, self.validDoc); - await self.instance.post(self.urlToken) + await self.instance.post(self.url, self.jwt.create) .send(doc) .expect(201); @@ -359,7 +364,7 @@ describe('API3 CREATE', function() { insulin: 0.5 }); - let resPost2 = await self.instance.post(`${self.url}?token=${self.token.all}`) + let resPost2 = await self.instance.post(`${self.url}`, self.jwt.all) .send(doc2) .expect(200); @@ -399,7 +404,7 @@ describe('API3 CREATE', function() { }); delete doc2._id; // APIv1 updates input document, we must get rid of _id for the next round - const resPost2 = await self.instance.post(`${self.url}?token=${self.token.all}`) + const resPost2 = await self.instance.post(`${self.url}`, self.jwt.all) .send(doc2) .expect(200); @@ -447,7 +452,7 @@ describe('API3 CREATE', function() { identifier: utils.randomString('32', 'aA#') }); - await self.instance.post(`${self.url}?token=${self.token.all}`) + await self.instance.post(`${self.url}`, self.jwt.all) .send(doc2) .expect(201); @@ -471,18 +476,18 @@ describe('API3 CREATE', function() { , identifier = utils.randomString('32', 'aA#') , doc = Object.assign({}, self.validDoc, { identifier, date: date1.toISOString() }); - await self.instance.post(self.urlToken) + await self.instance.post(self.url, self.jwt.create) .send(doc) .expect(201); self.cache.nextShouldEql(self.col, Object.assign({}, doc, { date: date1.getTime() })); - let res = await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.url}/${identifier}`, self.jwt.delete) .expect(200); res.body.status.should.equal(200); self.cache.nextShouldDeleteLast(self.col) const date2 = new Date(); - res = await self.instance.post(self.urlToken) + res = await self.instance.post(self.url, self.jwt.create) .send(Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() })) .expect(403); @@ -491,7 +496,7 @@ describe('API3 CREATE', function() { self.cache.shouldBeEmpty() const doc2 = Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() }); - res = await self.instance.post(`${self.url}?token=${self.token.all}`) + res = await self.instance.post(`${self.url}`, self.jwt.all) .send(doc2) .expect(200); @@ -513,7 +518,7 @@ describe('API3 CREATE', function() { delete self.validDoc.identifier; const validIdentifier = opTools.calculateIdentifier(self.validDoc); - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(self.validDoc) .expect(201); @@ -536,7 +541,7 @@ describe('API3 CREATE', function() { delete self.validDoc.identifier; const validIdentifier = opTools.calculateIdentifier(self.validDoc); - let res = await self.instance.post(self.urlToken) + let res = await self.instance.post(self.url, self.jwt.create) .send(self.validDoc) .expect(201); @@ -550,7 +555,7 @@ describe('API3 CREATE', function() { self.cache.nextShouldEql(self.col, self.validDoc); delete self.validDoc.identifier; - res = await self.instance.post(`${self.url}?token=${self.token.update}`) + res = await self.instance.post(`${self.url}`, self.jwt.update) .send(self.validDoc) .expect(200); diff --git a/tests/api3.delete.test.js b/tests/api3.delete.test.js index fb15754ed9d..7d709fe5e6b 100644 --- a/tests/api3.delete.test.js +++ b/tests/api3.delete.test.js @@ -19,11 +19,12 @@ describe('API3 UPDATE', function() { self.env = self.instance.env; self.url = '/api/v3/treatments'; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'delete' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; - self.urlToken = `${self.url}?token=${self.token.delete}`; + self.jwt = authResult.jwt; self.cache = self.instance.cacheMonitor; }); @@ -53,7 +54,7 @@ describe('API3 UPDATE', function() { it('should not found not existing collection', async () => { - let res = await self.instance.delete(`/api/v3/NOT_EXIST?token=${self.url}`) + let res = await self.instance.delete(`/api/v3/NOT_EXIST`, self.jwt.delete) .send(self.validDoc) .expect(404); diff --git a/tests/api3.generic.workflow.test.js b/tests/api3.generic.workflow.test.js index a4888505fe8..01b5ede3394 100644 --- a/tests/api3.generic.workflow.test.js +++ b/tests/api3.generic.workflow.test.js @@ -36,11 +36,15 @@ describe('Generic REST API3', function() { self.urlResource = self.urlCol + '/' + self.identifier; self.urlHistory = self.urlCol + '/history'; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'create', + 'update', + 'read', + 'delete' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; - self.urlToken = `${self.url}?token=${self.token.create}`; + self.jwt = authResult.jwt; self.cache = self.instance.cacheMonitor; }); @@ -62,7 +66,7 @@ describe('Generic REST API3', function() { self.checkHistoryExistence = async function checkHistoryExistence (assertions) { - let res = await self.instance.get(`${self.urlHistory}/${self.historyTimestamp}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlHistory}/${self.historyTimestamp}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -81,7 +85,7 @@ describe('Generic REST API3', function() { it('LAST MODIFIED to get actual server timestamp', async () => { - let res = await self.instance.get(`${self.urlLastModified}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlLastModified}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -94,7 +98,7 @@ describe('Generic REST API3', function() { it('STATUS to get actual server timestamp', async () => { - let res = await self.instance.get(`/api/v3/status?token=${self.token.read}`) + let res = await self.instance.get(`/api/v3/status`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -104,13 +108,13 @@ describe('Generic REST API3', function() { it('READ of not existing document is not found', async () => { - await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(404); }); it('SEARCH of not existing document (not found)', async () => { - let res = await self.instance.get(`${self.urlCol}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlCol}`, self.jwt.read) .query({ 'identifier_eq': self.identifier }) .expect(200); @@ -120,13 +124,13 @@ describe('Generic REST API3', function() { it('DELETE of not existing document is not found', async () => { - await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + await self.instance.delete(`${self.urlResource}`, self.jwt.delete) .expect(404); }); it('CREATE new document', async () => { - await self.instance.post(`${self.urlCol}?token=${self.token.create}`) + await self.instance.post(`${self.urlCol}`, self.jwt.create) .send(self.docOriginal) .expect(201); @@ -135,7 +139,7 @@ describe('Generic REST API3', function() { it('READ existing document', async () => { - let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -149,7 +153,7 @@ describe('Generic REST API3', function() { it('SEARCH existing document (found)', async () => { - let res = await self.instance.get(`${self.urlCol}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlCol}`, self.jwt.read) .query({ 'identifier$eq': self.identifier }) .expect(200); @@ -169,7 +173,7 @@ describe('Generic REST API3', function() { it('UPDATE document', async () => { self.docActual.insulin = 0.5; - let res = await self.instance.put(`${self.urlResource}?token=${self.token.update}`) + let res = await self.instance.put(`${self.urlResource}`, self.jwt.update) .send(self.docActual) .expect(200); @@ -187,7 +191,7 @@ describe('Generic REST API3', function() { it('document changed in READ', async () => { - let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -201,7 +205,7 @@ describe('Generic REST API3', function() { self.docActual.carbs = 5; self.docActual.insulin = 0.4; - let res = await self.instance.patch(`${self.urlResource}?token=${self.token.update}`) + let res = await self.instance.patch(`${self.urlResource}`, self.jwt.update) .send({ 'carbs': self.docActual.carbs, 'insulin': self.docActual.insulin }) .expect(200); @@ -218,7 +222,7 @@ describe('Generic REST API3', function() { it('document changed in READ', async () => { - let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -229,7 +233,7 @@ describe('Generic REST API3', function() { it('soft DELETE', async () => { - let res = await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.urlResource}`, self.jwt.delete) .expect(200); res.body.status.should.equal(200); @@ -238,14 +242,14 @@ describe('Generic REST API3', function() { it('READ of deleted is gone', async () => { - await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(410); }); it('SEARCH of deleted document missing it', async () => { - let res = await self.instance.get(`${self.urlCol}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlCol}`, self.jwt.read) .query({ 'identifier_eq': self.identifier }) .expect(200); @@ -262,7 +266,7 @@ describe('Generic REST API3', function() { it('permanent DELETE', async () => { - let res = await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.urlResource}`, self.jwt.delete) .query({ 'permanent': 'true' }) .expect(200); @@ -272,13 +276,13 @@ describe('Generic REST API3', function() { it('READ of permanently deleted is not found', async () => { - await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(404); }); it('document permanently deleted not in HISTORY', async () => { - let res = await self.instance.get(`${self.urlHistory}/${self.historyTimestamp}?token=${self.token.read}`); + let res = await self.instance.get(`${self.urlHistory}/${self.historyTimestamp}`, self.jwt.read); res.body.status.should.equal(200); res.body.result.should.matchEach(value => { @@ -288,11 +292,11 @@ describe('Generic REST API3', function() { it('should not modify read-only document', async () => { - await self.instance.post(`${self.urlCol}?token=${self.token.create}`) + await self.instance.post(`${self.urlCol}`, self.jwt.create) .send(Object.assign({}, self.docOriginal, { isReadOnly: true })) .expect(201); - let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + let res = await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -303,27 +307,27 @@ describe('Generic REST API3', function() { self.cache.nextShouldEql(self.col, self.docActual) self.cache.shouldBeEmpty() - res = await self.instance.post(`${self.urlCol}?token=${self.token.update}`) + res = await self.instance.post(`${self.urlCol}`, self.jwt.update) .send(Object.assign({}, self.docActual, { insulin: 0.41 })) .expect(422); res.body.message.should.equal(readOnlyMessage); - res = await self.instance.put(`${self.urlResource}?token=${self.token.update}`) + res = await self.instance.put(`${self.urlResource}`, self.jwt.update) .send(Object.assign({}, self.docActual, { insulin: 0.42 })) .expect(422); res.body.message.should.equal(readOnlyMessage); - res = await self.instance.patch(`${self.urlResource}?token=${self.token.update}`) + res = await self.instance.patch(`${self.urlResource}`, self.jwt.update) .send({ insulin: 0.43 }) .expect(422); res.body.message.should.equal(readOnlyMessage); - res = await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + res = await self.instance.delete(`${self.urlResource}`, self.jwt.delete) .query({ 'permanent': 'true' }) .expect(422); res.body.message.should.equal(readOnlyMessage); - res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) + res = await self.instance.get(`${self.urlResource}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); res.body.result.should.containEql(self.docOriginal); diff --git a/tests/api3.patch.test.js b/tests/api3.patch.test.js index 8bf13a68f4f..3e729d2dd56 100644 --- a/tests/api3.patch.test.js +++ b/tests/api3.patch.test.js @@ -28,7 +28,7 @@ describe('API3 PATCH', function() { * Get document detail for futher processing */ self.get = async function get (identifier) { - let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${identifier}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -44,11 +44,15 @@ describe('API3 PATCH', function() { self.col = 'treatments'; self.url = `/api/v3/${self.col}`; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'create', + 'update', + 'read' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; - self.urlToken = `${self.url}/${self.validDoc.identifier}?token=${self.token.update}`; + self.jwt = authResult.jwt; + self.urlIdent = `${self.url}/${self.validDoc.identifier}`; self.cache = self.instance.cacheMonitor; }); @@ -78,7 +82,7 @@ describe('API3 PATCH', function() { it('should not found not existing collection', async () => { - let res = await self.instance.patch(`/api/v3/NOT_EXIST?token=${self.url}`) + let res = await self.instance.patch(`/api/v3/NOT_EXIST`, self.jwt.update) .send(self.validDoc) .expect(404); @@ -87,14 +91,14 @@ describe('API3 PATCH', function() { it('should not found not existing document', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(self.validDoc) .expect(404); res.body.status.should.equal(404); // now let's insert the document for further patching - res = await self.instance.post(`${self.url}?token=${self.token.create}`) + res = await self.instance.post(`${self.url}`, self.jwt.create) .send(self.validDoc) .expect(201); @@ -104,7 +108,7 @@ describe('API3 PATCH', function() { it('should reject identifier alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { identifier: 'MODIFIED'})) .expect(400); @@ -114,7 +118,7 @@ describe('API3 PATCH', function() { it('should reject date alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { date: self.validDoc.date + 10000 })) .expect(400); @@ -124,7 +128,7 @@ describe('API3 PATCH', function() { it('should reject utcOffset alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { utcOffset: self.utcOffset - 120 })) .expect(400); @@ -134,7 +138,7 @@ describe('API3 PATCH', function() { it('should reject eventType alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { eventType: 'MODIFIED' })) .expect(400); @@ -144,7 +148,7 @@ describe('API3 PATCH', function() { it('should reject device alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { device: 'MODIFIED' })) .expect(400); @@ -154,7 +158,7 @@ describe('API3 PATCH', function() { it('should reject app alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { app: 'MODIFIED' })) .expect(400); @@ -164,7 +168,7 @@ describe('API3 PATCH', function() { it('should reject srvCreated alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { srvCreated: self.validDoc.date - 10000 })) .expect(400); @@ -174,7 +178,7 @@ describe('API3 PATCH', function() { it('should reject subject alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { subject: 'MODIFIED' })) .expect(400); @@ -184,7 +188,7 @@ describe('API3 PATCH', function() { it('should reject srvModified alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { srvModified: self.validDoc.date - 100000 })) .expect(400); @@ -194,7 +198,7 @@ describe('API3 PATCH', function() { it('should reject modifiedBy alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { modifiedBy: 'MODIFIED' })) .expect(400); @@ -204,7 +208,7 @@ describe('API3 PATCH', function() { it('should reject isValid alteration', async () => { - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { isValid: false })) .expect(400); @@ -216,7 +220,7 @@ describe('API3 PATCH', function() { it('should patch document', async () => { self.validDoc.carbs = 10; - let res = await self.instance.patch(self.urlToken) + let res = await self.instance.patch(self.urlIdent, self.jwt.update) .send(self.validDoc) .expect(200); diff --git a/tests/api3.read.test.js b/tests/api3.read.test.js index 7a330769f7c..c0dbbf1fe32 100644 --- a/tests/api3.read.test.js +++ b/tests/api3.read.test.js @@ -31,10 +31,14 @@ describe('API3 READ', function () { self.col = 'devicestatus'; self.url = `/api/v3/${self.col}`; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'create', + 'read', + 'delete' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; + self.jwt = authResult.jwt; self.cache = self.instance.cacheMonitor; }); @@ -64,7 +68,7 @@ describe('API3 READ', function () { it('should not found not existing collection', async () => { - let res = await self.instance.get(`/api/v3/NOT_EXIST/NOT_EXIST?token=${self.url}`) + let res = await self.instance.get(`/api/v3/NOT_EXIST/NOT_EXIST`, self.jwt.read) .send(self.validDoc) .expect(404); @@ -75,7 +79,7 @@ describe('API3 READ', function () { it('should not found not existing document', async () => { - let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}`, self.jwt.read) .expect(404); res.body.status.should.equal(404); @@ -85,13 +89,13 @@ describe('API3 READ', function () { it('should read just created document', async () => { - let res = await self.instance.post(`${self.url}?token=${self.token.create}`) + let res = await self.instance.post(`${self.url}`, self.jwt.create) .send(self.validDoc) .expect(201); res.body.status.should.equal(201); - res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + res = await self.instance.get(`${self.url}/${self.validDoc.identifier}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -107,7 +111,7 @@ describe('API3 READ', function () { it('should contain only selected fields', async () => { - let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?fields=date,device,subject&token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?fields=date,device,subject`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -121,7 +125,7 @@ describe('API3 READ', function () { it('should contain all fields', async () => { - let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?fields=_all&token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?fields=_all`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -132,7 +136,7 @@ describe('API3 READ', function () { it('should not send unmodified document since', async () => { - let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}`, self.jwt.read) .set('If-Modified-Since', new Date(new Date().getTime() + 1000).toUTCString()) .expect(304); @@ -141,7 +145,7 @@ describe('API3 READ', function () { it('should send modified document since', async () => { - let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}`, self.jwt.read) .set('If-Modified-Since', new Date(new Date(self.validDoc.date).getTime() - 1000).toUTCString()) .expect(200); @@ -151,13 +155,13 @@ describe('API3 READ', function () { it('should recognize softly deleted document', async () => { - let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}`, self.jwt.delete) .expect(200); res.body.status.should.equal(200); self.cache.nextShouldDeleteLast(self.col) - res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + res = await self.instance.get(`${self.url}/${self.validDoc.identifier}`, self.jwt.read) .expect(410); res.body.status.should.equal(410); @@ -166,13 +170,13 @@ describe('API3 READ', function () { it('should not find permanently deleted document', async () => { - let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?permanent=true&token=${self.token.delete}`) + let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?permanent=true`, self.jwt.delete) .expect(200); res.body.status.should.equal(200); self.cache.nextShouldDeleteLast(self.col) - res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + res = await self.instance.get(`${self.url}/${self.validDoc.identifier}`, self.jwt.read) .expect(404); res.body.status.should.equal(404); @@ -201,13 +205,13 @@ describe('API3 READ', function () { const identifier = doc._id.toString(); delete doc._id; - let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${identifier}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); res.body.result.should.containEql(doc); - res = await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`) + res = await self.instance.delete(`${self.url}/${identifier}?permanent=true`, self.jwt.delete) .expect(200); res.body.status.should.equal(200); diff --git a/tests/api3.renderer.test.js b/tests/api3.renderer.test.js index d897cf96306..5946a431923 100644 --- a/tests/api3.renderer.test.js +++ b/tests/api3.renderer.test.js @@ -44,10 +44,14 @@ describe('API3 output renderers', function() { self.col = 'entries'; self.url = `/api/v3/${self.col}`; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'create', + 'read', + 'delete' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; + self.jwt = authResult.jwt; self.cache = self.instance.cacheMonitor; }); @@ -139,13 +143,13 @@ describe('API3 output renderers', function() { async function createDoc (doc) { - let res = await self.instance.post(`${self.url}?token=${self.token.create}`) + let res = await self.instance.post(`${self.url}`, self.jwt.create) .send(doc) .expect(201); res.body.status.should.equal(201); - res = await self.instance.get(`${self.url}/${doc.identifier}?token=${self.token.read}`) + res = await self.instance.get(`${self.url}/${doc.identifier}`, self.jwt.read) .expect(200); return res.body; } @@ -168,22 +172,22 @@ describe('API3 output renderers', function() { should.not.exist(res.body.result); } - await check406(self.instance.get(`${self.url}/${self.doc1.identifier}.ttf?fields=_all&token=${self.token.read}`)); - await check406(self.instance.get(`${self.url}/${self.doc1.identifier}?fields=_all&token=${self.token.read}`) + await check406(self.instance.get(`${self.url}/${self.doc1.identifier}.ttf?fields=_all`, self.jwt.read)); + await check406(self.instance.get(`${self.url}/${self.doc1.identifier}?fields=_all`, self.jwt.read) .set('Accept', 'font/ttf')); - await check406(self.instance.get(`${self.url}.ttf?fields=_all&token=${self.token.read}`)); - await check406(self.instance.get(`${self.url}?fields=_all&token=${self.token.read}`) + await check406(self.instance.get(`${self.url}.ttf?fields=_all`, self.jwt.read)); + await check406(self.instance.get(`${self.url}?fields=_all`, self.jwt.read) .set('Accept', 'font/ttf')); - await check406(self.instance.get(`${self.url}/history/${self.doc1.date}.ttf?token=${self.token.read}`)); - await check406(self.instance.get(`${self.url}/history/${self.doc1.date}?token=${self.token.read}`) + await check406(self.instance.get(`${self.url}/history/${self.doc1.date}.ttf`, self.jwt.read)); + await check406(self.instance.get(`${self.url}/history/${self.doc1.date}`, self.jwt.read) .set('Accept', 'font/ttf')); }); it('READ should accept xml content type', async () => { - let res = await self.instance.get(`${self.url}/${self.doc1.identifier}.xml?fields=_all&token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.doc1.identifier}.xml?fields=_all`, self.jwt.read) .expect(200); res.text.should.startWith(''); @@ -192,7 +196,7 @@ describe('API3 output renderers', function() { xml.item.should.not.be.empty(); self.checkProps(self.doc1, xml.item); - let res2 = await self.instance.get(`${self.url}/${self.doc1.identifier}?fields=_all&token=${self.token.read}`) + let res2 = await self.instance.get(`${self.url}/${self.doc1.identifier}?fields=_all`, self.jwt.read) .set('Accept', 'application/xml') .expect(200); @@ -201,12 +205,12 @@ describe('API3 output renderers', function() { it('READ should accept csv content type', async () => { - let res = await self.instance.get(`${self.url}/${self.doc1.identifier}.csv?fields=_all&token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.doc1.identifier}.csv?fields=_all`, self.jwt.read) .expect(200); await self.checkCsvItems([self.doc1], res.text); - let res2 = await self.instance.get(`${self.url}/${self.doc1.identifier}?fields=_all&token=${self.token.read}`) + let res2 = await self.instance.get(`${self.url}/${self.doc1.identifier}?fields=_all`, self.jwt.read) .set('Accept', 'text/csv') .expect(200); @@ -215,12 +219,12 @@ describe('API3 output renderers', function() { it('SEARCH should accept xml content type', async () => { - let res = await self.instance.get(`${self.url}.xml?token=${self.token.read}&date$gte=${self.doc1.date}`) + let res = await self.instance.get(`${self.url}.xml?date$gte=${self.doc1.date}`, self.jwt.read) .expect(200); await self.checkXmlItems([self.doc1, self.doc2], res.text); - let res2 = await self.instance.get(`${self.url}?token=${self.token.read}&date$gte=${self.doc1.date}`) + let res2 = await self.instance.get(`${self.url}?date$gte=${self.doc1.date}`, self.jwt.read) .set('Accept', 'application/xml') .expect(200); @@ -229,12 +233,12 @@ describe('API3 output renderers', function() { it('SEARCH should accept csv content type', async () => { - let res = await self.instance.get(`${self.url}.csv?token=${self.token.read}&date$gte=${self.doc1.date}`) + let res = await self.instance.get(`${self.url}.csv?date$gte=${self.doc1.date}`, self.jwt.read) .expect(200); await self.checkCsvItems([self.doc1, self.doc2], res.text); - let res2 = await self.instance.get(`${self.url}?token=${self.token.read}&date$gte=${self.doc1.date}`) + let res2 = await self.instance.get(`${self.url}?date$gte=${self.doc1.date}`, self.jwt.read) .set('Accept', 'text/csv') .expect(200); @@ -243,12 +247,12 @@ describe('API3 output renderers', function() { it('HISTORY should accept xml content type', async () => { - let res = await self.instance.get(`${self.url}/history/${self.historyFrom}.xml?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/history/${self.historyFrom}.xml`, self.jwt.read) .expect(200); await self.checkXmlItems([self.doc1, self.doc2], res.text); - let res2 = await self.instance.get(`${self.url}/history/${self.historyFrom}?token=${self.token.read}`) + let res2 = await self.instance.get(`${self.url}/history/${self.historyFrom}`, self.jwt.read) .set('Accept', 'application/xml') .expect(200); @@ -257,12 +261,12 @@ describe('API3 output renderers', function() { it('HISTORY should accept csv content type', async () => { - let res = await self.instance.get(`${self.url}/history/${self.historyFrom}.csv?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/history/${self.historyFrom}.csv`, self.jwt.read) .expect(200); await self.checkCsvItems([self.doc1, self.doc2], res.text); - let res2 = await self.instance.get(`${self.url}/history/${self.historyFrom}?token=${self.token.read}`) + let res2 = await self.instance.get(`${self.url}/history/${self.historyFrom}`, self.jwt.read) .set('Accept', 'text/csv') .expect(200); @@ -273,7 +277,7 @@ describe('API3 output renderers', function() { it('should remove mock documents', async () => { async function deleteDoc (identifier) { - let res = await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.url}/${identifier}`, self.jwt.delete) .query({ 'permanent': 'true' }) .expect(200); diff --git a/tests/api3.search.test.js b/tests/api3.search.test.js index d504bdb7937..aeafc84630c 100644 --- a/tests/api3.search.test.js +++ b/tests/api3.search.test.js @@ -21,7 +21,7 @@ describe('API3 SEARCH', function() { * Get document detail for futher processing */ self.get = function get (identifier, done) { - self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) + self.instance.get(`${self.url}/${identifier}`, self.jwt.read) .expect(200) .end((err, res) => { should.not.exist(err); @@ -35,7 +35,7 @@ describe('API3 SEARCH', function() { */ self.create = (doc) => new Promise((resolve) => { doc.identifier = opTools.calculateIdentifier(doc); - self.instance.post(`${self.url}?token=${self.token.all}`) + self.instance.post(`${self.url}`, self.jwt.all) .send(doc) .end((err) => { should.not.exist(err); @@ -52,12 +52,14 @@ describe('API3 SEARCH', function() { self.env = self.instance.env; self.url = '/api/v3/entries'; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'read', + 'all' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; - self.urlToken = `${self.url}?token=${self.token.read}`; - self.urlTest = `${self.urlToken}&srvModified$gte=${self.testStarted.getTime()}`; + self.jwt = authResult.jwt; + self.urlTest = `${self.url}?srvModified$gte=${self.testStarted.getTime()}`; const promises = testConst.SAMPLE_ENTRIES.map(doc => self.create(doc)); self.docs = await Promise.all(promises); @@ -80,7 +82,7 @@ describe('API3 SEARCH', function() { it('should not found not existing collection', async () => { - let res = await self.instance.get(`/api/v3/NOT_EXIST?token=${self.url}`) + let res = await self.instance.get(`/api/v3/NOT_EXIST`, self.jwt.read) .send(self.validDoc) .expect(404); @@ -90,7 +92,7 @@ describe('API3 SEARCH', function() { it('should found at least 10 documents', async () => { - let res = await self.instance.get(self.urlToken) + let res = await self.instance.get(self.url, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -99,7 +101,7 @@ describe('API3 SEARCH', function() { it('should found at least 10 documents from test start', async () => { - let res = await self.instance.get(self.urlTest) + let res = await self.instance.get(self.urlTest, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -108,7 +110,7 @@ describe('API3 SEARCH', function() { it('should reject invalid limit - not a number', async () => { - let res = await self.instance.get(`${self.urlToken}&limit=INVALID`) + let res = await self.instance.get(`${self.url}?limit=INVALID`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -118,7 +120,7 @@ describe('API3 SEARCH', function() { it('should reject invalid limit - negative number', async () => { - let res = await self.instance.get(`${self.urlToken}&limit=-1`) + let res = await self.instance.get(`${self.url}?limit=-1`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -128,7 +130,7 @@ describe('API3 SEARCH', function() { it('should reject invalid limit - zero', async () => { - let res = await self.instance.get(`${self.urlToken}&limit=0`) + let res = await self.instance.get(`${self.url}?limit=0`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -138,7 +140,7 @@ describe('API3 SEARCH', function() { it('should accept valid limit', async () => { - let res = await self.instance.get(`${self.urlToken}&limit=3`) + let res = await self.instance.get(`${self.url}?limit=3`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -147,7 +149,7 @@ describe('API3 SEARCH', function() { it('should reject invalid skip - not a number', async () => { - let res = await self.instance.get(`${self.urlToken}&skip=INVALID`) + let res = await self.instance.get(`${self.url}?skip=INVALID`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -157,7 +159,7 @@ describe('API3 SEARCH', function() { it('should reject invalid skip - negative number', async () => { - let res = await self.instance.get(`${self.urlToken}&skip=-5`) + let res = await self.instance.get(`${self.url}?skip=-5`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -167,7 +169,7 @@ describe('API3 SEARCH', function() { it('should reject both sort and sort$desc', async () => { - let res = await self.instance.get(`${self.urlToken}&sort=date&sort$desc=created_at`) + let res = await self.instance.get(`${self.url}?sort=date&sort$desc=created_at`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -177,7 +179,7 @@ describe('API3 SEARCH', function() { it('should sort well by date field', async () => { - let res = await self.instance.get(`${self.urlTest}&sort=date`) + let res = await self.instance.get(`${self.urlTest}&sort=date`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -185,7 +187,7 @@ describe('API3 SEARCH', function() { const length = ascending.length; length.should.be.aboveOrEqual(self.docs.length); - res = await self.instance.get(`${self.urlTest}&sort$desc=date`) + res = await self.instance.get(`${self.urlTest}&sort$desc=date`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -203,14 +205,14 @@ describe('API3 SEARCH', function() { it('should skip documents', async () => { - let res = await self.instance.get(`${self.urlToken}&sort=date&limit=8`) + let res = await self.instance.get(`${self.url}?sort=date&limit=8`, self.jwt.read) .expect(200); res.body.status.should.equal(200); const fullDocs = res.body.result; fullDocs.length.should.equal(8); - res = await self.instance.get(`${self.urlToken}&sort=date&skip=3&limit=5`) + res = await self.instance.get(`${self.url}?sort=date&skip=3&limit=5`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -224,7 +226,7 @@ describe('API3 SEARCH', function() { it('should project selected fields', async () => { - let res = await self.instance.get(`${self.urlToken}&fields=date,app,subject`) + let res = await self.instance.get(`${self.url}?fields=date,app,subject`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -236,7 +238,7 @@ describe('API3 SEARCH', function() { it('should project all fields', async () => { - let res = await self.instance.get(`${self.urlToken}&fields=_all`) + let res = await self.instance.get(`${self.url}?fields=_all`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -254,7 +256,7 @@ describe('API3 SEARCH', function() { const apiApp = self.instance.ctx.apiApp , limitBackup = apiApp.get('API3_MAX_LIMIT'); apiApp.set('API3_MAX_LIMIT', 5); - let res = await self.instance.get(`${self.urlToken}&limit=10`) + let res = await self.instance.get(`${self.url}?limit=10`, self.jwt.read) .expect(400); res.body.status.should.equal(400); @@ -267,7 +269,7 @@ describe('API3 SEARCH', function() { const apiApp = self.instance.ctx.apiApp , limitBackup = apiApp.get('API3_MAX_LIMIT'); apiApp.set('API3_MAX_LIMIT', 5); - let res = await self.instance.get(`${self.urlToken}`) + let res = await self.instance.get(`${self.url}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); diff --git a/tests/api3.security.test.js b/tests/api3.security.test.js index df0928ffe9c..4899081fa2f 100644 --- a/tests/api3.security.test.js +++ b/tests/api3.security.test.js @@ -3,7 +3,6 @@ const request = require('supertest') , apiConst = require('../lib/api3/const.json') - , moment = require('moment') ; require('should'); @@ -20,9 +19,13 @@ describe('Security of REST API3', function() { self.http = await instance.create({ useHttps: false }); self.https = await instance.create({ }); - let authResult = await authSubject(self.https.ctx.authorization.storage); + let authResult = await authSubject(self.https.ctx.authorization.storage, [ + 'denied', + 'read', + 'delete' + ], self.https.app); self.subject = authResult.subject; - self.token = authResult.token; + self.jwt = authResult.jwt; }); @@ -35,7 +38,6 @@ describe('Security of REST API3', function() { it('should require token', async () => { let res = await request(self.https.baseUrl) .get('/api/v3/test') - .set('Date', new Date().toUTCString()) .expect(401); res.body.status.should.equal(401); @@ -45,19 +47,19 @@ describe('Security of REST API3', function() { it('should require valid token', async () => { let res = await request(self.https.baseUrl) - .get('/api/v3/test?token=invalid_token') - .set('Date', new Date().toUTCString()) + .get('/api/v3/test') + .set('Authorization', 'Bearer invalid_token') .expect(401); res.body.status.should.equal(401); - res.body.message.should.equal(apiConst.MSG.HTTP_401_MISSING_OR_BAD_TOKEN); + res.body.message.should.equal(apiConst.MSG.HTTP_401_BAD_TOKEN); }); it('should deny subject denied', async () => { let res = await request(self.https.baseUrl) - .get('/api/v3/test?token=' + self.subject.denied.accessToken) - .set('Date', new Date().toUTCString()) + .get('/api/v3/test') + .set('Authorization', `Bearer ${self.jwt.denied}`) .expect(403); res.body.status.should.equal(403); @@ -67,37 +69,10 @@ describe('Security of REST API3', function() { it('should allow subject with read permission', async () => { await request(self.https.baseUrl) - .get('/api/v3/test?token=' + self.token.read) - .set('Date', new Date().toUTCString()) - .expect(200); - }); - - - it('should accept valid now - epoch in ms', async () => { - await request(self.https.baseUrl) - .get(`/api/v3/test?token=${self.token.read}&now=${moment().valueOf()}`) - .expect(200); - }); - - - it('should accept valid now - epoch in seconds', async () => { - await request(self.https.baseUrl) - .get(`/api/v3/test?token=${self.token.read}&now=${moment().unix()}`) + .get('/api/v3/test', self.jwt.read) + .set('Authorization', `Bearer ${self.jwt.read}`) .expect(200); }); - it('should accept valid now - ISO 8601', async () => { - await request(self.https.baseUrl) - .get(`/api/v3/test?token=${self.token.read}&now=${moment().toISOString()}`) - .expect(200); - }); - - - it('should accept valid now - RFC 2822', async () => { - await request(self.https.baseUrl) - .get(`/api/v3/test?token=${self.token.read}&now=${moment().utc().format('ddd, DD MMM YYYY HH:mm:ss [GMT]')}`) - .expect(200); - }); - }); diff --git a/tests/api3.socket.test.js b/tests/api3.socket.test.js index 8c63486bba1..fe71b04e019 100644 --- a/tests/api3.socket.test.js +++ b/tests/api3.socket.test.js @@ -37,10 +37,15 @@ describe('Socket.IO in REST API3', function() { self.urlResource = self.urlCol + '/' + self.identifier; self.urlHistory = self.urlCol + '/history'; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'create', + 'update', + 'delete' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; + self.jwt = authResult.jwt; + self.accessToken = authResult.accessToken; self.socket = self.instance.clientSocket; }); @@ -72,7 +77,7 @@ describe('Socket.IO in REST API3', function() { it('should not subscribe by subject with no rights', done => { - self.socket.emit('subscribe', { accessToken: self.token.denied }, function (data) { + self.socket.emit('subscribe', { accessToken: self.accessToken.denied }, function (data) { data.success.should.not.equal(true); data.message.should.equal(apiConst.MSG.SOCKET_UNAUTHORIZED_TO_ANY); done(); @@ -84,7 +89,7 @@ describe('Socket.IO in REST API3', function() { const cols = ['entries', 'treatments']; self.socket.emit('subscribe', { - accessToken: self.token.all, + accessToken: self.accessToken.all, collections: cols }, function (data) { data.success.should.equal(true); @@ -104,7 +109,7 @@ describe('Socket.IO in REST API3', function() { done(); }); - self.instance.post(`${self.urlCol}?token=${self.token.create}`) + self.instance.post(`${self.urlCol}`, self.jwt.create) .send(self.docOriginal) .expect(201) .end((err) => { @@ -126,7 +131,7 @@ describe('Socket.IO in REST API3', function() { done(); }); - self.instance.put(`${self.urlResource}?token=${self.token.update}`) + self.instance.put(`${self.urlResource}`, self.jwt.update) .send(self.docActual) .expect(200) .end((err) => { @@ -150,7 +155,7 @@ describe('Socket.IO in REST API3', function() { done(); }); - self.instance.patch(`${self.urlResource}?token=${self.token.update}`) + self.instance.patch(`${self.urlResource}`, self.jwt.update) .send({ 'carbs': self.docActual.carbs, 'insulin': self.docActual.insulin }) .expect(200) .end((err) => { @@ -167,7 +172,7 @@ describe('Socket.IO in REST API3', function() { done(); }); - self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + self.instance.delete(`${self.urlResource}`, self.jwt.delete) .expect(200) .end((err) => { should.not.exist(err); diff --git a/tests/api3.update.test.js b/tests/api3.update.test.js index 7c28dbb2205..14f4fb877fb 100644 --- a/tests/api3.update.test.js +++ b/tests/api3.update.test.js @@ -29,7 +29,7 @@ describe('API3 UPDATE', function() { * Get document detail for futher processing */ self.get = async function get (identifier) { - let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${identifier}`, self.jwt.read) .expect(200); res.body.status.should.equal(200); @@ -45,11 +45,16 @@ describe('API3 UPDATE', function() { self.col = 'treatments' self.url = `/api/v3/${self.col}`; - let authResult = await authSubject(self.instance.ctx.authorization.storage); + let authResult = await authSubject(self.instance.ctx.authorization.storage, [ + 'read', + 'update', + 'delete', + 'all' + ], self.instance.app); self.subject = authResult.subject; - self.token = authResult.token; - self.urlToken = `${self.url}/${self.validDoc.identifier}?token=${self.token.update}` + self.jwt = authResult.jwt; + self.urlIdent = `${self.url}/${self.validDoc.identifier}` self.cache = self.instance.cacheMonitor; }); @@ -79,7 +84,7 @@ describe('API3 UPDATE', function() { it('should not found not existing collection', async () => { - let res = await self.instance.put(`/api/v3/NOT_EXIST?token=${self.url}`) + let res = await self.instance.put(`/api/v3/NOT_EXIST`, self.jwt.update) .send(self.validDoc) .expect(404); @@ -88,7 +93,7 @@ describe('API3 UPDATE', function() { it('should require update permission for upsert', async () => { - let res = await self.instance.put(`${self.url}/${self.validDoc.identifier}?token=${self.token.update}`) + let res = await self.instance.put(`${self.url}/${self.validDoc.identifier}`, self.jwt.update) .send(self.validDoc) .expect(403); @@ -98,7 +103,7 @@ describe('API3 UPDATE', function() { it('should upsert not existing document', async () => { - let res = await self.instance.put(`${self.url}/${self.validDoc.identifier}?token=${self.token.all}`) + let res = await self.instance.put(`${self.url}/${self.validDoc.identifier}`, self.jwt.all) .send(self.validDoc) .expect(201); @@ -108,7 +113,7 @@ describe('API3 UPDATE', function() { const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds - let body = await self.get(self.validDoc.identifier); + let body = await self.get(self.validDoc.identifier, self.jwt.read); body.should.containEql(self.validDoc); should.not.exist(body.modifiedBy); @@ -123,7 +128,7 @@ describe('API3 UPDATE', function() { self.validDoc.carbs = 10; delete self.validDoc.insulin; - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(self.validDoc) .expect(200); @@ -132,7 +137,7 @@ describe('API3 UPDATE', function() { const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds - let body = await self.get(self.validDoc.identifier); + let body = await self.get(self.validDoc.identifier, self.jwt.read); body.should.containEql(self.validDoc); should.not.exist(body.insulin); should.not.exist(body.modifiedBy); @@ -147,7 +152,7 @@ describe('API3 UPDATE', function() { const doc = Object.assign({}, self.validDoc, { carbs: 11 }); - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .set('If-Unmodified-Since', new Date(new Date().getTime() + 1000).toUTCString()) .send(doc) .expect(200); @@ -155,7 +160,7 @@ describe('API3 UPDATE', function() { res.body.status.should.equal(200); self.cache.nextShouldEql(self.col, doc) - let body = await self.get(self.validDoc.identifier); + let body = await self.get(self.validDoc.identifier, self.jwt.read); body.should.containEql(doc); }); @@ -167,20 +172,20 @@ describe('API3 UPDATE', function() { let body = await self.get(doc.identifier); self.validDoc = body; - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .set('If-Unmodified-Since', new Date(new Date(body.srvModified).getTime() - 1000).toUTCString()) .send(doc) .expect(412); res.body.status.should.equal(412); - body = await self.get(doc.identifier); + body = await self.get(doc.identifier, self.jwt.read); body.should.eql(self.validDoc); }); it('should reject date alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { date: self.validDoc.date + 10000 })) .expect(400); @@ -190,7 +195,7 @@ describe('API3 UPDATE', function() { it('should reject utcOffset alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { utcOffset: self.utcOffset - 120 })) .expect(400); @@ -200,7 +205,7 @@ describe('API3 UPDATE', function() { it('should reject eventType alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { eventType: 'MODIFIED' })) .expect(400); @@ -210,7 +215,7 @@ describe('API3 UPDATE', function() { it('should reject device alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { device: 'MODIFIED' })) .expect(400); @@ -220,7 +225,7 @@ describe('API3 UPDATE', function() { it('should reject app alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { app: 'MODIFIED' })) .expect(400); @@ -230,7 +235,7 @@ describe('API3 UPDATE', function() { it('should reject srvCreated alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { srvCreated: self.validDoc.date - 10000 })) .expect(400); @@ -240,7 +245,7 @@ describe('API3 UPDATE', function() { it('should reject subject alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { subject: 'MODIFIED' })) .expect(400); @@ -250,7 +255,7 @@ describe('API3 UPDATE', function() { it('should reject srvModified alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { srvModified: self.validDoc.date - 100000 })) .expect(400); @@ -260,7 +265,7 @@ describe('API3 UPDATE', function() { it('should reject modifiedBy alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { modifiedBy: 'MODIFIED' })) .expect(400); @@ -270,7 +275,7 @@ describe('API3 UPDATE', function() { it('should reject isValid alteration', async () => { - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { isValid: false })) .expect(400); @@ -282,7 +287,7 @@ describe('API3 UPDATE', function() { it('should ignore identifier alteration in body', async () => { self.validDoc = await self.get(self.validDoc.identifier); - let res = await self.instance.put(self.urlToken) + let res = await self.instance.put(self.urlIdent, self.jwt.update) .send(Object.assign({}, self.validDoc, { identifier: 'MODIFIED' })) .expect(200); @@ -293,13 +298,13 @@ describe('API3 UPDATE', function() { it('should not update deleted document', async () => { - let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?token=${self.token.delete}`) + let res = await self.instance.delete(self.urlIdent, self.jwt.delete) .expect(200); res.body.status.should.equal(200); self.cache.nextShouldDeleteLast(self.col) - res = await self.instance.put(self.urlToken) + res = await self.instance.put(self.urlIdent, self.jwt.update) .send(self.validDoc) .expect(410); diff --git a/tests/ar2.test.js b/tests/ar2.test.js index 91ae4353841..3b0d344a66f 100644 --- a/tests/ar2.test.js +++ b/tests/ar2.test.js @@ -1,21 +1,16 @@ 'use strict'; const should = require('should'); -const levels = require('../lib/levels'); -const fs = require('fs'); +const helper = require('./inithelper')(); const FIVE_MINS = 300000; const SIX_MINS = 360000; describe('ar2', function ( ) { - var ctx = { - settings: {} - , language: require('../lib/language')(fs) - , levels: levels - }; + var ctx = helper.getctx(); + ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); - ctx.levels = levels; var ar2 = require('../lib/plugins/ar2')(ctx); var bgnow = require('../lib/plugins/bgnow')(ctx); @@ -75,7 +70,7 @@ describe('ar2', function ( ) { }); ar2.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.WARN); + highest.level.should.equal(helper.ctx.levels.WARN); highest.title.should.equal('Warning, HIGH predicted'); highest.message.should.equal('BG Now: 170 +20 ↗ mg/dl\nBG 15m: 206 mg/dl\nIOB: 1.25U'); @@ -89,7 +84,7 @@ describe('ar2', function ( ) { var sbx = prepareSandbox(); ar2.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.URGENT); + highest.level.should.equal(helper.ctx.levels.URGENT); highest.title.should.equal('Urgent, HIGH'); done(); @@ -102,7 +97,7 @@ describe('ar2', function ( ) { var sbx = prepareSandbox(); ar2.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.WARN); + highest.level.should.equal(helper.ctx.levels.WARN); highest.title.should.equal('Warning, LOW'); done(); @@ -115,7 +110,7 @@ describe('ar2', function ( ) { var sbx = prepareSandbox(); ar2.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.WARN); + highest.level.should.equal(helper.ctx.levels.WARN); highest.title.should.equal('Warning, LOW predicted'); done(); @@ -128,7 +123,7 @@ describe('ar2', function ( ) { var sbx = prepareSandbox(); ar2.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.URGENT); + highest.level.should.equal(helper.ctx.levels.URGENT); highest.title.should.equal('Urgent, LOW predicted'); done(); @@ -143,7 +138,7 @@ describe('ar2', function ( ) { var sbx = prepareSandbox(); ar2.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.WARN); + highest.level.should.equal(helper.ctx.levels.WARN); highest.title.should.equal('Warning, LOW predicted'); done(); diff --git a/tests/basalprofileplugin.test.js b/tests/basalprofileplugin.test.js index 59b14463e04..c1ed3903089 100644 --- a/tests/basalprofileplugin.test.js +++ b/tests/basalprofileplugin.test.js @@ -2,6 +2,8 @@ const should = require('should'); const fs = require('fs'); const language = require('../lib/language')(fs); +const helper = require('./inithelper')(); + describe('basalprofile', function ( ) { var sandbox = require('../lib/sandbox')(); @@ -51,8 +53,7 @@ describe('basalprofile', function ( ) { ] }; - - var profile = require('../lib/profilefunctions')([profileData]); + var profile = require('../lib/profilefunctions')([profileData], helper.ctx); it('update basal profile pill', function (done) { var data = {}; @@ -68,7 +69,9 @@ describe('basalprofile', function ( ) { , language: language }; - var time = new Date('2015-06-21T00:00:00+00:00').getTime(); + var time = new Date('2015-06-21T00:00:00+00:00'); + + console.log('TIME1', time); var sbx = sandbox.clientInit(ctx, time, data); sbx.data.profile = profile; @@ -86,7 +89,7 @@ describe('basalprofile', function ( ) { , language: language }; - var time = new Date('2015-06-21T00:00:00+00:00').getTime(); + var time = new Date('2015-06-21T00:00:00+00:00'); var sbx = sandbox.clientInit(ctx, time, data); sbx.data.profile = profile; diff --git a/tests/bgnow.test.js b/tests/bgnow.test.js index b9c97e0a304..98be53a48eb 100644 --- a/tests/bgnow.test.js +++ b/tests/bgnow.test.js @@ -2,17 +2,14 @@ var should = require('should'); var _ = require('lodash'); +const helper = require('./inithelper')(); var FIVE_MINS = 300000; var SIX_MINS = 360000; describe('BG Now', function ( ) { - var ctx = { - language: require('../lib/language')() - , settings: require('../lib/settings')() - }; - - ctx.levels = require('../lib/levels'); + + const ctx = helper.ctx; var bgnow = require('../lib/plugins/bgnow')(ctx); var sandbox = require('../lib/sandbox')(ctx); @@ -70,6 +67,7 @@ describe('BG Now', function ( ) { } } , language: require('../lib/language')() + , moment: helper.ctx.moment }; var sbx = sandbox.clientInit(ctx, now, data); @@ -92,6 +90,7 @@ describe('BG Now', function ( ) { } , pluginBase: {} , language: require('../lib/language')() + , moment: helper.ctx.moment }; var data = {sgvs: [{mills: before, mgdl: 100}, {mills: now, mgdl: 105}]}; @@ -137,6 +136,7 @@ describe('BG Now', function ( ) { } , pluginBase: {} , language: require('../lib/language')() + , moment: helper.ctx.moment }; var data = {sgvs: [{mills: before, mgdl: 85}, {mills: now, mgdl: 85}]}; @@ -183,6 +183,7 @@ describe('BG Now', function ( ) { } , pluginBase: {} , language: require('../lib/language')() + , moment: helper.ctx.moment }; var data = {sgvs: [{mills: before - SIX_MINS, mgdl: 100}, {mills: now, mgdl: 105}]}; diff --git a/tests/boluswizardpreview.test.js b/tests/boluswizardpreview.test.js index 6cc4127e19b..7590e8700a9 100644 --- a/tests/boluswizardpreview.test.js +++ b/tests/boluswizardpreview.test.js @@ -1,16 +1,13 @@ var should = require('should'); var Stream = require('stream'); -var levels = require('../lib/levels'); +const helper = require('./inithelper')(); describe('boluswizardpreview', function ( ) { var env = require('../lib/server/env')(); env.testMode = true; - var ctx = { - settings: {} - , language: require('../lib/language')() - , levels: levels - }; + var ctx = helper.getctx(); + ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); @@ -138,6 +135,7 @@ describe('boluswizardpreview', function ( ) { units: 'mmol' } , pluginBase: {} + , moment: helper.ctx.moment }; ctx.language = require('../lib/language')(); @@ -145,7 +143,7 @@ describe('boluswizardpreview', function ( ) { var data = {sgvs: [{mills: before, mgdl: 100}, {mills: now, mgdl: 100}]}; data.treatments = [{mills: now, insulin: '1.0'}]; data.devicestatus = []; - data.profile = require('../lib/profilefunctions')([profileData]); + data.profile = require('../lib/profilefunctions')([profileData], ctx); var sbx = sandbox.clientInit(ctx, Date.now(), data); sbx.properties.iob = iob.calcTotal(data.treatments, data.devicestatus, data.profile, now); @@ -181,6 +179,7 @@ describe('boluswizardpreview', function ( ) { units: 'mmol' } , pluginBase: {} + , moment: helper.ctx.moment }; ctx.language = require('../lib/language')(); @@ -188,7 +187,7 @@ describe('boluswizardpreview', function ( ) { var data = {sgvs: [{mills: before, mgdl: 175}, {mills: now, mgdl: 153}]}; data.treatments = [{mills: now, insulin: '0.45'}]; data.devicestatus = []; - data.profile = require('../lib/profilefunctions')([profileData]); + data.profile = require('../lib/profilefunctions')([profileData], ctx); var sbx = sandbox.clientInit(ctx, Date.now(), data); sbx.properties.iob = iob.calcTotal(data.treatments, data.devicestatus, data.profile, now); @@ -229,7 +228,7 @@ describe('boluswizardpreview', function ( ) { boluswizardpreview.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm(); - highest.level.should.equal(levels.WARN); + highest.level.should.equal(ctx.levels.WARN); highest.title.should.equal('Warning, Check BG, time to bolus?'); highest.message.should.equal('BG Now: 180 +5 ↗ mg/dl\nBG 15m: 187 mg/dl\nBWP: 0.66U'); done(); @@ -240,11 +239,10 @@ describe('boluswizardpreview', function ( ) { ctx.ddata.sgvs = [{mills: before, mgdl: 295}, {mills: now, mgdl: 300}]; ctx.ddata.treatments = []; ctx.ddata.profiles = [profile]; - ctx.levels = require('../lib/levels'); var sbx = prepareSandbox(); boluswizardpreview.checkNotifications(sbx); - ctx.notifications.findHighestAlarm().level.should.equal(levels.URGENT); + ctx.notifications.findHighestAlarm().level.should.equal(ctx.levels.URGENT); done(); }); @@ -285,10 +283,11 @@ describe('boluswizardpreview', function ( ) { done(); } } + , moment: helper.ctx.moment }; ctx.language = require('../lib/language')(); - var loadedProfile = require('../lib/profilefunctions')(); + var loadedProfile = require('../lib/profilefunctions')(null, ctx); loadedProfile.loadData([profile]); var data = { diff --git a/tests/cannulaage.test.js b/tests/cannulaage.test.js index b9108b044c7..5b001248020 100644 --- a/tests/cannulaage.test.js +++ b/tests/cannulaage.test.js @@ -1,16 +1,16 @@ 'use strict'; require('should'); -var levels = require('../lib/levels'); +const helper = require('./inithelper')(); +const levels = helper.ctx.levels; describe('cage', function ( ) { var env = require('../lib/server/env')(); - var ctx = {}; + var ctx = helper.getctx(); + ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); - ctx.language = require('../lib/language')(); - ctx.levels = levels; - + var cage = require('../lib/plugins/cannulaage')(ctx); var sandbox = require('../lib/sandbox')(ctx); function prepareSandbox ( ) { diff --git a/tests/cob.test.js b/tests/cob.test.js index 2da45861550..4b54cddb699 100644 --- a/tests/cob.test.js +++ b/tests/cob.test.js @@ -1,15 +1,12 @@ 'use strict'; const _ = require('lodash'); -const fs = require('fs'); -const language = require('../lib/language')(fs); +const helper = require('./inithelper')(); require('should'); describe('COB', function ( ) { - var ctx = {}; - ctx.settings = {}; - ctx.language = language; + var ctx = helper.ctx; var cob = require('../lib/plugins/cob')(ctx); @@ -20,7 +17,7 @@ describe('COB', function ( ) { , carbs_hr: 30 }; - var profile = require('../lib/profilefunctions')([profileData]); + var profile = require('../lib/profilefunctions')([profileData], ctx); it('should calculate IOB, multiple treatments', function() { diff --git a/tests/fixtures/api3/authSubject.js b/tests/fixtures/api3/authSubject.js index b81272c3696..5d0385477a1 100644 --- a/tests/fixtures/api3/authSubject.js +++ b/tests/fixtures/api3/authSubject.js @@ -1,6 +1,9 @@ 'use strict'; -const _ = require('lodash'); +const _ = require('lodash') + , request = require('supertest') + ; +require('should'); function createRole (authStorage, name, permissions) { @@ -57,7 +60,37 @@ function createTestSubject (authStorage, subjectName, roles) { } -async function authSubject (authStorage) { +async function initJwts (accessToken, tokensNeeded, app) { + const jwt = {} + if (!_.isArray(tokensNeeded) || !app) + return jwt; + + for (const tokenNeeded of tokensNeeded) { + jwt[tokenNeeded] = await new Promise((resolve, reject) => { + try { + const authToken = accessToken[tokenNeeded]; + + request(app) + .get(`/api/v2/authorization/request/${authToken}`) + .expect(200) + .end(function(err, res) { + if (err) + reject(err); + + resolve(res.body.token); + }); + } + catch (e) { + reject(e) + } + }) + } + + return jwt; +} + + +async function authSubject (authStorage, tokensNeeded, app) { await createRole(authStorage, 'admin', '*'); await createRole(authStorage, 'readable', '*:*:read'); @@ -67,6 +100,7 @@ async function authSubject (authStorage) { await createRole(authStorage, 'apiRead', 'api:*:read'); await createRole(authStorage, 'apiUpdate', 'api:*:update'); await createRole(authStorage, 'apiDelete', 'api:*:delete'); + await createRole(authStorage, 'noneRole', ''); const subject = { apiAll: await createTestSubject(authStorage, 'apiAll', ['apiAll']), @@ -77,10 +111,12 @@ async function authSubject (authStorage) { apiDelete: await createTestSubject(authStorage, 'apiDelete', ['apiDelete']), admin: await createTestSubject(authStorage, 'admin', ['admin']), readable: await createTestSubject(authStorage, 'readable', ['readable']), - denied: await createTestSubject(authStorage, 'denied', ['denied']) + denied: await createTestSubject(authStorage, 'denied', ['denied']), + noneSubject: await createTestSubject(authStorage, 'noneSubject', null), + noneRole: await createTestSubject(authStorage, 'noneRole', ['noneRole']) }; - const token = { + const accessToken = { all: subject.apiAll.accessToken, admin: subject.apiAdmin.accessToken, create: subject.apiCreate.accessToken, @@ -89,10 +125,14 @@ async function authSubject (authStorage) { delete: subject.apiDelete.accessToken, denied: subject.denied.accessToken, adminAll: subject.admin.accessToken, - readable: subject.readable.accessToken + readable: subject.readable.accessToken, + noneSubject: subject.noneSubject.accessToken, + noneRole: subject.noneRole.accessToken }; - return {subject, token}; + const jwt = await initJwts(accessToken, tokensNeeded, app); + + return {subject, accessToken, jwt}; } -module.exports = authSubject; \ No newline at end of file +module.exports = authSubject; diff --git a/tests/fixtures/api3/instance.js b/tests/fixtures/api3/instance.js index 358b42bb2c2..cbeaf6f97d0 100644 --- a/tests/fixtures/api3/instance.js +++ b/tests/fixtures/api3/instance.js @@ -41,17 +41,24 @@ function configure () { }; + function addJwt (req, jwt) { + return jwt + ? req.set('Authorization', `Bearer ${jwt}`) + : req; + } + + self.addSecuredOperations = function addSecuredOperations (instance) { - instance.get = (url) => request(instance.baseUrl).get(url); + instance.get = (url, jwt) => addJwt(request(instance.baseUrl).get(url), jwt); - instance.post = (url) => request(instance.baseUrl).post(url); + instance.post = (url, jwt) => addJwt(request(instance.baseUrl).post(url), jwt); - instance.put = (url) => request(instance.baseUrl).put(url); + instance.put = (url, jwt) => addJwt(request(instance.baseUrl).put(url), jwt); - instance.patch = (url) => request(instance.baseUrl).patch(url); + instance.patch = (url, jwt) => addJwt(request(instance.baseUrl).patch(url), jwt); - instance.delete = (url) => request(instance.baseUrl).delete(url); + instance.delete = (url, jwt) => addJwt(request(instance.baseUrl).delete(url), jwt); }; @@ -122,6 +129,7 @@ function configure () { } instance.app.use('/api/v3', instance.ctx.apiApp); + instance.app.use('/api/v2/authorization', instance.ctx.authorization.endpoints); const transport = useHttps ? https : http; diff --git a/tests/fixtures/headless.js b/tests/fixtures/headless.js index a3ad66b2424..310566e6132 100644 --- a/tests/fixtures/headless.js +++ b/tests/fixtures/headless.js @@ -25,7 +25,7 @@ function headless (benv, binding) { console.log('Setting up benv', Date.now() - t); - benv.require(__dirname + '/../../tmp/public/js/bundle.app.js'); + benv.require(__dirname + '/../../node_modules/.cache/_ns_cache/public/js/bundle.app.js'); console.log('Bundle loaded', Date.now() - t); diff --git a/tests/inithelper.js b/tests/inithelper.js new file mode 100644 index 00000000000..c4de997c5fc --- /dev/null +++ b/tests/inithelper.js @@ -0,0 +1,24 @@ + +const fs = require('fs'); +const moment = require('moment-timezone'); +const language = require('../lib/language')(fs); +const settings = require('../lib/settings')(); +const levels = require('../lib/levels'); + +function helper() { + + helper.ctx = { + language: language + , settings: settings + , levels: levels + , moment: moment + }; + + helper.getctx = function getctx () { + return helper.ctx; + } + + return helper; +} + +module.exports = helper; diff --git a/tests/insulinage.test.js b/tests/insulinage.test.js index b21b54c011d..8fcb7e484b6 100644 --- a/tests/insulinage.test.js +++ b/tests/insulinage.test.js @@ -1,15 +1,14 @@ 'use strict'; require('should'); -var levels = require('../lib/levels'); +const helper = require('./inithelper')(); +const levels = helper.ctx.levels; describe('insulinage', function ( ) { var env = require('../lib/server/env')(); - var ctx = {}; - ctx.levels = levels; + var ctx = helper.getctx(); ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); - ctx.language = require('../lib/language')(); var iage = require('../lib/plugins/insulinage')(ctx); var sandbox = require('../lib/sandbox')(ctx); diff --git a/tests/iob.test.js b/tests/iob.test.js index b44099488c4..705c9efc992 100644 --- a/tests/iob.test.js +++ b/tests/iob.test.js @@ -2,11 +2,12 @@ const _ = require('lodash'); const should = require('should'); -const fs = require('fs'); +const helper = require('./inithelper')(); describe('IOB', function() { - var ctx = {}; - ctx.language = require('../lib/language')(fs); + + let ctx = helper.ctx; + ctx.settings = require('../lib/settings')(); var iob = require('../lib/plugins/iob')(ctx); @@ -55,7 +56,7 @@ describe('IOB', function() { dia: 3, sens: 0}; - var profile = require('../lib/profilefunctions')([profileData]); + var profile = require('../lib/profilefunctions')([profileData], ctx); var rightAfterBolus = iob.calcTotal(treatments, [], profile, time); @@ -113,8 +114,7 @@ describe('IOB', function() { dia: 4, sens: 0}; - var profile = require('../lib/profilefunctions')([profileData]); - + var profile = require('../lib/profilefunctions')([profileData], ctx); var rightAfterBolus = iob.calcTotal(treatments, [], profile, time); @@ -140,7 +140,7 @@ describe('IOB', function() { describe('from devicestatus', function () { var time = Date.now(); - var profile = require('../lib/profilefunctions')([{ dia: 3, sens: 0 }]); + var profile = require('../lib/profilefunctions')([{ dia: 3, sens: 0 }], ctx); var treatments = [{ mills: time - 1, insulin: '3.00' diff --git a/tests/loop.test.js b/tests/loop.test.js index 64f5bc81148..51d1c39338d 100644 --- a/tests/loop.test.js +++ b/tests/loop.test.js @@ -2,17 +2,12 @@ const _ = require('lodash'); const should = require('should'); -const moment = require('moment'); -const fs = require('fs'); -const language = require('../lib/language')(fs); -const levels = require('../lib/levels'); - -var ctx_top = { - language: language - , settings: require('../lib/settings')() - , levels: levels -}; +const helper = require('./inithelper')(); + +var ctx_top = helper.getctx(); ctx_top.language.set('en'); +const language = ctx_top.language; + var env = require('../lib/server/env')(); var loop = require('../lib/plugins/loop')(ctx_top); var sandbox = require('../lib/sandbox')(ctx_top); @@ -107,10 +102,10 @@ var statuses = [ } ]; -var now = moment(statuses[0].created_at); +var now = ctx_top.moment(statuses[0].created_at); _.forEach(statuses, function updateMills (status) { - status.mills = moment(status.created_at).valueOf(); + status.mills = ctx_top.moment(status.created_at).valueOf(); }); describe('loop', function ( ) { @@ -174,7 +169,7 @@ describe('loop', function ( ) { language: language }; - var errorTime = moment(statuses[1].created_at); + var errorTime = ctx_top.moment(statuses[1].created_at); var sbx = sandbox.clientInit(ctx, errorTime.valueOf(), {devicestatus: statuses}); @@ -242,7 +237,7 @@ describe('loop', function ( ) { loop.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm('Loop'); - highest.level.should.equal(levels.URGENT); + highest.level.should.equal(ctx_top.levels.URGENT); highest.title.should.equal('Loop isn\'t looping'); done(); }); diff --git a/tests/openaps-storage.test.js b/tests/openaps-storage.test.js deleted file mode 100644 index 36714181a40..00000000000 --- a/tests/openaps-storage.test.js +++ /dev/null @@ -1,115 +0,0 @@ -'use strict'; - -var should = require('should'); - -describe('openaps storage', function () { - - var env = require('../lib/server/env')(); - - - before(function (done) { - delete env.api_secret; - env.storageURI = 'openaps://../../tests/fixtures/openaps-storage/config'; - done(); - }); - - it('The module class should be OK.', function (done) { - require('../lib/storage/openaps-storage')(env, function callback (err, storage) { - should.not.exist(err); - should.exist(storage.collection); - should.exist(storage.ensureIndexes); - done(); - }); - }); - - it('find sgv entries', function (done) { - require('../lib/storage/openaps-storage')(env, function callback (err, storage) { - should.not.exist(err); - should.exist(storage.collection); - - storage.collection('entries').find({type: 'sgv'}).toArray(function callback (err, results) { - should.not.exist(err); - should.exist(results); - - results.length.should.equal(4); - results[0].sgv.should.equal(102); - - done(); - }); - }); - }); - - it('find cal entries', function (done) { - require('../lib/storage/openaps-storage')(env, function callback (err, storage) { - should.not.exist(err); - should.exist(storage.collection); - - storage.collection('entries').find({type: 'cal'}).toArray(function callback (err, results) { - should.not.exist(err); - should.exist(results); - - results.length.should.equal(1); - results[0].slope.should.equal(841.6474113376482); - - done(); - }); - }); - }); - - it('find devicestatus entries', function (done) { - require('../lib/storage/openaps-storage')(env, function callback (err, storage) { - should.not.exist(err); - should.exist(storage.collection); - - storage.collection('devicestatus').find({}).toArray(function callback (err, results) { - should.not.exist(err); - should.exist(results); - - results.length.should.equal(1); - results[0].openaps.enacted.eventualBG.should.equal(82); - - done(); - }); - }); - }); - - it('find treatments', function (done) { - require('../lib/storage/openaps-storage')(env, function callback (err, storage) { - should.not.exist(err); - should.exist(storage.collection); - - storage.collection('treatments').find({}).toArray(function callback (err, results) { - should.not.exist(err); - should.exist(results); - - results.length.should.equal(2); - results[0].eventType.should.equal('Temp Basal'); - - done(); - }); - }); - }); - - it('When no connection-string is given the storage-class should throw an error.', function (done) { - delete env.storageURI; - should.not.exist(env.storageURI); - - (function () { - return require('../lib/storage/openaps-storage')(env); - }).should.throw('openaps config uri is missing or invalid'); - - done(); - }); - - it('An invalid connection-string should throw an error.', function (done) { - env.storageURI = 'This is not an openaps config path'; - - (function () { - return require('../lib/storage/openaps-storage')(env); - }).should.throw(Error); - - done(); - }); - -}); - diff --git a/tests/openaps.test.js b/tests/openaps.test.js index 1e31e934016..ce5d5306fe7 100644 --- a/tests/openaps.test.js +++ b/tests/openaps.test.js @@ -2,18 +2,14 @@ const _ = require('lodash'); const should = require('should'); -const moment = require('moment'); -const fs = require('fs'); -const language = require('../lib/language')(fs); +const helper = require('./inithelper')(); -var top_ctx = { - language: language - , settings: require('../lib/settings')() -}; +var top_ctx = helper.getctx(); top_ctx.language.set('en'); -var levels = require('../lib/levels'); -top_ctx.levels = levels; +const language = top_ctx.language; +const levels = top_ctx.levels; + var env = require('../lib/server/env')(); var openaps = require('../lib/plugins/openaps')(top_ctx); var sandbox = require('../lib/sandbox')(top_ctx); @@ -247,10 +243,10 @@ var statuses = [{ "created_at": "2017-09-05T19:19:39.899Z" }]; -var now = moment(statuses[0].created_at); +var now = top_ctx.moment(statuses[0].created_at); _.forEach(statuses, function updateMills (status) { - status.mills = moment(status.created_at).valueOf(); + status.mills = top_ctx.moment(status.created_at).valueOf(); }); describe('openaps', function ( ) { diff --git a/tests/profile.test.js b/tests/profile.test.js index 5928ccd2618..58de12cea2c 100644 --- a/tests/profile.test.js +++ b/tests/profile.test.js @@ -1,9 +1,11 @@ var should = require('should'); -var moment = require('moment-timezone'); +const helper = require('./inithelper')(); +const moment = helper.ctx.moment; describe('Profile', function ( ) { - var profile_empty = require('../lib/profilefunctions')(); + + var profile_empty = require('../lib/profilefunctions')(null, helper.ctx); beforeEach(function() { profile_empty.clear(); @@ -33,7 +35,7 @@ describe('Profile', function ( ) { , 'target_high': 120 }; - var profile = require('../lib/profilefunctions')([profileData]); + var profile = require('../lib/profilefunctions')([profileData],helper.ctx); var now = Date.now(); it('should know what the DIA is with old style profiles', function() { @@ -73,7 +75,7 @@ describe('Profile', function ( ) { it('should know how to reload data and still know what the low target is with old style profiles', function() { - var profile2 = require('../lib/profilefunctions')([profileData]); + var profile2 = require('../lib/profilefunctions')([profileData], helper.ctx); var profileData2 = { 'dia': 3, 'carbs_hr': 30, @@ -157,7 +159,7 @@ describe('Profile', function ( ) { 'units': 'mmol' }; - var complexProfile = require('../lib/profilefunctions')([complexProfileData]); + var complexProfile = require('../lib/profilefunctions')([complexProfileData], helper.ctx); var noon = new Date('2015-06-22 12:00:00').getTime(); var threepm = new Date('2015-06-22 15:00:00').getTime(); @@ -336,7 +338,7 @@ describe('Profile', function ( ) { } ]; - var multiProfile = require('../lib/profilefunctions')(multiProfileData); + var multiProfile = require('../lib/profilefunctions')(multiProfileData, helper.ctx); var noon = new Date('2015-06-22 12:00:00').getTime(); var threepm = new Date('2015-06-26 15:00:00').getTime(); diff --git a/tests/pump.test.js b/tests/pump.test.js index c2289fddd17..efe6e847dc3 100644 --- a/tests/pump.test.js +++ b/tests/pump.test.js @@ -2,19 +2,18 @@ var _ = require('lodash'); var should = require('should'); -var moment = require('moment'); -const fs = require('fs'); -const language = require('../lib/language')(fs); +const helper = require('./inithelper')(); +const moment = helper.ctx.moment; -var top_ctx = { - language: language - , settings: require('../lib/settings')() -}; +var top_ctx = helper.getctx(); +top_ctx.settings = require('../lib/settings')(); top_ctx.language.set('en'); + var env = require('../lib/server/env')(); -var levels = require('../lib/levels'); -var profile = require('../lib/profilefunctions')(); -top_ctx.levels = levels; +const levels = top_ctx.levels; +const language = top_ctx.language; + +var profile = require('../lib/profilefunctions')(null, top_ctx); var pump = require('../lib/plugins/pump')(top_ctx); var sandbox = require('../lib/sandbox')(top_ctx); @@ -93,7 +92,6 @@ var statuses2 = [{ } }]; - var now = moment(statuses[1].created_at); _.forEach(statuses, function updateMills (status) { diff --git a/tests/reports.test.js b/tests/reports.test.js index 947eb5e5b03..4e62c7de223 100644 --- a/tests/reports.test.js +++ b/tests/reports.test.js @@ -23,6 +23,8 @@ var someData = { '/api/v1/entries.json?find[date][$gte]=1439251200000&find[date][$lt]=1439337600000&count=10000': [{'_id':'55ca8c6e459cf1fa5ed71fe2','unfiltered':174080,'filtered':184576,'direction':'FortyFiveDown','device':'dexcom','rssi':169,'sgv':156,'dateString':'Tue Aug 11 16:58:32 PDT 2015','type':'sgv','date':1439337512000,'noise':1},{'_id':'55ca8b42459cf1fa5ed71fe1','unfiltered':180192,'filtered':192768,'direction':'FortyFiveDown','device':'dexcom','rssi':182,'sgv':163,'dateString':'Tue Aug 11 16:53:32 PDT 2015','type':'sgv','date':1439337212000,'noise':1}], '/api/v1/treatments.json?find[created_at][$gte]=2015-08-11T00:00:00.000Z&find[created_at][$lt]=2015-08-12T00:00:00.000Z&count=1000': [{'created_at':'2015-08-11T23:37:00.000Z','eventType':'Snack Bolus','carbs':18,'_id':'55ca8644ca3c57683d19c211'},{'enteredBy':'Mom ','eventType':'Snack Bolus','glucose':203,'glucoseType':'Sensor','insulin':1,'preBolus':15,'units':'mg/dl','created_at':'2015-08-11T23:22:00.000Z','_id':'55ca8644ca3c57683d19c210'}], '/api/v1/entries.json?find[date][$gte]=1439337600000&find[date][$lt]=1439424000000&count=10000': [{'_id':'55cbddee38a8d88ad1b48647','unfiltered':165760,'filtered':167488,'direction':'Flat','device':'dexcom','rssi':165,'sgv':157,'dateString':'Wed Aug 12 16:58:28 PDT 2015','type':'sgv','date':1439423908000,'noise':1},{'_id':'55cbdccc38a8d88ad1b48644','unfiltered':167456,'filtered':169312,'direction':'Flat','device':'dexcom','rssi':168,'sgv':159,'dateString':'Wed Aug 12 16:53:28 PDT 2015','type':'sgv','date':1439423608000,'noise':1}], + '/api/v1/treatments.json?find[created_at][$gte]=2015-08-12T00:00:00.000Z&find[created_at][$lt]=2015-08-14T23:59:59.999Z&count=1000': [{'enteredBy':'Dad','eventType':'Correction Bolus','insulin':0.8,'created_at':'2015-08-12T23:21:08.907Z','_id':'55cbd4e47e726599048a3f91'},{'enteredBy':'Dad','eventType':'Note','notes':'Milk now','created_at':'2015-08-12T21:23:00.000Z','_id':'55cbba4e7e726599048a3f79'}], + '/api/v1/treatments.json?find[created_at][$gte]=2015-08-12T00:00:00.000Z&find[created_at][$lt]=2015-08-13T00:00:00.000Z&count=1000': [{'enteredBy':'Dad','eventType':'Correction Bolus','insulin':0.8,'created_at':'2015-08-12T23:21:08.907Z','_id':'55cbd4e47e726599048a3f91'},{'enteredBy':'Dad','eventType':'Note','notes':'Milk now','created_at':'2015-08-12T21:23:00.000Z','_id':'55cbba4e7e726599048a3f79'}], '/api/v1/treatments.json?find[created_at][$gte]=2015-08-12T00:00:00.000Z&find[created_at][$lt]=2015-08-13T00:00:00.000Z&count=1000': [{'enteredBy':'Dad','eventType':'Correction Bolus','insulin':0.8,'created_at':'2015-08-12T23:21:08.907Z','_id':'55cbd4e47e726599048a3f91'},{'enteredBy':'Dad','eventType':'Note','notes':'Milk now','created_at':'2015-08-12T21:23:00.000Z','_id':'55cbba4e7e726599048a3f79'}], '/api/v1/entries.json?find[date][$gte]=1439424000000&find[date][$lt]=1439510400000&count=10000': [{'_id':'55cd2f6738a8d88ad1b48ca1','unfiltered':209792,'filtered':229344,'direction':'SingleDown','device':'dexcom','rssi':436,'sgv':205,'dateString':'Thu Aug 13 16:58:24 PDT 2015','type':'sgv','date':1439510304000,'noise':1},{'_id':'55cd2e3b38a8d88ad1b48c95','unfiltered':220928,'filtered':237472,'direction':'FortyFiveDown','device':'dexcom','rssi':418,'sgv':219,'dateString':'Thu Aug 13 16:53:24 PDT 2015','type':'sgv','date':1439510004000,'noise':1}], '/api/v1/treatments.json?find[created_at][$gte]=2015-08-13T00:00:00.000Z&find[created_at][$lt]=2015-08-14T00:00:00.000Z&count=1000': [{'enteredBy':'Mom ','eventType':'Correction Bolus','glucose':250,'glucoseType':'Sensor','insulin':0.75,'units':'mg/dl','created_at':'2015-08-13T23:45:56.927Z','_id':'55cd2c3497fa97ac5d8bc53b'},{'enteredBy':'Mom ','eventType':'Correction Bolus','glucose':198,'glucoseType':'Sensor','insulin':1.1,'units':'mg/dl','created_at':'2015-08-13T23:11:00.293Z','_id':'55cd240497fa97ac5d8bc535'}], @@ -30,7 +32,74 @@ var someData = { '/api/v1/treatments.json?find[created_at][$gte]=2015-08-14T00:00:00.000Z&find[created_at][$lt]=2015-08-15T00:00:00.000Z&count=1000': [{'enteredBy':'Dad','eventType':'Site Change','glucose':268,'glucoseType':'Finger','insulin':1.75,'units':'mg/dl','created_at':'2015-08-14T00:00:00.000Z','_id':'55ce78fe925aa80e7071e5d6'},{'enteredBy':'Mom ','eventType':'Meal Bolus','glucose':89,'glucoseType':'Finger','carbs':54,'insulin':3.15,'units':'mg/dl','created_at':'2015-08-14T21:00:00.000Z','_id':'55ce59bb925aa80e7071e5ba'}], '/api/v1/entries.json?find[date][$gte]=1439596800000&find[date][$lt]=1439683200000&count=10000': [{'_id':'55cfd25f38a8d88ad1b49931','unfiltered':283136,'filtered':304768,'direction':'SingleDown','device':'dexcom','rssi':185,'sgv':306,'dateString':'Sat Aug 15 16:58:16 PDT 2015','type':'sgv','date':1439683096000,'noise':1},{'_id':'55cfd13338a8d88ad1b4992e','unfiltered':302528,'filtered':312576,'direction':'FortyFiveDown','device':'dexcom','rssi':179,'sgv':329,'dateString':'Sat Aug 15 16:53:16 PDT 2015','type':'sgv','date':1439682796000,'noise':1}], '/api/v1/food/regular.json': [{'_id':'552ece84a6947ea011db35bb','type':'food','category':'Zakladni','subcategory':'Sladkosti','name':'Bebe male','portion':18,'carbs':12,'gi':1,'unit':'pcs','created_at':'2015-04-15T20:48:04.966Z'}], - '/api/v1/treatments.json?find[eventType]=/BG Check/i&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.000Z': [ + + '/api/v1/treatments.json?find[eventType]=/BG Check/i&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-08T23:59:59.999Z': [ + {'created_at':'2015-08-08T00:00:00.000Z'}, + {'created_at':'2015-08-09T00:00:00.000Z'}, + {'created_at':'2015-08-10T00:00:00.000Z'}, + {'created_at':'2015-08-11T00:00:00.000Z'}, + {'created_at':'2015-08-12T00:00:00.000Z'}, + {'created_at':'2015-08-13T00:00:00.000Z'}, + {'created_at':'2015-08-14T00:00:00.000Z'}, + {'created_at':'2015-08-15T00:00:00.000Z'}, + {'created_at':'2015-08-16T00:00:00.000Z'}, + {'created_at':'2015-08-17T00:00:00.000Z'}, + {'created_at':'2015-08-18T00:00:00.000Z'}, + {'created_at':'2015-08-19T00:00:00.000Z'}, + {'created_at':'2015-08-20T00:00:00.000Z'}, + {'created_at':'2015-08-21T00:00:00.000Z'}, + {'created_at':'2015-08-22T00:00:00.000Z'}, + {'created_at':'2015-08-23T00:00:00.000Z'}, + {'created_at':'2015-08-24T00:00:00.000Z'}, + {'created_at':'2015-08-25T00:00:00.000Z'}, + {'created_at':'2015-08-26T00:00:00.000Z'}, + {'created_at':'2015-08-27T00:00:00.000Z'}, + {'created_at':'2015-08-28T00:00:00.000Z'}, + {'created_at':'2015-08-29T00:00:00.000Z'}, + {'created_at':'2015-08-30T00:00:00.000Z'}, + {'created_at':'2015-08-31T00:00:00.000Z'}, + {'created_at':'2015-09-01T00:00:00.000Z'}, + {'created_at':'2015-09-02T00:00:00.000Z'}, + {'created_at':'2015-09-03T00:00:00.000Z'}, + {'created_at':'2015-09-04T00:00:00.000Z'}, + {'created_at':'2015-09-05T00:00:00.000Z'}, + {'created_at':'2015-09-06T00:00:00.000Z'}, + {'created_at':'2015-09-07T00:00:00.000Z'} + ], + '/api/v1/treatments.json?find[eventType]=/BG Check/i&find[created_at][$gte]=2015-08-07T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.999Z': [ + {'created_at':'2015-08-08T00:00:00.000Z'}, + {'created_at':'2015-08-09T00:00:00.000Z'}, + {'created_at':'2015-08-10T00:00:00.000Z'}, + {'created_at':'2015-08-11T00:00:00.000Z'}, + {'created_at':'2015-08-12T00:00:00.000Z'}, + {'created_at':'2015-08-13T00:00:00.000Z'}, + {'created_at':'2015-08-14T00:00:00.000Z'}, + {'created_at':'2015-08-15T00:00:00.000Z'}, + {'created_at':'2015-08-16T00:00:00.000Z'}, + {'created_at':'2015-08-17T00:00:00.000Z'}, + {'created_at':'2015-08-18T00:00:00.000Z'}, + {'created_at':'2015-08-19T00:00:00.000Z'}, + {'created_at':'2015-08-20T00:00:00.000Z'}, + {'created_at':'2015-08-21T00:00:00.000Z'}, + {'created_at':'2015-08-22T00:00:00.000Z'}, + {'created_at':'2015-08-23T00:00:00.000Z'}, + {'created_at':'2015-08-24T00:00:00.000Z'}, + {'created_at':'2015-08-25T00:00:00.000Z'}, + {'created_at':'2015-08-26T00:00:00.000Z'}, + {'created_at':'2015-08-27T00:00:00.000Z'}, + {'created_at':'2015-08-28T00:00:00.000Z'}, + {'created_at':'2015-08-29T00:00:00.000Z'}, + {'created_at':'2015-08-30T00:00:00.000Z'}, + {'created_at':'2015-08-31T00:00:00.000Z'}, + {'created_at':'2015-09-01T00:00:00.000Z'}, + {'created_at':'2015-09-02T00:00:00.000Z'}, + {'created_at':'2015-09-03T00:00:00.000Z'}, + {'created_at':'2015-09-04T00:00:00.000Z'}, + {'created_at':'2015-09-05T00:00:00.000Z'}, + {'created_at':'2015-09-06T00:00:00.000Z'}, + {'created_at':'2015-09-07T00:00:00.000Z'} + ], + '/api/v1/treatments.json?find[eventType]=/BG Check/i&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.999Z': [ {'created_at':'2015-08-08T00:00:00.000Z'}, {'created_at':'2015-08-09T00:00:00.000Z'}, {'created_at':'2015-08-10T00:00:00.000Z'}, @@ -63,7 +132,8 @@ var someData = { {'created_at':'2015-09-06T00:00:00.000Z'}, {'created_at':'2015-09-07T00:00:00.000Z'} ], - '/api/v1/treatments.json?find[notes]=/something/i&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.000Z': [ + + '/api/v1/treatments.json?find[notes]=/something/i&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-08T23:59:59.999Z': [ {'created_at':'2015-08-08T00:00:00.000Z'}, {'created_at':'2015-08-09T00:00:00.000Z'}, {'created_at':'2015-08-10T00:00:00.000Z'}, @@ -96,7 +166,90 @@ var someData = { {'created_at':'2015-09-06T00:00:00.000Z'}, {'created_at':'2015-09-07T00:00:00.000Z'} ], - '/api/v1/devicestatus.json&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.000Z?find[openaps][$exists]=true&count=1000': [ + '/api/v1/treatments.json?find[notes]=/something/i&find[created_at][$gte]=2015-08-07T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.999Z': [ + {'created_at':'2015-08-08T00:00:00.000Z'}, + {'created_at':'2015-08-09T00:00:00.000Z'}, + {'created_at':'2015-08-10T00:00:00.000Z'}, + {'created_at':'2015-08-11T00:00:00.000Z'}, + {'created_at':'2015-08-12T00:00:00.000Z'}, + {'created_at':'2015-08-13T00:00:00.000Z'}, + {'created_at':'2015-08-14T00:00:00.000Z'}, + {'created_at':'2015-08-15T00:00:00.000Z'}, + {'created_at':'2015-08-16T00:00:00.000Z'}, + {'created_at':'2015-08-17T00:00:00.000Z'}, + {'created_at':'2015-08-18T00:00:00.000Z'}, + {'created_at':'2015-08-19T00:00:00.000Z'}, + {'created_at':'2015-08-20T00:00:00.000Z'}, + {'created_at':'2015-08-21T00:00:00.000Z'}, + {'created_at':'2015-08-22T00:00:00.000Z'}, + {'created_at':'2015-08-23T00:00:00.000Z'}, + {'created_at':'2015-08-24T00:00:00.000Z'}, + {'created_at':'2015-08-25T00:00:00.000Z'}, + {'created_at':'2015-08-26T00:00:00.000Z'}, + {'created_at':'2015-08-27T00:00:00.000Z'}, + {'created_at':'2015-08-28T00:00:00.000Z'}, + {'created_at':'2015-08-29T00:00:00.000Z'}, + {'created_at':'2015-08-30T00:00:00.000Z'}, + {'created_at':'2015-08-31T00:00:00.000Z'}, + {'created_at':'2015-09-01T00:00:00.000Z'}, + {'created_at':'2015-09-02T00:00:00.000Z'}, + {'created_at':'2015-09-03T00:00:00.000Z'}, + {'created_at':'2015-09-04T00:00:00.000Z'}, + {'created_at':'2015-09-05T00:00:00.000Z'}, + {'created_at':'2015-09-06T00:00:00.000Z'}, + {'created_at':'2015-09-07T00:00:00.000Z'} + ], + '/api/v1/treatments.json?find[notes]=/something/i&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.999Z': [ + {'created_at':'2015-08-08T00:00:00.000Z'}, + {'created_at':'2015-08-09T00:00:00.000Z'}, + {'created_at':'2015-08-10T00:00:00.000Z'}, + {'created_at':'2015-08-11T00:00:00.000Z'}, + {'created_at':'2015-08-12T00:00:00.000Z'}, + {'created_at':'2015-08-13T00:00:00.000Z'}, + {'created_at':'2015-08-14T00:00:00.000Z'}, + {'created_at':'2015-08-15T00:00:00.000Z'}, + {'created_at':'2015-08-16T00:00:00.000Z'}, + {'created_at':'2015-08-17T00:00:00.000Z'}, + {'created_at':'2015-08-18T00:00:00.000Z'}, + {'created_at':'2015-08-19T00:00:00.000Z'}, + {'created_at':'2015-08-20T00:00:00.000Z'}, + {'created_at':'2015-08-21T00:00:00.000Z'}, + {'created_at':'2015-08-22T00:00:00.000Z'}, + {'created_at':'2015-08-23T00:00:00.000Z'}, + {'created_at':'2015-08-24T00:00:00.000Z'}, + {'created_at':'2015-08-25T00:00:00.000Z'}, + {'created_at':'2015-08-26T00:00:00.000Z'}, + {'created_at':'2015-08-27T00:00:00.000Z'}, + {'created_at':'2015-08-28T00:00:00.000Z'}, + {'created_at':'2015-08-29T00:00:00.000Z'}, + {'created_at':'2015-08-30T00:00:00.000Z'}, + {'created_at':'2015-08-31T00:00:00.000Z'}, + {'created_at':'2015-09-01T00:00:00.000Z'}, + {'created_at':'2015-09-02T00:00:00.000Z'}, + {'created_at':'2015-09-03T00:00:00.000Z'}, + {'created_at':'2015-09-04T00:00:00.000Z'}, + {'created_at':'2015-09-05T00:00:00.000Z'}, + {'created_at':'2015-09-06T00:00:00.000Z'}, + {'created_at':'2015-09-07T00:00:00.000Z'} + ], + + '/api/v1/devicestatus.json&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-08T23:59:59.999Z?find[openaps][$exists]=true&count=1000': [ + { + 'openaps': { + 'suggested': { + 'temp': 'absolute', + 'bg': 67, + 'tick': '+6', + 'eventualBG': 145, + 'snoozeBG': 145, + 'reason': 'BG 67<74.5, delta 6>0; no high-temp to cancel', + 'timestamp': '2015-08-31T00:00:00.000Z' + } + }, + 'created_at': '2015-08-31T00:00:00.000Z' + } + ], + '/api/v1/devicestatus.json&find[created_at][$gte]=2015-08-08T00:00:00.000Z&find[created_at][$lt]=2015-09-07T23:59:59.999Z?find[openaps][$exists]=true&count=1000': [ { 'openaps': { 'suggested': { diff --git a/tests/sensorage.test.js b/tests/sensorage.test.js index 11a6953cb37..7b102827e3e 100644 --- a/tests/sensorage.test.js +++ b/tests/sensorage.test.js @@ -2,15 +2,13 @@ var should = require('should'); var times = require('../lib/times'); -var levels = require('../lib/levels'); +const helper = require('./inithelper')(); describe('sage', function ( ) { var env = require('../lib/server/env')(); - var ctx = {}; - ctx.levels = levels; + var ctx = helper.getctx(); ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); - ctx.language = require('../lib/language')(); var sage = require('../lib/plugins/sensorage')(ctx); var sandbox = require('../lib/sandbox')(); @@ -152,7 +150,7 @@ describe('sage', function ( ) { sage.checkNotifications(sbx); var highest = ctx.notifications.findHighestAlarm('SAGE'); - highest.level.should.equal(levels.URGENT); + highest.level.should.equal(ctx.levels.URGENT); highest.title.should.equal('Sensor age 6 days 22 hours'); done(); }); diff --git a/tests/utils.test.js b/tests/utils.test.js index c6138f47491..068e1ab2a45 100644 --- a/tests/utils.test.js +++ b/tests/utils.test.js @@ -2,14 +2,18 @@ require('should'); +const helper = require('./inithelper')(); + describe('utils', function ( ) { - var utils = require('../lib/utils')({ - language: require('../lib/language')() - , settings: { - alarmTimeagoUrgentMins: 30 - , alarmTimeagoWarnMins: 15 - } - }); + + const ctx = helper.getctx(); + + ctx.settings = { + alarmTimeagoUrgentMins: 30 + , alarmTimeagoWarnMins: 15 + }; + + var utils = require('../lib/utils')(ctx); it('format numbers', function () { utils.toFixed(5.499999999).should.equal('5.50'); diff --git a/translations/ar_SA.json b/translations/ar_SA.json index e3a567f35eb..9f6a5432cb1 100644 --- a/translations/ar_SA.json +++ b/translations/ar_SA.json @@ -136,8 +136,8 @@ "or": "أو", "Add from database": "أضف من قاعدة البيانات", "Use carbs correction in calculation": "استخدم تصحيح الكربوهيدرات في الحساب", - "Use COB correction in calculation": "استخدم تصحيح الكربوهيدرات الظاهرة على الشاشة في الحساب", - "Use IOB in calculation": "استخدم الإنسولين الظاهر على الشاشة في الحساب", + "Use COB correction in calculation": "استخدم تصحيح الكربوهيدرات النشط في الحساب", + "Use IOB in calculation": "استخدم الإنسولين النشط في الحساب", "Other correction": "تصحيحات أخرى", "Rounding": "تقريبًا", "Enter insulin correction in treatment": "ادخل تصحيح الإنسولين في المعالجة", @@ -181,8 +181,8 @@ "Linear": "خطي", "Logarithmic": "لوغاريتمي", "Logarithmic (Dynamic)": "لوغاريتمي (ديناميكي)", - "Insulin-on-Board": "الإنسولين الظاهر على الشاشة", - "Carbs-on-Board": "الكربوهيدرات الظاهرة على الشاشة", + "Insulin-on-Board": "الإنسولين النشط", + "Carbs-on-Board": "الكربوهيدرات النشط", "Bolus Wizard Preview": "عرض الجرعة المعالجة", "Value Loaded": "تم تحميل القيمة", "Cannula Age": "عمر الكانيولا", @@ -360,7 +360,7 @@ "Insulin Sensitivity Factor (ISF)": "عامل حساسية الأنسولين", "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "مـليجرام/ديسيلتر أو ملي مول/لتر. نسبة تغير مستوى السكر في الدم مع كل وحدة من الأنسولين المصحح.", "Carbs activity / absorption rate": "نشاط الكربوهيدرات/ معدل الامتصاص", - "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "غرام لكل وحدة زمنية. يمثل كلاً من التغيير في الكربوهيدرات الظاهرة على الشاشة لكل وحدة زمنية، بالإضافة إلى كمية الكربوهيدرات التي يجب أن تصبح فعالة خلال ذلك الوقت. منحنيات امتصاص/ نشاط الكربوهيدرات غير مفهومة جيدًا مقارنة بنشاط الأنسولين، ولكن يمكن تقريبها باستخدام تأخير مبدأي متبوعًا بمعدل امتصاص ثابت (جم/ ساعة).", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "غرام لكل وحدة زمنية. يمثل كلاً من التغيير في الكربوهيدرات النشط لكل وحدة زمنية، بالإضافة إلى كمية الكربوهيدرات التي يجب أن تصبح فعالة خلال ذلك الوقت. منحنيات امتصاص/ نشاط الكربوهيدرات غير مفهومة جيدًا مقارنة بنشاط الأنسولين، ولكن يمكن تقريبها باستخدام تأخير مبدأي متبوعًا بمعدل امتصاص ثابت (جم/ ساعة).", "Basal rates [unit/hour]": "المعدلات القاعدية (وحدة/ ساعة)", "Target BG range [mg/dL,mmol/L]": "نطاق سكر الدم المستهدف (ملجم/ ديسيلتر، مليمول/ لتر)", "Start of record validity": "بداية صلاحية السجل", @@ -470,17 +470,17 @@ "Warning": "تحذير", "Info": "معلومات", "Lowest": "الأقل", - "Snoozing high alarm since there is enough IOB": "غفوة التنبيه العالي نظرًا لكفاية الأنسولين الظاهر علي الشاشة", + "Snoozing high alarm since there is enough IOB": "غفوة التنبيه العالي نظرًا لكفاية الأنسولين النشط", "Check BG, time to bolus?": "التحقق من سكر الدم، وقت الجرعة؟", "Notice": "ملاحظة", "required info missing": "المعلومات المطلوبة مفقودة", - "Insulin on Board": "الأنسولين الظاهر علي الشاشة", + "Insulin on Board": "الأنسولين النشط", "Current target": "الهدف الحالي", "Expected effect": "التأثير المتوقع", "Expected outcome": "النتيجة المتوقعة", "Carb Equivalent": "مكافئ الكربوهيدرات", "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "مكافئ الأنسولين الزائد %1U أكثر منه الاحتياج المطلوب للوصول إلى الهدف الأدني، دون احتساب الكربوهيدرات", - "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "يعادل الأنسولين الزائد %1 أكثر من المطلوب للوصول إلى الهدف المنخفض، تأكد من تغطية الإنسولين الظاهر على الشاشة من خلال الكربوهيدرات", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "يعادل الأنسولين الزائد %1 أكثر من المطلوب للوصول إلى الهدف المنخفض، تأكد من تغطية الإنسولين النشط من خلال الكربوهيدرات", "%1U reduction needed in active insulin to reach low target, too much basal?": "مطلوب تقليل %1 من الأنسولين النشط للوصول إلى الهدف المنخفض، والكثير من القاعدي؟", "basal adjustment out of range, give carbs?": "التعديل القاعدي خارج النطاق، منح الكربوهيدرات؟", "basal adjustment out of range, give bolus?": "التعديل القاعدي خارج النطاق، منح الجرعة؟", @@ -500,7 +500,7 @@ "Cannula age %1 hours": "عمر القنية الطبية هو %1 ساعة", "Inserted": "مدخلة", "CAGE": "صندوق", - "COB": "الكربوهيدرات الظاهرة على الشاشة", + "COB": "الكربوهيدرات النشط", "Last Carbs": "أخيرًا الكربوهيدرات", "IAGE": "الساعة العمرية", "Insulin reservoir change overdue!": "لقد فات موعد تغيير خزان الأنسولين", @@ -508,10 +508,10 @@ "Change insulin reservoir soon": "اقترب موعد تغيير خزان الأنسولين", "Insulin reservoir age %1 hours": "عمر خزان الأنسولين %1 ساعة", "Changed": "تم التغيير", - "IOB": "الإنسولين الظاهر على الشاشة", - "Careportal IOB": "بوابة رعاية الإنسولين الظاهر على الشاشة", + "IOB": "الإنسولين النشط", + "Careportal IOB": "بوابة رعاية الإنسولين النشط", "Last Bolus": "الحرعة الأخيرة", - "Basal IOB": "الإنسولين الأساسي الظاهر على الشاشة", + "Basal IOB": "الإنسولين الأساسي النشط", "Source": "مصدر", "Stale data, check rig?": "بيانات قديمة، تحقق من الجهاز؟", "Last received:": "آخر استلام:", @@ -557,8 +557,8 @@ "virtAsstUnknown": "هذه القيمة غير معروفة في الوقت الحالي. يرجى الاطلاع على موقع نايتسكوت الخاص بك لمزيد من التفاصيل.", "virtAsstTitleAR2Forecast": "توقعات AR2", "virtAsstTitleCurrentBasal": "القاعدي الحالي", - "virtAsstTitleCurrentCOB": "الكربوهيدرات الظاهرة على الشاشة في الوقت الحالي", - "virtAsstTitleCurrentIOB": "الإنسولين الظاهر على الشاشة في الوقت الحالي", + "virtAsstTitleCurrentCOB": "الكربوهيدرات النشط في الوقت الحالي", + "virtAsstTitleCurrentIOB": "الإنسولين النشط في الوقت الحالي", "virtAsstTitleLaunch": "مرحبًا بك في نايت سكاوت", "virtAsstTitleLoopForecast": "إجمالي حلقة التوقعات", "virtAsstTitleLastLoop": "آخر حلقة", @@ -579,8 +579,8 @@ "virtAsstStatus": "%1 و%2 اعتبارًا من %3.", "virtAsstBasal": "%1 القاعدي الحالي هو %2 وحدة في الساعة", "virtAsstBasalTemp": "%1 درجة الحرارة القاعدية من %2 وحدة في الساعة ستنتهي %3", - "virtAsstIob": "ولديك %1 من الأنسولين على الشاشة.", - "virtAsstIobIntent": "لديك %1 من الأنسولين على الشاشة", + "virtAsstIob": "ولديك %1 من الأنسولين النشط.", + "virtAsstIobIntent": "لديك %1 من الأنسولين النشط", "virtAsstIobUnits": "%1 وحدة من", "virtAsstLaunch": "ما الذي ترغب في التحقق منه في نايت سكاوت؟", "virtAsstPreamble": "الخاص بك", @@ -599,7 +599,7 @@ "virtAsstForecastUnavailable": "غير قادر على التنبؤ بالبيانات المتوفرة", "virtAsstRawBG": "Bg الخام الخاص بك هو ١٪", "virtAsstOpenAPSForecast": "مستوى السكر في الدم لمشروع نظام البنكرياس الاصطناعي المفتوح النهائي هو %1", - "virtAsstCob3person": "١٪ يحتوي على ٢٪ كربوهيدرات ظاهرة على الشاشة", + "virtAsstCob3person": "%1 يحتوي على %2 كربوهيدرات نشط", "virtAsstCob": "لديك ١٪ كربوهيدرات في جسمك", "virtAsstCGMMode": "كان وضع جهاز المراقبة المستمرة للسكر الخاص بك %1 اعتباراً من %2.", "virtAsstCGMStatus": "كانت حالة جهاز المراقبة المستمرة للسكر الخاص بك %1 اعتباراً من %2.", diff --git a/translations/bg_BG.json b/translations/bg_BG.json index 9623c18833f..e7072c68c25 100644 --- a/translations/bg_BG.json +++ b/translations/bg_BG.json @@ -223,7 +223,7 @@ "View all treatments": "Преглед на всички събития", "Enable Alarms": "Активни аларми", "Pump Battery Change": "Смяна на батерия на помпата", - "Pump Battery Age": "Pump Battery Age", + "Pump Battery Age": "Възраст на батерията на помпата", "Pump Battery Low Alarm": "Аларма за слаба батерия на помпата", "Pump Battery change overdue!": "Смяната на батерията на помпата - наложителна", "When enabled an alarm may sound.": "Когато е активирано, алармата ще има звук", @@ -677,7 +677,7 @@ "Please select a maximum of two weeks duration and click Show again.": "Моля изберете максимално 2 седмици и натиснете Покажи отново.", "Show profiles table": "Покажи таблицата с профили", "Show predictions": "Покажи прогнози", - "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Времево изместване на хранения, по-големи от %1 гр въглехидрати, консумирани между %2 и %3", "Previous": "Предишен", "Previous day": "Преден ден", "Next day": "Следващ ден", @@ -697,11 +697,11 @@ "Large Bolus Display": "Голям болусен бутон", "Bolus Display Threshold": "Отстояние на болусния бутон", "%1 U and Over": "%1 Е и повече", - "Event repeated %1 times.": "Event repeated %1 times.", - "minutes": "minutes", - "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", - "Security issue": "Security issue", - "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", - "less than 1": "less than 1", - "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." + "Event repeated %1 times.": "Събитието се повтаря %1 пъти.", + "minutes": "минути", + "Last recorded %1 %2 ago.": "Последно записано преди %1 %2.", + "Security issue": "Проблем със сигурността", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Открит е слаб API_SECRET. Моля, използвайте комбинация от малки и ГЛАВНИ букви, цифри и небуквено-цифрови знаци като !#%&/, за да намалите риска от неоторизиран достъп. Минималната дължина на API_SECRET е 12 знака.", + "less than 1": "по-малко от 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Паролите на MongoDB и API_SECRET съвпадат. Това не е добра идея. Моля, променете и двете и не използвайте повторно пароли в системата." } diff --git a/translations/de_DE.json b/translations/de_DE.json index b806590b422..c3e707f585b 100644 --- a/translations/de_DE.json +++ b/translations/de_DE.json @@ -453,7 +453,7 @@ "Basal timezone": "Basal Zeitzone", "Active profile": "Aktives Profil", "Active temp basal": "Aktive temp. Basalrate", - "Active temp basal start": "Starte aktive temp. Basalrate", + "Active temp basal start": "Start aktive temp. Basalrate", "Active temp basal duration": "Dauer aktive temp. Basalrate", "Active temp basal remaining": "Verbleibene Dauer temp. Basalrate", "Basal profile value": "Basal-Profil Wert", @@ -480,11 +480,11 @@ "Expected outcome": "Erwartetes Ergebnis", "Carb Equivalent": "Kohlenhydrat-Äquivalent", "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig, Kohlenhydrate sind unberücksichtigt", - "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig. SICHERSTELLEN, DASS IOB DURCH KOHLENHYDRATE ABGEDECKT WIRD", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Überschüssiges Insulin: %1 IE mehr als zum Erreichen der Untergrenze notwendig. SICHERSTELLEN, DASS IOB DURCH KOHLENHYDRATE ABGEDECKT WIRD", "%1U reduction needed in active insulin to reach low target, too much basal?": "Aktives Insulin um %1U reduzieren, um Untergrenze zu erreichen. Basal zu hoch?", "basal adjustment out of range, give carbs?": "Basalrate geht außerhalb des Zielbereiches. Kohlenhydrate nehmen?", "basal adjustment out of range, give bolus?": "Anpassung der Basalrate außerhalb des Zielbereichs. Bolus abgeben?", - "above high": "überhalb Obergrenze", + "above high": "oberhalb Obergrenze", "below low": "unterhalb Untergrenze", "Projected BG %1 target": "Erwarteter BZ %1", "aiming at": "angestrebt werden", @@ -504,7 +504,7 @@ "Last Carbs": "Letzte Kohlenhydrate", "IAGE": "IAGE", "Insulin reservoir change overdue!": "Ampullenwechsel überfällig!", - "Time to change insulin reservoir": "Es ist Zeit, die Ampulle zu wechseln", + "Time to change insulin reservoir": "Es ist Zeit die Ampulle zu wechseln", "Change insulin reservoir soon": "Ampulle bald wechseln", "Insulin reservoir age %1 hours": "Ampullen Alter %1 Stunden", "Changed": "Gewechselt", @@ -517,11 +517,11 @@ "Last received:": "Zuletzt empfangen:", "%1m ago": "vor %1m", "%1h ago": "vor %1h", - "%1d ago": "vor 1d", + "%1d ago": "vor %1d", "RETRO": "Rückschau", "SAGE": "SAGE", "Sensor change/restart overdue!": "Sensorwechsel/-neustart überfällig!", - "Time to change/restart sensor": "Es ist Zeit, den Sensor zu wechseln/neuzustarten", + "Time to change/restart sensor": "Es ist Zeit den Sensor zu wechseln/neuzustarten", "Change/restart sensor soon": "Sensor bald wechseln/neustarten", "Sensor age %1 days %2 hours": "Sensor Alter %1 Tage %2 Stunden", "Sensor Insert": "Sensor eingesetzt", @@ -554,7 +554,7 @@ "SingleDown": "sinkend", "DoubleDown": "schnell sinkend", "DoubleUp": "schnell steigend", - "virtAsstUnknown": "Dieser Wert ist momentan unbekannt. Prüfe deine Nightscout-Webseite für weitere Details!", + "virtAsstUnknown": "Dieser Wert ist momentan unbekannt. Prüfe Deine Nightscout-Webseite für weitere Details!", "virtAsstTitleAR2Forecast": "AR2-Vorhersage", "virtAsstTitleCurrentBasal": "Aktuelles Basalinsulin", "virtAsstTitleCurrentCOB": "Aktuelle Kohlenhydrate", @@ -579,14 +579,14 @@ "virtAsstStatus": "%1 und bis %3 %2.", "virtAsstBasal": "%1 aktuelle Basalrate ist %2 Einheiten je Stunde", "virtAsstBasalTemp": "%1 temporäre Basalrate von %2 Einheiten endet %3", - "virtAsstIob": "und du hast %1 Insulin wirkend.", + "virtAsstIob": "und Du hast %1 Insulin wirkend.", "virtAsstIobIntent": "Du hast noch %1 Insulin wirkend", "virtAsstIobUnits": "noch %1 Einheiten", "virtAsstLaunch": "Was möchtest du von Nightscout wissen?", "virtAsstPreamble": "Deine", "virtAsstPreamble3person": "%1 hat eine", "virtAsstNoInsulin": "kein", - "virtAsstUploadBattery": "Der Akku deines Uploader-Handys ist bei %1", + "virtAsstUploadBattery": "Der Akku Deines Uploader-Handys ist bei %1", "virtAsstReservoir": "Du hast %1 Einheiten übrig", "virtAsstPumpBattery": "Der Batteriestand deiner Pumpe ist bei %1 %2", "virtAsstUploaderBattery": "Der Akku deines Uploaders ist bei %1", @@ -613,7 +613,7 @@ "virtAsstDelta": "Dein Delta war %1 zwischen %2 und %3.", "virtAsstDeltaEstimated": "Dein geschätztes Delta war %1 zwischen %2 und %3.", "virtAsstUnknownIntentTitle": "Unbekanntes Vorhaben", - "virtAsstUnknownIntentText": "Tut mir leid, ich hab deine Frage nicht verstanden.", + "virtAsstUnknownIntentText": "Tut mir leid, ich hab Deine Frage nicht verstanden.", "Fat [g]": "Fett [g]", "Protein [g]": "Proteine [g]", "Energy [kJ]": "Energie [kJ]", @@ -638,8 +638,8 @@ "future": "Zukunft", "ago": "vor", "Last data received": "Zuletzt Daten empfangen", - "Clock View": "Uhr-Anzeigen", - "Protein": "Proteine", + "Clock View": "Uhr-Anzeige", + "Protein": "Protein", "Fat": "Fett", "Protein average": "Proteine Durchschnitt", "Fat average": "Fett Durchschnitt", @@ -669,12 +669,12 @@ "Check for Updates": "Nach Updates suchen", "Open Source": "Open Source", "Nightscout Info": "Nightscout Info", - "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Der Hauptzweck von Loopalyzer ist die Visualisierung der Leistung des Loop-Closed-Loop-Systems. Es kann auch mit anderen Setups funktionieren, sowohl mit geschlossener als auch mit offener Schleife und ohne Schleife. Abhängig davon, welchen Uploader Sie verwenden, wie häufig Ihre Daten erfasst und hochgeladen werden können und wie fehlende Daten nachgefüllt werden können, können einige Diagramme Lücken aufweisen oder sogar vollständig leer sein. Stellen Sie immer sicher, dass die Grafiken angemessen aussehen. Am besten sehen Sie sich einen Tag nach dem anderen an und scrollen zuerst durch einige Tage, um zu sehen.", - "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer enthält eine Zeitverschiebungsfunktion. Wenn Sie beispielsweise an einem Tag um 07:00 Uhr und am Tag nach Ihrer durchschnittlichen Blutzuckerkurve um 08:00 Uhr frühstücken, sehen diese beiden Tage höchstwahrscheinlich abgeflacht aus und zeigen nach dem Frühstück nicht die tatsächliche Reaktion. Die Zeitverschiebung berechnet die durchschnittliche Zeit, in der diese Mahlzeiten gegessen wurden, und verschiebt dann alle Daten (Kohlenhydrate, Insulin, Basal usw.) an beiden Tagen um den entsprechenden Zeitunterschied, sodass beide Mahlzeiten mit der durchschnittlichen Startzeit der Mahlzeit übereinstimmen.", - "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In diesem Beispiel werden alle Daten vom ersten Tag 30 Minuten vorwärts und alle Daten vom zweiten Tag 30 Minuten rückwärts verschoben, sodass es so aussieht, als hätten Sie an beiden Tagen um 07:30 Uhr gefrühstückt. Auf diese Weise können Sie Ihre tatsächliche durchschnittliche Blutzuckerreaktion nach einer Mahlzeit anzeigen.", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Der Hauptzweck von Loopalyzer ist die Visualisierung der Leistung des Loop-Closed-Loop-Systems. Es kann auch mit anderen Setups funktionieren, sowohl mit geschlossener als auch mit offener Loop und ohne Loop. Abhängig davon, welchen Uploader Du verwendest, wie häufig Deine Daten erfasst und hochgeladen werden können und wie fehlende Daten nachgefüllt werden können, können einige Diagramme Lücken aufweisen oder sogar vollständig leer sein. Stelle immer sicher, dass die Grafiken angemessen aussehen. Am besten sehe Dir einen Tag nach dem anderen an und scrolle zuerst durch einige Tage, um sie zu betrachten.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer enthält eine Zeitverschiebungsfunktion. Wenn Du beispielsweise an einem Tag um 07:00 Uhr und an einem anderen Tag um 08:00 Uhr frühstückst, sehen die durchschnittlichen Blutzuckerkurven beiden Tage höchstwahrscheinlich abgeflacht aus und zeigen nach dem Frühstück nicht die tatsächliche Reaktion. Die Zeitverschiebung berechnet die durchschnittliche Zeit, in der diese Mahlzeiten gegessen wurden, und verschiebt dann alle Daten (Kohlenhydrate, Insulin, Basal usw.) an beiden Tagen um den entsprechenden Zeitunterschied, sodass beide Mahlzeiten mit der durchschnittlichen Startzeit der Mahlzeit übereinstimmen.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In diesem Beispiel werden alle Daten vom ersten Tag 30 Minuten vorwärts und alle Daten vom zweiten Tag 30 Minuten rückwärts verschoben, sodass es so aussieht, als hättest Du an beiden Tagen um 07:30 Uhr gefrühstückt. Auf diese Weise kannst Du Deine tatsächliche durchschnittliche Blutzuckerreaktion nach einer Mahlzeit anzeigen.", "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Die Zeitverschiebung hebt den Zeitraum nach der durchschnittlichen Beginnzeit der Mahlzeit für die Dauer der DIA (Dauer der Insulinwirkung) grau hervor. Da alle Datenpunkte den ganzen Tag verschoben sind, sind die Kurven außerhalb des grauen Bereichs möglicherweise nicht genau.", "Note that time shift is available only when viewing multiple days.": "Beachte, dass die Zeitverschiebung nur verfügbar ist, wenn mehrere Tage angezeigt werden.", - "Please select a maximum of two weeks duration and click Show again.": "Bitte wählen Sie eine maximale Dauer von zwei Wochen aus und klicken Sie erneut auf Anzeigen.", + "Please select a maximum of two weeks duration and click Show again.": "Bitte wählen Sie eine maximale Dauer von zwei Wochen aus und klicke erneut auf Anzeigen.", "Show profiles table": "Profiltabelle anzeigen", "Show predictions": "Vorhersage anzeigen", "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Zeitverschiebung bei Mahlzeiten mit mehr als %1 g Kohlenhydraten, die zwischen %2 und %3 verzehrt werden", diff --git a/translations/el_GR.json b/translations/el_GR.json index 160cb308847..6d6fba18c14 100644 --- a/translations/el_GR.json +++ b/translations/el_GR.json @@ -617,8 +617,8 @@ "Fat [g]": "Λιπαρά [g]", "Protein [g]": "Πρωτεΐνη [g]", "Energy [kJ]": "Ενέργεια [kJ]", - "Clock Views:": "Clock Views:", - "Clock": "Clock", + "Clock Views:": "Εμφανίσεις ρολογιού:", + "Clock": "Ρολόι", "Color": "Χρώμα", "Simple": "Απλή", "TDD average": "Μέσος όρος Συνολικής πρόσληψης ημερήσιας ινσουλίνης", @@ -627,18 +627,18 @@ "Base basal average:": "Μέσος όρος βασικού ρυθμού:", "Carbs average": "Μέσος όρος υδατανθράκων", "Eating Soon": "Eating Soon", - "Last entry {0} minutes ago": "Last entry {0} minutes ago", - "change": "change", - "Speech": "Speech", - "Target Top": "Target Top", - "Target Bottom": "Target Bottom", + "Last entry {0} minutes ago": "Τελευταία καταχώρηση πριν από {0} λεπτά", + "change": "αλλαγή", + "Speech": "Εκφώνηση", + "Target Top": "Υψηλός στόχος", + "Target Bottom": "Χαμηλός στόχος", "Canceled": "Canceled", "Meter BG": "Meter BG", - "predicted": "predicted", - "future": "future", - "ago": "ago", - "Last data received": "Last data received", - "Clock View": "Clock View", + "predicted": "προβλεπόμενο", + "future": "μέλλον", + "ago": "πριν", + "Last data received": "Τελευταία λήψη δεδομένων", + "Clock View": "Εμφάνιση ρολογιού", "Protein": "Πρωτεΐνες", "Fat": "Λιπαρά", "Protein average": "Μέσος όρος πρωτεϊνών", @@ -646,30 +646,30 @@ "Total carbs": "Σύνολο υδατανθράκων", "Total protein": "Σύνολο πρωτεϊνών", "Total fat": "Σύνολο λιπαρών", - "Database Size": "Database Size", - "Database Size near its limits!": "Database Size near its limits!", - "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", - "Database file size": "Database file size", - "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", - "Data size": "Data size", - "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", - "virtAsstTitleDatabaseSize": "Database file size", + "Database Size": "Μέγεθος βάσης δεδομένων", + "Database Size near its limits!": "Μέγεθος βάσης δεδομένων κοντά στα όριά της!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Το μέγεθος της βάσης δεδομένων είναι %1 MiB από %2 MiB. Παρακαλώ δημιουργήστε αντίγραφα ασφαλείας και καθαρίστε τη!", + "Database file size": "Μέγεθος αρχείου βάσης δεδομένων", + "%1 MiB of %2 MiB (%3%)": "%1 MiB από %2 MiB (%3%)", + "Data size": "Μέγεθος δεδομένων", + "virtAsstDatabaseSize": "%1 MiB. Αυτό είναι %2% του διαθέσιμου χώρου βάσης δεδομένων.", + "virtAsstTitleDatabaseSize": "Μέγεθος αρχείου βάσης δεδομένων", "Carbs/Food/Time": "Υδατάνθρακες/Φαγητό/Χρόνος", - "You have administration messages": "You have administration messages", + "You have administration messages": "Έχετε μηνύματα διαχείρισης", "Admin messages in queue": "Διαθέσιμα μηνύματα διαχειριστή", "Queue empty": "Σειρά μηνυμάτων κενή", "There are no admin messages in queue": "Δεν υπάρχουν αδιάβαστα μηνύματα διαχείρισης", "Please sign in using the API_SECRET to see your administration messages": "Παρακαλούμε συνδεθείτε χρησιμοποιώντας το API_SECRET για να δείτε τα μηνύματα διαχείρισης", - "Reads enabled in default permissions": "Reads enabled in default permissions", - "Data reads enabled": "Data reads enabled", - "Data writes enabled": "Data writes enabled", - "Data writes not enabled": "Data writes not enabled", + "Reads enabled in default permissions": "Οι αναγνώσεις είναι ενεργοποιημένες με προεπιλεγμένα δικαιώματα", + "Data reads enabled": "Ανάγνωση δεδομένων ενεργή", + "Data writes enabled": "Εγγραφή δεδομένων ενεργή", + "Data writes not enabled": "Εγγραφή δεδομένων ανενεργή", "Color prediction lines": "Γραμμές πρόβλεψης με χρωματικό κώδικα", "Release Notes": "Σημειώσεις έκδοσης", "Check for Updates": "Έλεγχος για ενημερώσεις", "Open Source": "Ανοικτός κώδικας", "Nightscout Info": "Πληροφορίες Nightscout", - "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Ο κύριος σκοπός του Loopalyzer είναι να απεικονίσει την επίδοση του συστήματος κλειστού κυκλώματος. Μπορεί να λειτουργήσει είστε με τη λειτουργία κλειστού κυκλώματος, ανοιχτού κυκλώματος, ή και χωρίς κύκλωμα καθόλου. Ανάλογα με τον uploader που χρησιμοποιείτε, το πόσο συχνά καταγράφει και ανεβάζει τα δεδομένα σας, και το πώς μπορεί να συμπληρώσει προηγούμενα δεδομένα, ενδέχεται μερικά γραφήματα να έχουν κενά ή να είναι εντελώς άδεια. Πάντα να σιγουρεύεστε πως το γράφημα απεικονίζει λογικές πληροφορίες. Καλό θα ήταν αρχικά να κοιτάξετε δεδομένα μια μέρα τη φορά για μερικές ημέρες.", "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", @@ -678,23 +678,23 @@ "Show profiles table": "Show profiles table", "Show predictions": "Εμφάνιση προβλέψεων", "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Χρονική μετατόπιση για γεύματα μεγαλύτερα από %1 γρ. υδατανθράκων που καταναλώνονται μεταξύ %2 και %3", - "Previous": "Previous", - "Previous day": "Previous day", - "Next day": "Next day", - "Next": "Next", - "Temp basal delta": "Temp basal delta", + "Previous": "Προηγούμενο", + "Previous day": "Προηγούμενη ημέρα", + "Next day": "Επόμενη ημέρα", + "Next": "Επόμενο", + "Temp basal delta": "Μεταβολή προσωρινού βασικού ρυθμού", "Authorized by token": "Πιστοποίηση από Token", "Auth role": "Πιστοποίηση ρόλου", - "view without token": "view without token", + "view without token": "προβολή χωρίς συνθηματικό", "Remove stored token": "Αφαίρεση αποθηκευμένου token", "Weekly Distribution": "Εβδομαδιαία Κατανομή", "Failed authentication": "Αποτυχία ταυτοποίησης στοιχείων", "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Έγινε προσπάθεια πιστοποίησης στο Nightscout μια συσκευής από τη διεύθυνση IP %1 με λάθος διαπιστευτήρια. Ελέγξτε αν έχετε ρυθμίσει τον uploader με λάθος API_SECRET ή token.", - "Default (with leading zero and U)": "Default (with leading zero and U)", - "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", - "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", - "Small Bolus Display": "Small Bolus Display", - "Large Bolus Display": "Large Bolus Display", + "Default (with leading zero and U)": "Προεπιλογή (με αρχικό μηδέν και U)", + "Concise (with U, without leading zero)": "Συνοπτική (με U, χωρίς μηδενικό προβάδισμα)", + "Minimal (without leading zero and U)": "Ελάχιστη (χωρίς μηδενικό προβάδισμα και U)", + "Small Bolus Display": "Απεικόνιση μικρού Bolus", + "Large Bolus Display": "Απεικόνιση μεγάλου Bolus", "Bolus Display Threshold": "Bolus Display Threshold", "%1 U and Over": "%1 U and Over", "Event repeated %1 times.": "Η ενέργεια επανλήφθηκε %1 φορές.", diff --git a/translations/es_ES.json b/translations/es_ES.json index b16e68dc0c7..580a5695f75 100644 --- a/translations/es_ES.json +++ b/translations/es_ES.json @@ -223,7 +223,7 @@ "View all treatments": "Visualizar todos los tratamientos", "Enable Alarms": "Activar las alarmas", "Pump Battery Change": "Cambio batería bomba", - "Pump Battery Age": "Edad de la batería de la bomba", + "Pump Battery Age": "Edad de la batería en la bomba", "Pump Battery Low Alarm": "Alarma de Bomba Baja", "Pump Battery change overdue!": "Cambio de batería de bomba atrasado!", "When enabled an alarm may sound.": "Cuando estén activas, una alarma podrá sonar", @@ -702,6 +702,6 @@ "Last recorded %1 %2 ago.": "Última grabación hace %1 %2.", "Security issue": "Problema de seguridad", "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Detectada API_SECRET débil. Por favor, utilice una mezcla de letras en minúscula y en mayúscula, números y caracteres no alfanuméricos como !#%&/ para reducir el riesgo de acceso no autorizado. La longitud mínima de la API_SECRET es de 12 caracteres.", - "less than 1": "menos que 1", + "less than 1": "menos de 1", "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "La contraseña de MongoDB y la API_SECRET coinciden. Esto es una muy mala idea. Por favor, cambie ambas contraseñas y no reutilice contraseñas en el sistema." } diff --git a/translations/et_EE.json b/translations/et_EE.json new file mode 100644 index 00000000000..daa8c7186c7 --- /dev/null +++ b/translations/et_EE.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Kuulamine pordil", + "Mo": "E", + "Tu": "T", + "We": "K", + "Th": "N", + "Fr": "R", + "Sa": "L", + "Su": "P", + "Monday": "Esmaspäev", + "Tuesday": "Teisipäev", + "Wednesday": "Kolmapäev", + "Thursday": "Neljapäev", + "Friday": "Reede", + "Saturday": "Laupäev", + "Sunday": "Pühapäev", + "Category": "Kategooria", + "Subcategory": "Alamkategooria", + "Name": "Nimi", + "Today": "Täna", + "Last 2 days": "Viimased 2 päeva", + "Last 3 days": "Viimased 3 päeva", + "Last week": "Viimane nädal", + "Last 2 weeks": "Viimased 2 nädalat", + "Last month": "Viimane kuu", + "Last 3 months": "Viimased 3 kuud", + "From": "Alates", + "To": "Kuni", + "Notes": "Märkused", + "Food": "Toit", + "Insulin": "Insuliin", + "Carbs": "Süsivesikud", + "Notes contain": "Märkused sisaldavad", + "Target BG range bottom": "Veresuhkru vahemik alates", + "top": "kuni", + "Show": "Näita", + "Display": "Näita", + "Loading": "Laadimine", + "Loading profile": "Profiili laadimine", + "Loading status": "Staatuse laadimine", + "Loading food database": "Toidu andmebaasi laadimine", + "not displayed": "not displayed", + "Loading CGM data of": "Loading CGM data of", + "Loading treatments data of": "Loading treatments data of", + "Processing data of": "Processing data of", + "Portion": "Portsjon", + "Size": "Suurus", + "(none)": "(puudub)", + "None": "Puudub", + "": "", + "Result is empty": "Result is empty", + "Day to day": "Day to day", + "Week to week": "Week to week", + "Daily Stats": "Daily Stats", + "Percentile Chart": "Percentile Chart", + "Distribution": "Distribution", + "Hourly stats": "Hourly stats", + "netIOB stats": "netIOB stats", + "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "No data available": "No data available", + "Low": "Madal", + "In Range": "Vahemikus", + "Period": "Period", + "High": "Kõrge", + "Average": "Keskmine", + "Low Quartile": "Low Quartile", + "Upper Quartile": "Upper Quartile", + "Quartile": "Quartile", + "Date": "Kuupäev", + "Normal": "Normal", + "Median": "Mediaan", + "Readings": "Readings", + "StDev": "StDev", + "Daily stats report": "Daily stats report", + "Glucose Percentile report": "Glucose Percentile report", + "Glucose distribution": "Glucose distribution", + "days total": "päeva kokku", + "Total per day": "Total per day", + "Overall": "Overall", + "Range": "Vahemik", + "% of Readings": "% näitudest", + "# of Readings": "Näitude arv", + "Mean": "Keskmine", + "Standard Deviation": "Standardhälve", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "A1c ennustus*", + "Weekly Success": "Weekly Success", + "There is not sufficient data to run this report. Select more days.": "Aruande koostamiseks pole piisavalt andmeid. Vali rohkem päevi.", + "Using stored API secret hash": "Using stored API secret hash", + "No API secret hash stored yet. You need to enter API secret.": "No API secret hash stored yet. You need to enter API secret.", + "Database loaded": "Andmebaas laaditud", + "Error: Database failed to load": "Viga: Andmebaasi laadimine ebaõnnestus", + "Error": "Viga", + "Create new record": "Lisa uus kirje", + "Save record": "Salvesta kirje", + "Portions": "Portsjonid", + "Unit": "Ühik", + "GI": "GI", + "Edit record": "Muuda kirjet", + "Delete record": "Kustuta kirje", + "Move to the top": "Tagasi algusesse", + "Hidden": "Peidetud", + "Hide after use": "Peida pärast kasutamist", + "Your API secret must be at least 12 characters long": "Sinu API salasõna peab olema vähemalt 12 tähemärki", + "Bad API secret": "Bad API secret", + "API secret hash stored": "API salasõna räsi salvestatud", + "Status": "Staatus", + "Not loaded": "Laadimata", + "Food Editor": "Food Editor", + "Your database": "Sinu andmebaas", + "Filter": "Filter", + "Save": "Salvesta", + "Clear": "Tühjenda", + "Record": "Kirje", + "Quick picks": "Kiirvalikud", + "Show hidden": "Näita peidetuid", + "Your API secret or token": "Sinu API salasõna", + "Remember this device. (Do not enable this on public computers.)": "Jäta see seade meelde. (Ära kasuta avalikus arvutis.)", + "Treatments": "Treatments", + "Time": "Aeg", + "Event Type": "Sündmuse tüüp", + "Blood Glucose": "Veresuhkur", + "Entered By": "Sisestas", + "Delete this treatment?": "Delete this treatment?", + "Carbs Given": "Süsivesikud", + "Insulin Given": "Insuliin", + "Event Time": "Kellaaeg", + "Please verify that the data entered is correct": "Palun veendu, et sisestatud andmed on õiged", + "BG": "VS", + "Use BG correction in calculation": "Use BG correction in calculation", + "BG from CGM (autoupdated)": "VS sensorist (automaatselt uuendatud)", + "BG from meter": "VS glükomeetrist", + "Manual BG": "Käsitsi sisestatud VS", + "Quickpick": "Kiirvalik", + "or": "või", + "Add from database": "Lisa andmebaasist", + "Use carbs correction in calculation": "Use carbs correction in calculation", + "Use COB correction in calculation": "Use COB correction in calculation", + "Use IOB in calculation": "Use IOB in calculation", + "Other correction": "Other correction", + "Rounding": "Ümardus", + "Enter insulin correction in treatment": "Enter insulin correction in treatment", + "Insulin needed": "Insulin needed", + "Carbs needed": "Carbs needed", + "Carbs needed if Insulin total is negative value": "Carbs needed if Insulin total is negative value", + "Basal rate": "Basal rate", + "60 minutes earlier": "60 minutit varem", + "45 minutes earlier": "45 minutit varem", + "30 minutes earlier": "30 minutit varem", + "20 minutes earlier": "20 minutit varem", + "15 minutes earlier": "15 minutit varem", + "Time in minutes": "Aeg minutites", + "15 minutes later": "15 minutit hiljem", + "20 minutes later": "20 minutit hiljem", + "30 minutes later": "30 minutit hiljem", + "45 minutes later": "45 minutit hiljem", + "60 minutes later": "60 minutit hiljem", + "Additional Notes, Comments": "Additional Notes, Comments", + "RETRO MODE": "RETRO MODE", + "Now": "Nüüd", + "Other": "Other", + "Submit Form": "Saada vorm", + "Profile Editor": "Profiiliredaktor", + "Reports": "Aruanded", + "Add food from your database": "Lisa toit oma andmebaasist", + "Reload database": "Laadi andmebaas uuesti", + "Add": "Lisa", + "Unauthorized": "Volitamata", + "Entering record failed": "Kirje lisamine ebaõnnestus", + "Device authenticated": "Seadme autentimine", + "Device not authenticated": "Seade pole autenditud", + "Authentication status": "Autentimise staatus", + "Authenticate": "Autendi", + "Remove": "Eemalda", + "Your device is not authenticated yet": "Su seade pole veel autenditud", + "Sensor": "Sensor", + "Finger": "Sõrm", + "Manual": "Manual", + "Scale": "Skaala", + "Linear": "Lineaarne", + "Logarithmic": "Logaritmiline", + "Logarithmic (Dynamic)": "Logaritmiline (Dünaamiline)", + "Insulin-on-Board": "Insulin-on-Board", + "Carbs-on-Board": "Carbs-on-Board", + "Bolus Wizard Preview": "Bolus Wizard Preview", + "Value Loaded": "Value Loaded", + "Cannula Age": "Kanüüli vanus", + "Basal Profile": "Basal Profile", + "Silence for 30 minutes": "Vaigista 30 minutiks", + "Silence for 60 minutes": "Vaigista 60 minutiks", + "Silence for 90 minutes": "Vaigista 90 minutiks", + "Silence for 120 minutes": "Vaigista 120 minutiks", + "Settings": "Seaded", + "Units": "Ühikud", + "Date format": "Kellaaja formaat", + "12 hours": "12 tundi", + "24 hours": "24 tundi", + "Log a Treatment": "Log a Treatment", + "BG Check": "VS kontroll", + "Meal Bolus": "Toiduboolus", + "Snack Bolus": "Snäkiboolus", + "Correction Bolus": "Korrektsiooniboolus", + "Carb Correction": "Süsivesikute parandus", + "Note": "Märkus", + "Question": "Küsimus", + "Exercise": "Füüsiline tegevus", + "Pump Site Change": "Pumba asukoha muutus", + "CGM Sensor Start": "CGM sensori algus", + "CGM Sensor Stop": "CGM sensori lõpp", + "CGM Sensor Insert": "CGM sensori sisestamine", + "Sensor Code": "Sensori kood", + "Transmitter ID": "Saatja ID", + "Dexcom Sensor Start": "Dexcom sensori algus", + "Dexcom Sensor Change": "Dexcom sensori lõpp", + "Insulin Cartridge Change": "Insulin Cartridge Change", + "D.A.D. Alert": "D.A.D. Alert", + "Glucose Reading": "Veresuhkru näit", + "Measurement Method": "Mõõtmismeetod", + "Meter": "Glükomeeter", + "Amount in grams": "Kogus grammides", + "Amount in units": "Kogus ühikutes", + "View all treatments": "View all treatments", + "Enable Alarms": "Enable Alarms", + "Pump Battery Change": "Pumba patarei vahetus", + "Pump Battery Age": "Pumba aku vanus", + "Pump Battery Low Alarm": "Pump Battery Low Alarm", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "When enabled an alarm may sound.", + "Urgent High Alarm": "Urgent High Alarm", + "High Alarm": "High Alarm", + "Low Alarm": "Low Alarm", + "Urgent Low Alarm": "Urgent Low Alarm", + "Stale Data: Warn": "Aegunud andmed: hoiatus", + "Stale Data: Urgent": "Stale Data: Urgent", + "mins": "minutit", + "Night Mode": "Öörežiim", + "When enabled the page will be dimmed from 10pm - 6am.": "Kui aktiivne, hämardatakse lehte vahemikus 22:00 - 06:00.", + "Enable": "Aktiveeri", + "Show Raw BG Data": "Show Raw BG Data", + "Never": "Never", + "Always": "Alati", + "When there is noise": "When there is noise", + "When enabled small white dots will be displayed for raw BG data": "When enabled small white dots will be displayed for raw BG data", + "Custom Title": "Custom Title", + "Theme": "Theme", + "Default": "Vaikimisi", + "Colors": "Colors", + "Colorblind-friendly colors": "Colorblind-friendly colors", + "Reset, and use defaults": "Lähtesta ja kasuta vaikeväärtuseid", + "Calibrations": "Kalibreerimised", + "Alarm Test / Smartphone Enable": "Alarm Test / Smartphone Enable", + "Bolus Wizard": "Boolusearvesti", + "in the future": "tulevikus", + "time ago": "aega tagasi", + "hr ago": "tund tagasi", + "hrs ago": "tundi tagasi", + "min ago": "minut tagasi", + "mins ago": "minutit tagasi", + "day ago": "päev tagasi", + "days ago": "päeva tagasi", + "long ago": "ammu", + "Clean": "Clean", + "Light": "Light", + "Medium": "Medium", + "Heavy": "Heavy", + "Treatment type": "Treatment type", + "Raw BG": "Raw BG", + "Device": "Seade", + "Noise": "Noise", + "Calibration": "Calibration", + "Show Plugins": "Show Plugins", + "About": "Teave", + "Value in": "Väärtus", + "Carb Time": "Carb Time", + "Language": "Keel", + "Add new": "Lisa uus", + "g": "g", + "ml": "ml", + "pcs": "tk", + "Drag&drop food here": "Drag&drop food here", + "Care Portal": "Care Portal", + "Medium/Unknown": "Medium/Unknown", + "IN THE FUTURE": "TULEVIKUS", + "Order": "Järjekord", + "oldest on top": "vanemad eespool", + "newest on top": "uuemad eespool", + "All sensor events": "Kõik sensori sündmused", + "Remove future items from mongo database": "Eemalda tuleviku sissekanded MongoDB andmebaasist", + "Find and remove treatments in the future": "Find and remove treatments in the future", + "This task find and remove treatments in the future.": "This task find and remove treatments in the future.", + "Remove treatments in the future": "Remove treatments in the future", + "Find and remove entries in the future": "Find and remove entries in the future", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "This task find and remove CGM data in the future created by uploader with wrong date/time.", + "Remove entries in the future": "Remove entries in the future", + "Loading database ...": "Andmebaasi laadimine...", + "Database contains %1 future records": "Andmebaasis on %1 tulevikukirjet", + "Remove %1 selected records?": "Eemalda %1 valitud kirjet?", + "Error loading database": "Viga andmebaasi laadimisel", + "Record %1 removed ...": "Kirje %1 eemaldatud ...", + "Error removing record %1": "Viga kirje %1 eemaldamisel", + "Deleting records ...": "Kirjete kustutamine ...", + "%1 records deleted": "%1 kirjet kustutatud", + "Clean Mongo status database": "Clean Mongo status database", + "Delete all documents from devicestatus collection": "Delete all documents from devicestatus collection", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.", + "Delete all documents": "Delete all documents", + "Delete all documents from devicestatus collection?": "Delete all documents from devicestatus collection?", + "Database contains %1 records": "Andmebaasis on %1 kirjet", + "All records removed ...": "Kõik kirjed eemaldatud ...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Kustuta vanad dokumendid", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 ei ole korrektne arv", + "%1 is not a valid number - must be more than 2": "%1 ei ole korrektne arv - peab olema suurem kui 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "Administraatori tööriistad", + "Nightscout reporting": "Nightscout aruanded", + "Cancel": "Katkesta", + "Edit treatment": "Edit treatment", + "Duration": "Kestus", + "Duration in minutes": "Kestus minutites", + "Temp Basal": "Ajutine basaal", + "Temp Basal Start": "Ajutise basaali algus", + "Temp Basal End": "Ajutise basaali lõpp", + "Percent": "Protsent", + "Basal change in %": "Basal change in %", + "Basal value": "Basal value", + "Absolute basal value": "Absolute basal value", + "Announcement": "Teadaanne", + "Loading temp basal data": "Loading temp basal data", + "Save current record before changing to new?": "Save current record before changing to new?", + "Profile Switch": "Profile Switch", + "Profile": "Profiil", + "General profile settings": "Üldised profiili seaded", + "Title": "Pealkiri", + "Database records": "Andmebaasi kirjed", + "Add new record": "Lisa uus kirje", + "Remove this record": "Kustuta see kirje", + "Clone this record to new": "Clone this record to new", + "Record valid from": "Kirje kehtib alates", + "Stored profiles": "Salvestatud profiilid", + "Timezone": "Ajavöönd", + "Duration of Insulin Activity (DIA)": "Duration of Insulin Activity (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.", + "Insulin to carb ratio (I:C)": "Insulin to carb ratio (I:C)", + "Hours:": "Tunnid:", + "hours": "tundi", + "g/hour": "g/tund", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulin Sensitivity Factor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.", + "Carbs activity / absorption rate": "Carbs activity / absorption rate", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).", + "Basal rates [unit/hour]": "Basal rates [unit/hour]", + "Target BG range [mg/dL,mmol/L]": "Target BG range [mg/dL,mmol/L]", + "Start of record validity": "Start of record validity", + "Icicle": "Icicle", + "Render Basal": "Render Basal", + "Profile used": "Profile used", + "Calculation is in target range.": "Calculation is in target range.", + "Loading profile records ...": "Loading profile records ...", + "Values loaded.": "Values loaded.", + "Default values used.": "Default values used.", + "Error. Default values used.": "Error. Default values used.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Time ranges of target_low and target_high don't match. Values are restored to defaults.", + "Valid from:": "Kehtiv alates:", + "Save current record before switching to new?": "Save current record before switching to new?", + "Add new interval before": "Add new interval before", + "Delete interval": "Delete interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Komboboolus", + "Difference": "Difference", + "New time": "New time", + "Edit Mode": "Edit Mode", + "When enabled icon to start edit mode is visible": "When enabled icon to start edit mode is visible", + "Operation": "Operation", + "Move": "Liiguta", + "Delete": "Kustuta", + "Move insulin": "Liiguta insuliin", + "Move carbs": "Liiguta süsivesikud", + "Remove insulin": "Eemalda insuliin", + "Remove carbs": "Eemalda süsivesikud", + "Change treatment time to %1 ?": "Change treatment time to %1 ?", + "Change carbs time to %1 ?": "Change carbs time to %1 ?", + "Change insulin time to %1 ?": "Change insulin time to %1 ?", + "Remove treatment ?": "Remove treatment ?", + "Remove insulin from treatment ?": "Remove insulin from treatment ?", + "Remove carbs from treatment ?": "Remove carbs from treatment ?", + "Rendering": "Rendering", + "Loading OpenAPS data of": "Loading OpenAPS data of", + "Loading profile switch data": "Loading profile switch data", + "Redirecting you to the Profile Editor to create a new profile.": "Redirecting you to the Profile Editor to create a new profile.", + "Pump": "Pump", + "Sensor Age": "Sensori vanus", + "Insulin Age": "Insuliini vanus", + "Temporary target": "Temporary target", + "Reason": "Põhjus", + "Eating soon": "Eating soon", + "Top": "Top", + "Bottom": "Bottom", + "Activity": "Activity", + "Targets": "Targets", + "Bolus insulin:": "Bolus insulin:", + "Base basal insulin:": "Basaali põhidoos:", + "Positive temp basal insulin:": "Ajutine basaali tõstmine:", + "Negative temp basal insulin:": "Ajutine basaali vähendamine:", + "Total basal insulin:": "Total basal insulin:", + "Total daily insulin:": "Total daily insulin:", + "Unable to save Role": "Viga rolli salvestamisel", + "Unable to delete Role": "Viga rolli kustutamisel", + "Database contains %1 roles": "Andmebaasis on %1 rolli", + "Edit Role": "Rolli muutmine", + "admin, school, family, etc": "administraator, kool, pere jne.", + "Permissions": "Õigused", + "Are you sure you want to delete: ": "Kas oled kindel, et soovid kustutada: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Igal rollil on 1 või rohkem õigust. Märgend * annab kõik õigused. Õigused on hierarhilised, eraldajaks : (koolon).", + "Add new Role": "Lisa uus roll", + "Roles - Groups of People, Devices, etc": "Rollid - Inimeste, seadmete jm. grupid", + "Edit this role": "Muuda seda rolli", + "Admin authorized": "Admin authorized", + "Subjects - People, Devices, etc": "Subjektid - inimesed, seadmed jne.", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Igal subjektil on oma ligipääsutunnus ning 1 või rohkem rolli. Kliki ligipääsutunnusel, et avada uus vaade valitud subjektina, seejärel saad ligipääsulinki jagada.", + "Add new Subject": "Lisa uus subjekt", + "Unable to save Subject": "Viga subjekti salvestamisel", + "Unable to delete Subject": "Viga subjekti kustutamisel", + "Database contains %1 subjects": "Andmebaasis on %1 subjekti", + "Edit Subject": "Subjekti muutmine", + "person, device, etc": "isik, seade jne.", + "role1, role2": "roll1, roll2", + "Edit this subject": "Muuda seda subjekti", + "Delete this subject": "Kustuta see subjekt", + "Roles": "Rollid", + "Access Token": "Ligipääsutunnus", + "hour ago": "tund tagasi", + "hours ago": "tundi tagasi", + "Silence for %1 minutes": "Vaigista %1 minutiks", + "Check BG": "Check BG", + "BASAL": "BASAL", + "Current basal": "Praegune basaal", + "Sensitivity": "Sensitivity", + "Current Carb Ratio": "Current Carb Ratio", + "Basal timezone": "Basal timezone", + "Active profile": "Active profile", + "Active temp basal": "Active temp basal", + "Active temp basal start": "Active temp basal start", + "Active temp basal duration": "Active temp basal duration", + "Active temp basal remaining": "Active temp basal remaining", + "Basal profile value": "Basal profile value", + "Active combo bolus": "Active combo bolus", + "Active combo bolus start": "Active combo bolus start", + "Active combo bolus duration": "Active combo bolus duration", + "Active combo bolus remaining": "Active combo bolus remaining", + "BG Delta": "BG Delta", + "Elapsed Time": "Elapsed Time", + "Absolute Delta": "Absolute Delta", + "Interpolated": "Interpolated", + "BWP": "BWP", + "Urgent": "Kriitiline", + "Warning": "Hoiatus", + "Info": "Info", + "Lowest": "Lowest", + "Snoozing high alarm since there is enough IOB": "Snoozing high alarm since there is enough IOB", + "Check BG, time to bolus?": "Check BG, time to bolus?", + "Notice": "Notice", + "required info missing": "required info missing", + "Insulin on Board": "Insulin on Board", + "Current target": "Current target", + "Expected effect": "Expected effect", + "Expected outcome": "Expected outcome", + "Carb Equivalent": "Carb Equivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduction needed in active insulin to reach low target, too much basal?", + "basal adjustment out of range, give carbs?": "basal adjustment out of range, give carbs?", + "basal adjustment out of range, give bolus?": "basal adjustment out of range, give bolus?", + "above high": "above high", + "below low": "below low", + "Projected BG %1 target": "Projected BG %1 target", + "aiming at": "aiming at", + "Bolus %1 units": "Boolus %1 ühikut", + "or adjust basal": "or adjust basal", + "Check BG using glucometer before correcting!": "Kontrolli veresuhkrut glükomeetriga enne korrigeerimist!", + "Basal reduction to account %1 units:": "Basal reduction to account %1 units:", + "30m temp basal": "30m ajutine basaal", + "1h temp basal": "1h ajutine basaal", + "Cannula change overdue!": "Cannula change overdue!", + "Time to change cannula": "Aeg kanüüli vahetada", + "Change cannula soon": "Vaheta kanüüli varsti", + "Cannula age %1 hours": "Kanüüli vanus %1 tundi", + "Inserted": "Inserted", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Last Carbs", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Insulin reservoir change overdue!", + "Time to change insulin reservoir": "Time to change insulin reservoir", + "Change insulin reservoir soon": "Change insulin reservoir soon", + "Insulin reservoir age %1 hours": "Insulin reservoir age %1 hours", + "Changed": "Vahetatud", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Last Bolus", + "Basal IOB": "Basal IOB", + "Source": "Source", + "Stale data, check rig?": "Stale data, check rig?", + "Last received:": "Last received:", + "%1m ago": "%1m tagasi", + "%1h ago": "%1h tagasi", + "%1d ago": "%1p tagasi", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensor change/restart overdue!", + "Time to change/restart sensor": "Aeg sensor vahetada/taaskäivitada", + "Change/restart sensor soon": "Vaheta/taaskäivita sensor varsti", + "Sensor age %1 days %2 hours": "Sensori vanus %1 päeva %2 tundi", + "Sensor Insert": "Sensori sisestamine", + "Sensor Start": "Sensori algus", + "days": "päeva", + "Insulin distribution": "Insulin distribution", + "To see this report, press SHOW while in this view": "To see this report, press SHOW while in this view", + "AR2 Forecast": "AR2 Forecast", + "OpenAPS Forecasts": "OpenAPS Forecasts", + "Temporary Target": "Temporary Target", + "Temporary Target Cancel": "Temporary Target Cancel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiilid", + "Time in fluctuation": "Time in fluctuation", + "Time in rapid fluctuation": "Time in rapid fluctuation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:", + "Filter by hours": "Filter by hours", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">can be found here.", + "Mean Total Daily Change": "Mean Total Daily Change", + "Mean Hourly Change": "Mean Hourly Change", + "FortyFiveDown": "kerge langus", + "FortyFiveUp": "kerge tõus", + "Flat": "stabiilne", + "SingleUp": "tõus", + "SingleDown": "langus", + "DoubleDown": "kiire langus", + "DoubleUp": "kiire tõus", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Tere tulemast Nightscouti", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pumba aku", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM-i režiim", + "virtAsstTitleCGMStatus": "CGM-i staatus", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM saatja staatus", + "virtAsstTitleCGMTxAge": "CGM saatja vanus", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 ja %2 seisuga %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "Mida soovid Nightscoutilt küsida?", + "virtAsstPreamble": "Sinu", + "virtAsstPreamble3person": "%1 on ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "Vabandust, ma ei saanud sinust aru.", + "Fat [g]": "Rasvad [g]", + "Protein [g]": "Valgud [g]", + "Energy [kJ]": "Energia [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Valgud", + "Fat": "Rasvad", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Andmebaasi maht", + "Database Size near its limits!": "Andmebaasi maht on piiri peal!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Andmebaasi maht on %1 MiB %2 MiB-st. Palun varunda ja puhasta andmebaas!", + "Database file size": "Andmebaasi faili suurus", + "%1 MiB of %2 MiB (%3%)": "%1 MiB / %2 MiB (%3%)", + "Data size": "Andmete maht", + "virtAsstDatabaseSize": "%1 MiB. See on %2% saadaolevast andmebaasi mahust.", + "virtAsstTitleDatabaseSize": "Andmebaasi faili suurus", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "Sulle on administraatori märguandeid", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Andmete lugemine lubatud", + "Data writes enabled": "Andmete kirjutamine lubatud", + "Data writes not enabled": "Andmete kirjutamine keelatud", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Kontrolli uuendusi", + "Open Source": "Avatud lähtekood", + "Nightscout Info": "Nightscouti info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Eelmine", + "Previous day": "Eelmine päev", + "Next day": "Järgmine päev", + "Next": "Järgmine", + "Temp basal delta": "Ajutise basaali muutus", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB parool ja API_SECRET on samad. See on väga halb. Palun muuda mõlemad ära ja ära taaskasuta paroole süsteemi erinevates kohtades." +} diff --git a/translations/fr_FR.json b/translations/fr_FR.json index 511e9c1caee..7448619d6f7 100644 --- a/translations/fr_FR.json +++ b/translations/fr_FR.json @@ -223,7 +223,7 @@ "View all treatments": "Voir tous les traitements", "Enable Alarms": "Activer les alarmes", "Pump Battery Change": "Changer les batteries de la pompe", - "Pump Battery Age": "Pump Battery Age", + "Pump Battery Age": "Âge de la batterie de la pompe", "Pump Battery Low Alarm": "Alarme batterie de la pompe faible", "Pump Battery change overdue!": "Changement de la batterie de la pompe nécessaire !", "When enabled an alarm may sound.": "Si activée, un alarme peut sonner.", diff --git a/translations/hu_HU.json b/translations/hu_HU.json index d4ff6e05d71..1e2faca8e69 100644 --- a/translations/hu_HU.json +++ b/translations/hu_HU.json @@ -46,7 +46,7 @@ "Portion": "Adag", "Size": "Méret", "(none)": "(nincs)", - "None": "Semmi", + "None": "Kikapcsolva", "": "", "Result is empty": "Az eredmény üres", "Day to day": "Napi", @@ -56,7 +56,7 @@ "Distribution": "Eloszlás", "Hourly stats": "Óránkénti statisztika", "netIOB stats": "netIOB statisztika", - "temp basals must be rendered to display this report": "az átmeneti bázisokat meg kell jeleníteni ehhez a jelentéshez", + "temp basals must be rendered to display this report": "Az átmeneti bázisokat meg kell jeleníteni ehhez a jelentéshez", "No data available": "Nincs elérhető adat", "Low": "Alacsony", "In Range": "Tartományon belül", @@ -165,14 +165,14 @@ "Reports": "Jelentések", "Add food from your database": "Étel hozzáadása saját adatbázisból", "Reload database": "Adatbázis újratöltése", - "Add": "Hozzáadás", + "Add": "Hozzáad", "Unauthorized": "Nem hitelesített", "Entering record failed": "Bejegyzés hozzáadása sikertelen", "Device authenticated": "Eszköz hitelesítve", "Device not authenticated": "Nem hitelesített eszköz", "Authentication status": "Hitelesítés állapota", "Authenticate": "Hitelesít", - "Remove": "Eltávolítás", + "Remove": "Eltávolít", "Your device is not authenticated yet": "Az eszköz még nincs hitelesítve", "Sensor": "Szenzor", "Finger": "Ujj", @@ -227,10 +227,10 @@ "Pump Battery Low Alarm": "Pumpa elem merül riasztás", "Pump Battery change overdue!": "Pumpa elem cserére szorul!", "When enabled an alarm may sound.": "hanggal történő riasztások", - "Urgent High Alarm": "Sürgős magas riasztás", + "Urgent High Alarm": "Sürgős: magas riasztás", "High Alarm": "Magas riasztás", "Low Alarm": "Alacsony riasztás", - "Urgent Low Alarm": "Sürgős alcsony riasztás", + "Urgent Low Alarm": "Sürgős: alcsony riasztás", "Stale Data: Warn": "Elavult adatok", "Stale Data: Urgent": "Sürgős: elavult adatok", "mins": "perc", @@ -314,14 +314,14 @@ "Delete old documents from devicestatus collection?": "Régi dokumentumok törlése a devicestatus gyűjteményből?", "Clean Mongo entries (glucose entries) database": "Mongo adatbázis glükóz bejegyzéseinek tisztítása", "Delete all documents from entries collection older than 180 days": "180 napnál régebbi dokumentumok törlése a bejegyzések gyűjteményéből", - "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "A feladat kitörli az összes bejegyzésekből álló dokumentumot ami 180 napnál öregebb. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Kitörli az összes 180 napnál régebbi dokumentumot a bejegyzések gyűjteményéből.", "Delete old documents": "Régi dokumentumok törlése", "Delete old documents from entries collection?": "Régi dokumentumok törlése a bejegyzések gyűjteményéből?", "%1 is not a valid number": "A(z) %1 nem érvényes szám", "%1 is not a valid number - must be more than 2": "A(z) %1 nem érvényes szám - nagyobb kell legyen, mint 2", "Clean Mongo treatments database": "Mongo kezelési adatbázis tisztítása", - "Delete all documents from treatments collection older than 180 days": "Töröld az összes 180 napnál öregebb kezelési dokumentumot", - "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "A feladat eltávolítja az összes kezelési dokumentumot ami öregebb 180 napnál. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.", + "Delete all documents from treatments collection older than 180 days": "180 napnál régebbi dokumentumok törlése a kezelések gyűjteményéből", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Kitörli az összes 180 napnál régebbi dokumentumot a kezelések gyűjteményéből.", "Delete old documents from treatments collection?": "Összes doumentum törlése a kezelési gyűjteményből?", "Admin Tools": "Adminisztrációs eszközök", "Nightscout reporting": "Nightscout jelentések", @@ -465,14 +465,14 @@ "Elapsed Time": "Eltelt idő", "Absolute Delta": "Abszolút változás", "Interpolated": "Interpolált", - "BWP": "BWP", + "BWP": "Bólus varázsló előnézet", "Urgent": "Sűrgős", "Warning": "Figyelmeztetés", "Info": "Info", "Lowest": "Legalacsonyabb", "Snoozing high alarm since there is enough IOB": "Magas riasztás késleltetése, ha van elég aktív inzulin (IOB)", "Check BG, time to bolus?": "Ellenőrizd a cukorszintet, ideje bólusolni?", - "Notice": "Megjegyzés", + "Notice": "Figyelem", "required info missing": "Hiányzik a szükséges információ", "Insulin on Board": "Aktív inzulin (IOB)", "Current target": "Jelenlegi cél", @@ -486,7 +486,7 @@ "basal adjustment out of range, give bolus?": "A bázis változtatása a tartományon kívül esik. Bólus beadás?", "above high": "magas felett", "below low": "alacsony alatt", - "Projected BG %1 target": "A számított SzG %1", + "Projected BG %1 target": "A várható SzG %1", "aiming at": "céloz", "Bolus %1 units": "Bólusolj %1E", "or adjust basal": "vagy állíts a bázison", @@ -576,7 +576,7 @@ "virtAsstTitleCGMTxAge": "CGM jeladó kora", "virtAsstTitleCGMNoise": "CGM zaj", "virtAsstTitleDelta": "Szenzorglükóz változás", - "virtAsstStatus": "%1 es %2 %3-tól.", + "virtAsstStatus": "%1 és %2 mint a %3.", "virtAsstBasal": "%1 a jelenlegi bázis %2 Egység/óra", "virtAsstBasalTemp": "%1 átmeneti bázis %2 Egység/óra %3-kor jár le", "virtAsstIob": "és %1 aktív inzulinod (IOB) van.", diff --git a/translations/it_IT.json b/translations/it_IT.json index 0c880f23a6a..5e35437aafd 100644 --- a/translations/it_IT.json +++ b/translations/it_IT.json @@ -223,7 +223,7 @@ "View all treatments": "Visualizza tutti le somministrazioni", "Enable Alarms": "Attiva Allarmi", "Pump Battery Change": "Cambio Batteria Microinfusore", - "Pump Battery Age": "Pump Battery Age", + "Pump Battery Age": "Età batteria micro", "Pump Battery Low Alarm": "Allarme Batteria Microinfusore Bassa", "Pump Battery change overdue!": "Sostituzione Batteria del Microinfusore in ritardo!", "When enabled an alarm may sound.": "Quando è abilitato, può suonare un allarme.", @@ -432,7 +432,7 @@ "Subjects - People, Devices, etc": "Soggetti - persone, dispositivi, etc", "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Ogni soggetto avrà un gettone d'accesso unico e 1 o più ruoli. Fare clic sul gettone d'accesso per aprire una nuova vista con il soggetto selezionato, questo legame segreto può quindi essere condiviso.", "Add new Subject": "Aggiungere un nuovo Soggetto", - "Unable to save Subject": "Unable to save Subject", + "Unable to save Subject": "Impossibile salvare il Soggetto", "Unable to delete Subject": "Impossibile eliminare Soggetto", "Database contains %1 subjects": "Database contiene %1 soggetti", "Edit Subject": "Modifica Oggetto", @@ -677,14 +677,14 @@ "Please select a maximum of two weeks duration and click Show again.": "Seleziona un periodo massimo di due settimane e fai clic su Mostra di nuovo.", "Show profiles table": "Mostra tabella profili", "Show predictions": "Visualizza previsioni", - "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Spostamento d'ora su pasti con più di %1 g di carboidrati consumati tra %2 e %3", "Previous": "Precendente", "Previous day": "Giorno precedente", "Next day": "Giorno seguente", "Next": "Seguente", "Temp basal delta": "Differenza basale temporanea", "Authorized by token": "Autorizzato da token", - "Auth role": "Auth role", + "Auth role": "Ruolo autenticazione", "view without token": "visualizza senza token", "Remove stored token": "Rimuovi token memorizzato", "Weekly Distribution": "Distribuzione settimanale", @@ -701,7 +701,7 @@ "minutes": "minuti", "Last recorded %1 %2 ago.": "Ultima registrazione %1 %2 fa.", "Security issue": "Problema di sicurezza", - "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Rilevata API_SECRET debole. Si prega di utilizzare lettere minuscole e maiuscole, numeri e caratteri non alfanumerici come !#%&/ per ridurre il rischio di accesso non autorizzato. La lunghezza minima dell'API_SECRET è di 12 caratteri.", "less than 1": "meno di 1", "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "La password di MongoDB e API_SECRET coincidono. Questa è una cattiva idea. Cambiale entrambe e non riutilizzare le password in tutto il sistema." } diff --git a/translations/nb_NO.json b/translations/nb_NO.json index bc5b78ea677..9cdab4d5bd2 100644 --- a/translations/nb_NO.json +++ b/translations/nb_NO.json @@ -412,7 +412,7 @@ "Activity": "Aktivitet", "Targets": "Mål", "Bolus insulin:": "Bolusinsulin:", - "Base basal insulin:": "Basalinsulin:", + "Base basal insulin:": "Programmert basalinsulin:", "Positive temp basal insulin:": "Positiv midlertidig basalinsulin:", "Negative temp basal insulin:": "Negativ midlertidig basalinsulin:", "Total basal insulin:": "Total daglig basalinsulin:", diff --git a/translations/pt_BR.json b/translations/pt_BR.json index eafa1ab66ab..6fc061284af 100644 --- a/translations/pt_BR.json +++ b/translations/pt_BR.json @@ -659,37 +659,37 @@ "Admin messages in queue": "Mensagens administrativas na fila", "Queue empty": "Fila vazia", "There are no admin messages in queue": "Não há mensagens administrativas na fila", - "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", - "Reads enabled in default permissions": "Reads enabled in default permissions", - "Data reads enabled": "Data reads enabled", - "Data writes enabled": "Data writes enabled", - "Data writes not enabled": "Data writes not enabled", - "Color prediction lines": "Color prediction lines", - "Release Notes": "Release Notes", - "Check for Updates": "Check for Updates", - "Open Source": "Open Source", - "Nightscout Info": "Nightscout Info", - "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", - "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", - "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", - "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", - "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", - "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", - "Show profiles table": "Show profiles table", - "Show predictions": "Show predictions", - "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Please sign in using the API_SECRET to see your administration messages": "Por favor, entre usando a API_SECRET para ver suas mensagens de administração", + "Reads enabled in default permissions": "Leituras habilitadas nas permissões por padrão", + "Data reads enabled": "Leituras de dados ativadas", + "Data writes enabled": "Gravação de dados habilitada", + "Data writes not enabled": "Gravação de dados não habilitada", + "Color prediction lines": "Colorir linhas de previsão", + "Release Notes": "Notas de Versão", + "Check for Updates": "Verifique as Atualizações", + "Open Source": "Código Aberto", + "Nightscout Info": "Informação Do NIghtscount", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "A principal finalidade do Loopalyzer é visualizar como o sistema de ciclo fechado do Loop funciona. Ele também pode funcionar com outras configurações, tanto o ciclo fechado como o ciclo aberto, e sem ciclo. No entanto, dependendo do transmissor que você usa, e o quão frequente são capturados e transmitidos seus dados, e de como será possível preencher os dados que faltam, alguns gráficos podem ter lacunas ou até mesmo estar completamente vazios. Certifique-se sempre que os gráficos parecem razoáveis. O melhor é ver um dia de cada vez e percorrer vários dias antes.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "O Loopalyzer inclui um recurso de mudança de tempo. Se você, por exemplo, tomar café da manhã às 07:00 um dia e às 08:00 no dia seguinte à sua curva média de glicose sanguínea nestes dois dias provavelmente ficará nivelada e não mostrará a resposta real depois de um café da manhã. A mudança de tempo calculará o tempo médio que essas refeições foram ingeridas e depois mudará todos os dados (carbos, insulina, basal, etc.) durante ambos os dias a diferença de tempo correspondente para que ambas as refeições se alinha com o tempo médio de início da refeição.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "Neste exemplo, todos os dados do primeiro dia são empurrados para frente 30 minutos e todos os dados do segundo dia 30 minutos para trás, por isso parece que você teve café da manhã às 07h30 dos dois dias. Isso permite que você veja sua resposta média de glicose no sangue de uma refeição.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Tempo deslocado destaca o período após o tempo médio de início da refeição em cinza, pela duração da DIA (Duração da Ação da Insulina). Uma vez que todos os dados indicam que o dia inteiro é deslocado as curvas para fora da área cinza podem não ser exatas.", + "Note that time shift is available only when viewing multiple days.": "Note que o deslocamento do tempo só está disponível quando estiver visualizando vários dias.", + "Please select a maximum of two weeks duration and click Show again.": "Por favor, selecione no máximo duas semanas e clique em Mostrar novamente.", + "Show profiles table": "Mostrar tabela de perfis", + "Show predictions": "Mostrar as previsões", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Deslocamento de tempo nas refeições maiores que %1 g carboidratos consumidos entre %2 e %3", "Previous": "Anterior", "Previous day": "Dia anterior", "Next day": "Próximo Dia", "Next": "Próximo", "Temp basal delta": "Variacao basal temporária", - "Authorized by token": "Authorized by token", - "Auth role": "Auth role", - "view without token": "view without token", - "Remove stored token": "Remove stored token", - "Weekly Distribution": "Weekly Distribution", - "Failed authentication": "Failed authentication", - "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Authorized by token": "Autorizado por token", + "Auth role": "Código de autenticação", + "view without token": "ver sem token", + "Remove stored token": "Remover token armazenado", + "Weekly Distribution": "Distribuição Semanal", + "Failed authentication": "Falha Na Autenticação ", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Um dispositivo no endereço IP %1 tentou autenticar com o Nightscout com credenciais erradas. Verifique se você tem um transmissor com configuração de API_SECRET ou token errados?", "Default (with leading zero and U)": "Padrão (com zero a esquerda e U)", "Concise (with U, without leading zero)": "Conciso (com U, sem zero à esquerda)", "Minimal (without leading zero and U)": "Mínimo (sem zero a esquerda e U)", @@ -697,11 +697,11 @@ "Large Bolus Display": "Tela Grande de Bolus", "Bolus Display Threshold": "Limite de exibição de Bolus", "%1 U and Over": "%1 U e acima", - "Event repeated %1 times.": "Event repeated %1 times.", - "minutes": "minutes", - "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", - "Security issue": "Security issue", - "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", - "less than 1": "less than 1", - "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." + "Event repeated %1 times.": "Evento repetido %1 vezes.", + "minutes": "minutos", + "Last recorded %1 %2 ago.": "Última gravação há %1 %2 atrás.", + "Security issue": "Problema de segurança", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "API_SECRET fraco detectado. Por favor, use uma mistura de letras minúsculas e MAIÚSCULAS, números e caracteres não-alfanuméricos como !#%&/ para reduzir o risco de acesso não autorizado. O comprimento mínimo da API_SECRET é de 12 caracteres.", + "less than 1": "menos de 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Senha MongoDB e a interface API_SECRET coincidem. Esta é uma ideia muito ruim. Por favor, altere ambos e não reutilize senhas em todo o sistema." } diff --git a/translations/ru_RU.json b/translations/ru_RU.json index 24e5226e675..c1e9e51ce74 100644 --- a/translations/ru_RU.json +++ b/translations/ru_RU.json @@ -250,7 +250,7 @@ "Reset, and use defaults": "Сбросить и использовать настройки по умолчанию", "Calibrations": "Калибровки", "Alarm Test / Smartphone Enable": "Проверка зв. уведомлений / смартфон активен", - "Bolus Wizard": "калькулятор болюса", + "Bolus Wizard": "Калькулятор болюса", "in the future": "в будущем", "time ago": "времени назад", "hr ago": "час назад", diff --git a/translations/sk_SK.json b/translations/sk_SK.json index a44e0d8bc8f..ee55b3bfe96 100644 --- a/translations/sk_SK.json +++ b/translations/sk_SK.json @@ -210,7 +210,7 @@ "CGM Sensor Stop": "CGM Senzor Stop", "CGM Sensor Insert": "Výmena senzoru", "Sensor Code": "Sensor Code", - "Transmitter ID": "Transmitter ID", + "Transmitter ID": "ID Vysielača", "Dexcom Sensor Start": "Spustenie senzoru DEXCOM", "Dexcom Sensor Change": "Výmena senzoru DEXCOM", "Insulin Cartridge Change": "Výmena inzulínu", @@ -223,7 +223,7 @@ "View all treatments": "Zobraziť všetky ošetrenia", "Enable Alarms": "Aktivovať alarmy", "Pump Battery Change": "Zamenjaj baterijo crpalke", - "Pump Battery Age": "Pump Battery Age", + "Pump Battery Age": "Vek batérie pumpy", "Pump Battery Low Alarm": "Baterija crpalke nizka Alarm", "Pump Battery change overdue!": "Pump Battery change overdue!", "When enabled an alarm may sound.": "Pri aktivovanom alarme znie zvuk ", @@ -300,7 +300,7 @@ "Record %1 removed ...": "%1 záznamov bolo odstránených...", "Error removing record %1": "Chyba pri odstraňovaní záznamu %1", "Deleting records ...": "Odstraňovanie záznamov...", - "%1 records deleted": "%1 records deleted", + "%1 records deleted": "%1 záznamov vymazaných", "Clean Mongo status database": "Vyčistiť Mongo databázu statusov", "Delete all documents from devicestatus collection": "Odstránenie všetkých záznamov z kolekcie \"devicestatus\"", "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Táto úloha vymaže všetky záznamy z kolekcie \"devicestatus\". Je to vhodné keď sa stav batérie nezobrazuje správne.", diff --git a/translations/tr_TR.json b/translations/tr_TR.json index 941ffaeab99..ed33cfa831c 100644 --- a/translations/tr_TR.json +++ b/translations/tr_TR.json @@ -69,18 +69,18 @@ "Date": "Tarih", "Normal": "Normal", "Median": "Ortanca", - "Readings": "Ölçüm", + "Readings": "Ölçümler", "StDev": "Standart Sapma", "Daily stats report": "Günlük istatistikler raporu", "Glucose Percentile report": "Glikoz Yüzdelik raporu", "Glucose distribution": "Glikoz dağılımı", - "days total": "toplam gün", + "days total": "gün toplamı", "Total per day": "Günlük toplam", - "Overall": "Tüm", - "Range": "Alan", + "Overall": "Tümü", + "Range": "Aralık", "% of Readings": "% Okumaların", "# of Readings": "# Okumaların", - "Mean": "ortalama", + "Mean": "Ortalama", "Standard Deviation": "Standart Sapma", "Max": "Maks", "Min": "Min", @@ -102,19 +102,19 @@ "Move to the top": "En üste taşı", "Hidden": "Gizli", "Hide after use": "Kullandıktan sonra gizle", - "Your API secret must be at least 12 characters long": "PI parolanız en az 12 karakter uzunluğunda olmalıdır", + "Your API secret must be at least 12 characters long": "API parolanız en az 12 karakter uzunluğunda olmalıdır", "Bad API secret": "Hatalı API parolası", "API secret hash stored": "API secret hash parolası saklandı", "Status": "Durum", "Not loaded": "Yüklü değil", - "Food Editor": "Gıda Editörü", - "Your database": "Sizin Veritabanınız", + "Food Editor": "Yemek Editörü", + "Your database": "Veritabanınız", "Filter": "Filtre", "Save": "Kaydet", "Clear": "Temizle", "Record": "Kayıt", "Quick picks": "Hızlı seçim", - "Show hidden": "Gizli göster", + "Show hidden": "Gizleneni göster", "Your API secret or token": "API parolan yada anahtarın", "Remember this device. (Do not enable this on public computers.)": "Bu cihazı hatırla. (Ortak kullanılan bilgisayarlarda seçmeyiniz.)", "Treatments": "Tedaviler", @@ -123,7 +123,7 @@ "Blood Glucose": "Kan Şekeri", "Entered By": "Tarafından girildi", "Delete this treatment?": "Bu tedaviyi sil?", - "Carbs Given": "Karbonhidrat Verilen", + "Carbs Given": "Verilen Karbonhidrat", "Insulin Given": "Verilen İnsülin", "Event Time": "Etkinliğin zamanı", "Please verify that the data entered is correct": "Lütfen girilen verilerin doğru olduğunu kontrol edin.", @@ -136,10 +136,10 @@ "or": "veya", "Add from database": "Veritabanından ekle", "Use carbs correction in calculation": "Hesaplamada karbonhidrat düzeltmesini kullan", - "Use COB correction in calculation": "Hesaplamada COB aktif karbonhidrat düzeltmesini kullan", - "Use IOB in calculation": "Hesaplamada IOB aktif insülin düzeltmesini kullan", + "Use COB correction in calculation": "Hesaplamada AKRB (Aktif Karbonhidrat) düzeltmesini kullan", + "Use IOB in calculation": "Hesaplamada Aktif İnsülin (AİNS) düzeltmesini kullan", "Other correction": "Diğer düzeltme", - "Rounding": "yuvarlama", + "Rounding": "Yuvarlama", "Enter insulin correction in treatment": "Tedavide insülin düzeltmesini girin", "Insulin needed": "İnsülin gerekli", "Carbs needed": "Karbonhidrat gerekli", @@ -181,10 +181,10 @@ "Linear": "Doğrusal", "Logarithmic": "Logaritmik", "Logarithmic (Dynamic)": "Logaritmik (Dinamik)", - "Insulin-on-Board": "Aktif İnsülin (IOB)", - "Carbs-on-Board": "Aktif Karbonhidrat (COB)", - "Bolus Wizard Preview": "Bolus hesaplama Sihirbazı Önizlemesi (BWP)", - "Value Loaded": "Yüklenen Değer", + "Insulin-on-Board": "Aktif-İnsülin (AİNS)", + "Carbs-on-Board": "Aktif-Karbonhidrat (AKRB)", + "Bolus Wizard Preview": "Bolus Sihirbazı Önizlemesi", + "Value Loaded": "Değer Yüklendi", "Cannula Age": "Kanül yaşı", "Basal Profile": "Bazal Profil", "Silence for 30 minutes": "30 dakika sessizlik", @@ -214,20 +214,20 @@ "Dexcom Sensor Start": "Dexcom Sensör Başlat", "Dexcom Sensor Change": "Dexcom Sensör değiştir", "Insulin Cartridge Change": "İnsülin rezervuar değişimi", - "D.A.D. Alert": "D.A.D(Diabetes Alert Dog)", + "D.A.D. Alert": "D.A.D Alarmı", "Glucose Reading": "Glikoz Değeri", "Measurement Method": "Ölçüm Metodu", "Meter": "Glikometre", "Amount in grams": "Gram cinsinden miktar", - "Amount in units": "Birim miktarı", + "Amount in units": "Ünite", "View all treatments": "Tüm tedavileri görüntüle", "Enable Alarms": "Alarmları Etkinleştir", "Pump Battery Change": "Pompa pil değişimi", "Pump Battery Age": "Pompa pil yaşı", "Pump Battery Low Alarm": "Pompa Düşük pil alarmı", "Pump Battery change overdue!": "Pompa pil değişimi gecikti!", - "When enabled an alarm may sound.": "Etkinleştirilirse, alarm çalar.", - "Urgent High Alarm": "Acil Yüksek Alarm", + "When enabled an alarm may sound.": "Etkinleştirildiğinde alarm çalabilir.", + "Urgent High Alarm": "Acil Yüksek Alarmı", "High Alarm": "Yüksek Alarmı", "Low Alarm": "Düşük Alarmı", "Urgent Low Alarm": "Acil Düşük Alarmı", @@ -261,23 +261,23 @@ "days ago": "günler önce", "long ago": "uzun zaman önce", "Clean": "Temiz", - "Light": "Kolay", + "Light": "Hafif", "Medium": "Orta", "Heavy": "Ağır", "Treatment type": "Tedavi tipi", "Raw BG": "Ham KŞ", "Device": "Cihaz", - "Noise": "parazit", + "Noise": "Gürültü", "Calibration": "Kalibrasyon", "Show Plugins": "Eklentileri Göster", "About": "Hakkında", "Value in": "Değer cinsinden", - "Carb Time": "Karbonhidratların alım zamanı", + "Carb Time": "Karb. zamanı", "Language": "Dil", "Add new": "Yeni ekle", "g": "g", "ml": "ml", - "pcs": "parça", + "pcs": "adet", "Drag&drop food here": "Yiyecekleri buraya sürükle bırak", "Care Portal": "Bakım portalı", "Medium/Unknown": "Orta/Bilinmeyen", @@ -286,59 +286,59 @@ "oldest on top": "en eski üste", "newest on top": "en yeni üste", "All sensor events": "Tüm sensör olayları", - "Remove future items from mongo database": "Gelecekteki öğeleri mongo veritabanından kaldır", - "Find and remove treatments in the future": "Gelecekte tedavileri bulun ve kaldır", - "This task find and remove treatments in the future.": "Bu görev gelecekte tedavileri bul ve kaldır.", - "Remove treatments in the future": "Gelecekte tedavileri kaldır", - "Find and remove entries in the future": "Gelecekteki girdileri bul ve kaldır", - "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Yükleyicinin oluşturduğu gelecekteki CGM verilerinin yanlış tarih/saat olanlarını bul ve kaldır.", - "Remove entries in the future": "Gelecekteki girdileri kaldır", + "Remove future items from mongo database": "İleri tarihli öğeleri mongo veritabanından kaldır", + "Find and remove treatments in the future": "İleri tarihli tedavileri bulun ve kaldırın", + "This task find and remove treatments in the future.": "Bu görev, ileri tarihli tedavileri bulur ve kaldırır.", + "Remove treatments in the future": "İleri tarihli tedavileri kaldırın", + "Find and remove entries in the future": "İleri tarihli girdileri bul ve kaldır", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Bu görev, yükleyici tarafından yanlış tarih/saatle oluşturulan ileri tarihli CGM verilerini bulur ve kaldırır.", + "Remove entries in the future": "İleri Tarihli girdileri kaldır", "Loading database ...": "Veritabanı yükleniyor ...", - "Database contains %1 future records": "Veritabanı %1 gelecekteki girdileri içeriyor", - "Remove %1 selected records?": "Seçilen %1 kayıtlar kaldırılsın? ", + "Database contains %1 future records": "Veritabanı %1 ileri tarihli girdi içeriyor", + "Remove %1 selected records?": "Seçilen %1 kayıtlar kaldırılsın mı?", "Error loading database": "Veritabanını yüklerken hata oluştu", - "Record %1 removed ...": "%1 kaydı silindi ...", + "Record %1 removed ...": "%1 kayıt silindi ...", "Error removing record %1": "%1 kayıt kaldırılırken hata oluştu", "Deleting records ...": "Kayıtlar siliniyor ...", "%1 records deleted": "%1 kayıt silindi", "Clean Mongo status database": "Mongo durum veritabanını temizle", - "Delete all documents from devicestatus collection": "Devicestatus koleksiyonundan tüm dokümanları sil", - "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Bu görev tüm durumları Devicestatus koleksiyonundan kaldırır. Yükleyici pil durumu güncellenmiyorsa kullanışlıdır.", + "Delete all documents from devicestatus collection": "Cihazdurumu koleksiyonundan tüm dokümanları sil", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Bu görev tüm belgeleri Cihazdurumu koleksiyonundan kaldırır. Yükleyici pil durumunu düzgün güncellemiyorsa kullanışlıdır.", "Delete all documents": "Tüm Belgeleri sil", - "Delete all documents from devicestatus collection?": "Tüm Devicestatus koleksiyon belgeleri silinsin mi?", + "Delete all documents from devicestatus collection?": "Cihazdurumu koleksiyonundan tüm dosyalar silinsin mi?", "Database contains %1 records": "Veritabanı %1 kayıt içeriyor", "All records removed ...": "Tüm kayıtlar kaldırıldı ...", - "Delete all documents from devicestatus collection older than 30 days": "devicestatus kolleksiyonundaki 30 günden eski tüm dosyaları sil", + "Delete all documents from devicestatus collection older than 30 days": "Cihazdurumu koleksiyonundaki 30 günden eski tüm dosyaları sil", "Number of Days to Keep:": "Saklanacak gün sayısı:", - "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Bu görev 30 günden eski tüm dosyaları devicestatus koleksiyonundan kaldırır. Yükleyici pil durumu doğru güncellenmiyorsa kullanışlıdır.", - "Delete old documents from devicestatus collection?": "Tüm eski devicestatus koleksiyon belgeleri silinsin mi?", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Bu görev 30 günden eski tüm dosyaları Cihazdurumu koleksiyonundan kaldırır. Yükleyici pil durumu doğru güncellenmiyorsa kullanışlıdır.", + "Delete old documents from devicestatus collection?": "Cihazdurumu koleksiyonundan eski belgeler silinsin mi?", "Clean Mongo entries (glucose entries) database": "Mongo veritabanı girişlerini (kan şekeri girişleri) temizle", - "Delete all documents from entries collection older than 180 days": "devicestatus kolleksiyonundaki 180 günden eski tüm girdilere ait dosyaları sil", - "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Bu görev 180 günden eski tüm dosyaları devicestatus koleksiyonundan kaldırır. Yükleyici pil durumu doğru güncellenmiyorsa kullanışlıdır.", + "Delete all documents from entries collection older than 180 days": "180 günden eski olan tüm girişleri koleksiyondan silin", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Bu görev 180 günden eski tüm dosyaları koleksiyondan kaldırır. Yükleyici pil durumu doğru güncellenmiyorsa kullanışlıdır.", "Delete old documents": "Eski belgeleri sil", - "Delete old documents from entries collection?": "Tüm eski koleksiyon belgeleri silinsin mi?", + "Delete old documents from entries collection?": "Eski belgeleri giriş koleksiyonundan silin?", "%1 is not a valid number": "%1 geçerli bir sayı değil", "%1 is not a valid number - must be more than 2": "%1 geçerli bir sayı değil - 2'den büyük olmalı", "Clean Mongo treatments database": "Mongo tedavi veritabanını temizle", - "Delete all documents from treatments collection older than 180 days": "Tedavi kolleksiyonundaki 180 günden eski tüm girdilere ait dosyaları sil", + "Delete all documents from treatments collection older than 180 days": "Tedaviler koleksiyonundan 180 günden daha eski tüm kayıtları sil", "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Bu görev 180 günden eski tüm dosyaları tedavi koleksiyonundan kaldırır. Yükleyici pil durumu doğru güncellenmiyorsa kullanışlıdır.", "Delete old documents from treatments collection?": "Tüm eski tedavi belgeleri silinsin mi?", "Admin Tools": "Yönetici araçları", "Nightscout reporting": "NightScout raporları", "Cancel": "İptal", "Edit treatment": "Tedaviyi düzenle", - "Duration": "süre", - "Duration in minutes": "Süre dakika cinsinden", - "Temp Basal": "Geçici Bazal Oranı", - "Temp Basal Start": "Geçici Bazal Oranını Başlanğıcı", - "Temp Basal End": "Geçici bazal oranını Bitişi", + "Duration": "Süre", + "Duration in minutes": "Dakika cinsinden süre", + "Temp Basal": "Geçici Bazal", + "Temp Basal Start": "Geçici Bazal Başlangıç", + "Temp Basal End": "Geçici Bazal Bitiş", "Percent": "Yüzde", "Basal change in %": "Bazal değişimi % cinsinden", - "Basal value": "Bazal değeri", - "Absolute basal value": "Mutlak bazal değeri", + "Basal value": "Bazal değer", + "Absolute basal value": "Mutlak bazal değer", "Announcement": "Duyuru", "Loading temp basal data": "Geçici bazal verileri yükleniyor", - "Save current record before changing to new?": "Yenisine geçmeden önce mevcut girişleri kaydet?", + "Save current record before changing to new?": "Yenisiyle değiştirmeden önce mevcut kayıt kaydedilsin mi?", "Profile Switch": "Profil Değiştir", "Profile": "Profil", "General profile settings": "Genel profil ayarları", @@ -347,7 +347,7 @@ "Add new record": "Yeni kayıt ekle", "Remove this record": "Bu kaydı kaldır", "Clone this record to new": "Bu kaydı yeniden kopyala", - "Record valid from": "Kayıt itibaren geçerli", + "Record valid from": "Kayıt şu tarihten itibaren geçerli", "Stored profiles": "Kaydedilmiş profiller", "Timezone": "Saat dilimi", "Duration of Insulin Activity (DIA)": "İnsülin Etki Süresi (DIA)", @@ -356,11 +356,11 @@ "Hours:": "Saat:", "hours": "saat", "g/hour": "g/saat", - "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "İnsülin ünite başına g karbonhidrat. İnsülin ünite başına kaç gram karbonhidrat tüketildiği oranıdır.", - "Insulin Sensitivity Factor (ISF)": "(ISF) İnsülin Duyarlılık Faktörü", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "1 ünite insülin başına gr karbonhidrat. 1 ünite insülin başına kaç gram karbonhidrat tüketildiği oranıdır.", + "Insulin Sensitivity Factor (ISF)": "İnsülin Duyarlılık Faktörü (İDF)", "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "Ünite insülin başına mg/dL veya mmol/L. Her bir Ünite düzeltme insülin ile KŞ'nin ne kadar değiştiğini gösteren orandır.", "Carbs activity / absorption rate": "Karbonhidrat aktivitesi / emilim oranı", - "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "Ur birim zaman başına gram. Birim zamanda (COB) Aktif Krabonhidratdaki değişimin yanı sıra o zaman üzerinde etki etmesi gereken karbonhidrat miktarını ifade eder. Karbonhidrat emme/aktivite eğrileri, insülin aktivitesinden daha zor anlaşılmaktadır, ancak bir başlangıç gecikmesi ve ardından sabit bir emilim oranı (g/hr) kullanılarak yaklaşık olarak tahmin edilebilmektedir.", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "birim zaman başına gram. Birim zamanda (AKRB) Aktif Krabonhidratdaki değişimin yanı sıra o zaman üzerinde etki etmesi gereken karbonhidrat miktarını ifade eder. Karbonhidrat emme/aktivite eğrileri, insülin aktivitesinden daha zor anlaşılmaktadır, ancak bir başlangıç gecikmesi ve ardından sabit bir emilim oranı (g/st) kullanılarak yaklaşık olarak tahmin edilebilmektedir.", "Basal rates [unit/hour]": "Bazal oranı [ünite/saat]", "Target BG range [mg/dL,mmol/L]": "Hedef KŞ aralığı [mg / dL, mmol / L]", "Start of record validity": "Kayıt geçerliliği başlangıcı", @@ -372,10 +372,10 @@ "Values loaded.": "Değerler yüklendi.", "Default values used.": "Varsayılan değerler kullanıldı.", "Error. Default values used.": "Hata. Varsayılan değerler kullanıldı.", - "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Target_low ve target_high öğelerinin zaman aralıkları eşleşmiyor. Değerler varsayılanlara geri yüklendi.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Düşük_hedef ve yüksek_hedef öğelerinin zaman aralıkları eşleşmiyor. Değerler varsayılanlara geri yüklenir.", "Valid from:": "Tarihinden itibaren geçerli", "Save current record before switching to new?": "Yenisine geçmeden önce mevcut kaydı kaydet", - "Add new interval before": "Daha önce yeni aralık ekle", + "Add new interval before": "Önce yeni aralık ekle", "Delete interval": "Aralığı sil", "I:C": "İ:K", "ISF": "İDF", @@ -391,21 +391,21 @@ "Move carbs": "Karbonhidratları taşı", "Remove insulin": "İnsülini kaldır", "Remove carbs": "Karbonhidratları kaldır", - "Change treatment time to %1 ?": "Tedavi tarihini %1 e değiştirilsin mi?", - "Change carbs time to %1 ?": "Karbonhidrat zamanını %1 e değiştirilsin mi?", - "Change insulin time to %1 ?": "İnsülin tarihini %1 e değiştirilsin mi?", + "Change treatment time to %1 ?": "Tedavi zamanı %1 e değiştirilsin mi?", + "Change carbs time to %1 ?": "Karbonhidrat zamanı %1 e değiştirilsin mi?", + "Change insulin time to %1 ?": "İnsülin zamanı %1 e değiştirilsin mi?", "Remove treatment ?": "Tedavi kaldırılsın mı? ", - "Remove insulin from treatment ?": "İnsülini tedaviden çıkartılsın mı?", - "Remove carbs from treatment ?": "Karbonhidratları tedaviden çıkartılsın mı ?", + "Remove insulin from treatment ?": "İnsülin tedaviden çıkartılsın mı?", + "Remove carbs from treatment ?": "Karbonhidratlar tedaviden çıkartılsın mı ?", "Rendering": "Grafik oluşturuluyor...", - "Loading OpenAPS data of": "dan OpenAPS verileri yükleniyor", - "Loading profile switch data": "Veri profili değişikliği yükleniyor", - "Redirecting you to the Profile Editor to create a new profile.": "Yanlış profil ayarı.\nGörüntülenen zamana göre profil tanımlanmamış.\nYeni profil oluşturmak için profil düzenleyicisine yönlendiriliyor.", + "Loading OpenAPS data of": "OpenAPS verileri yükleniyor", + "Loading profile switch data": "Profil değişimi verileri yükleniyor", + "Redirecting you to the Profile Editor to create a new profile.": "Yeni bir profil oluşturmak için Profil Düzenleyicisine yönlendiriliyor.", "Pump": "Pompa", - "Sensor Age": "(SAGE) Sensör yaşı ", - "Insulin Age": "(IAGE) İnsülin yaşı", + "Sensor Age": "Sensör Yaşı", + "Insulin Age": "İnsülin yaşı", "Temporary target": "Geçici hedef", - "Reason": "Neden", + "Reason": "Sebep", "Eating soon": "Yakında yemek", "Top": "Üst", "Bottom": "Alt", @@ -444,55 +444,55 @@ "Access Token": "Erişim Simgesi (Access Token)", "hour ago": "saat önce", "hours ago": "saat önce", - "Silence for %1 minutes": "%1 dakika sürelik sessizlik", + "Silence for %1 minutes": "%1 dakika sessize al", "Check BG": "KŞ'ini kontrol et", - "BASAL": "Bazal", + "BASAL": "BAZAL", "Current basal": "Geçerli Bazal", - "Sensitivity": "Duyarlılık Faktörü (ISF)", + "Sensitivity": "Duyarlılık", "Current Carb Ratio": "Geçerli Karbonhidrat oranı I/C (ICR)", "Basal timezone": "Bazal saat dilimi", "Active profile": "Aktif profil", - "Active temp basal": "Aktif geçici bazal oranı", - "Active temp basal start": "Aktif geçici bazal oranı başlangıcı", + "Active temp basal": "Aktif geçici bazal", + "Active temp basal start": "Aktif geçici bazal başlangıcı", "Active temp basal duration": "Aktif geçici bazal süresi", - "Active temp basal remaining": "Aktif geçici bazal kalan", + "Active temp basal remaining": "Kalan aktif geçici bazal", "Basal profile value": "Bazal profil değeri", - "Active combo bolus": "Aktive kombo bolus", - "Active combo bolus start": "Aktif gecikmeli bolus başlangıcı", - "Active combo bolus duration": "Active combo bolus süresi", - "Active combo bolus remaining": "Aktif kombo (yayım) bolus kaldı", - "BG Delta": "KŞ farkı", + "Active combo bolus": "Aktif kombo bolus", + "Active combo bolus start": "Aktif kombo bolus başlatma", + "Active combo bolus duration": "Aktif kombo bolus süresi", + "Active combo bolus remaining": "Kalan aktif kombo bolus", + "BG Delta": "KŞ Değişimi (Delta)", "Elapsed Time": "Geçen zaman", - "Absolute Delta": "Mutlak fark", - "Interpolated": "Aralıklı", - "BWP": "Bolus Sihirbazı Önizleme", + "Absolute Delta": "Mutlak Değişim (Delta)", + "Interpolated": "Enterpolasyonlu", + "BWP": "Bolus Sihirbazı Önizlemesi", "Urgent": "Acil", "Warning": "Uyarı", "Info": "Bilgi", "Lowest": "En düşük değer", - "Snoozing high alarm since there is enough IOB": "Yeterli IOB(Aktif İnsülin) olduğundan KŞ yüksek uyarımını ertele", + "Snoozing high alarm since there is enough IOB": "Yeterli AİNS (Aktif İnsülin) olduğundan yüksek alarmı erteleniyor", "Check BG, time to bolus?": "KŞine bakın, gerekirse bolus verin?", "Notice": "Not", "required info missing": "gerekli bilgi eksik", - "Insulin on Board": "(IOB) Aktif İnsülin", + "Insulin on Board": "(AİNS) Aktif İnsülin", "Current target": "Mevcut hedef", "Expected effect": "Beklenen etki", "Expected outcome": "Beklenen sonuç", "Carb Equivalent": "Karbonhidrat eşdeğeri", - "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Fazla insülin: Karbonhidratları dikkate alınmadan, alt hedefe ulaşmak için gerekenden %1U'den daha fazla", - "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Fazla insülin: Alt KŞ hedefine ulaşmak için gerekenden %1 daha fazla insülin.IOB(Aktif İnsülin) Karbonhidrat tarafından karşılandığından emin olun.", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Fazla insülin: Karbonhidratlar dikkate alınmadan, alt hedefe ulaşmak için gerekenden %1Ü fazla", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Alt KŞ hedefine ulaşmak için gerekenden %1 daha fazla insülin. (AİNS) Aktif İnsülin'ün karbonhidratlar tarafından karşılandığından emin olun.", "%1U reduction needed in active insulin to reach low target, too much basal?": "Alt KŞ hedefi için %1U aktif insülin azaltılmalı, bazal oranı çok mu yüksek?", - "basal adjustment out of range, give carbs?": "Bazal oran ayarlaması limit dışı, karbonhidrat alınsın mı?", - "basal adjustment out of range, give bolus?": "Bazal oran ayarlaması limit dışı, bolus alınsın mı?", - "above high": "üzerinde yüksek", - "below low": "altında düşük", - "Projected BG %1 target": "Beklenen KŞ %1 hedefi", - "aiming at": "istenen sonuç", + "basal adjustment out of range, give carbs?": "bazal ayarlaması limit dışı, karbonhidrat alınsın mı?", + "basal adjustment out of range, give bolus?": "bazal ayarlaması limit dışı, bolus alınsın mı?", + "above high": "yüksek hedefin üzerinde", + "below low": "düşük hedefin altında", + "Projected BG %1 target": "Beklenen KŞ %1", + "aiming at": "hedeflenen", "Bolus %1 units": "Bolus %1 Ünite", - "or adjust basal": "ya da bazal ayarlama", - "Check BG using glucometer before correcting!": "Düzeltme bolusu öncesi glikometreyle parmaktan KŞini kontrol edin!", - "Basal reduction to account %1 units:": "%1 birimi telafi etmek için azaltılmış Bazaloranı:", - "30m temp basal": "30 dk. geçici Bazal ", + "or adjust basal": "ya da bazalı ayarla", + "Check BG using glucometer before correcting!": "Düzeltme bolusu öncesi glukometreyle parmaktan KŞ'ni kontrol edin!", + "Basal reduction to account %1 units:": "%1 birimi telafi etmek için bazal azaltma:", + "30m temp basal": "30 dk. geçici bazal", "1h temp basal": "1 sa. geçici bazal", "Cannula change overdue!": "Kanül değişimi gecikmiş!", "Time to change cannula": "Kanül değiştirme zamanı", @@ -500,18 +500,18 @@ "Cannula age %1 hours": "Kanül yaşı %1 saat", "Inserted": "Yerleştirilmiş", "CAGE": "İnfüzyon seti yaşı", - "COB": "Aktif Karbonhidrat (COB)", - "Last Carbs": "Son Karbonhidrat", + "COB": "AKRB", + "Last Carbs": "Son Karbonhidratlar", "IAGE": "İns. Yaşı", "Insulin reservoir change overdue!": "İnsülin rezervuarı değişimi gecikmiş!", "Time to change insulin reservoir": "İnsülin rezervuarını değiştirme zamanı!", "Change insulin reservoir soon": "Yakında insülin rezervuarını değiştirin", "Insulin reservoir age %1 hours": "İnsülin rezervuar yaşı %1 saat", "Changed": "Değişmiş", - "IOB": "Gönderimdeki İns.", - "Careportal IOB": "Careportal IOB (Aktif İnsülin)", + "IOB": "AİNS", + "Careportal IOB": "Careportal AİNS (Aktif İnsülin)", "Last Bolus": "Son Bolus", - "Basal IOB": "Bazal IOB", + "Basal IOB": "Bazal AİNS", "Source": "Kaynak", "Stale data, check rig?": "Veri güncel değil, vericiyi kontrol et?", "Last received:": "Son alınan:", @@ -519,21 +519,21 @@ "%1h ago": "%1 sa. önce", "%1d ago": "%1 gün önce", "RETRO": "RETRO Geçmiş", - "SAGE": "Sensör Yaşı", + "SAGE": "SYAŞ", "Sensor change/restart overdue!": "Sensör değişimi/yeniden başlatma gecikti!", "Time to change/restart sensor": "Sensörü değiştirme/yeniden başlatma zamanı", "Change/restart sensor soon": "Sensörü yakında değiştir/yeniden başlat", "Sensor age %1 days %2 hours": "Sensör yaşı %1 gün %2 saat", "Sensor Insert": "Sensor yerleştirme", "Sensor Start": "Sensör başlatma", - "days": "Gün", + "days": "gün", "Insulin distribution": "İnsülin dağılımı", "To see this report, press SHOW while in this view": "Bu raporu görmek için bu görünümde GÖSTER düğmesine basın.", "AR2 Forecast": "AR2 Tahmini", "OpenAPS Forecasts": "OpenAPS Tahminleri", "Temporary Target": "Geçici Hedef", "Temporary Target Cancel": "Geçici Hedef İptal", - "OpenAPS Offline": "OpenAPS Offline (çevrimdışı)", + "OpenAPS Offline": "OpenAPS çevrimdışı", "Profiles": "Profiller", "Time in fluctuation": "Dalgalanmada geçen süre", "Time in rapid fluctuation": "Hızlı dalgalanmalarda geçen süre", @@ -544,9 +544,9 @@ "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Saat başına ortalama değişim, gözlem periyodu üzerindeki tüm glikoz değişikliklerinin mutlak değerlerinin saat sayısına bölünmesiyle elde edilen toplam değerdir. Düşük değerler daha iyidir.", "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Aralık Dışı RMS, incelenen dönem içindeki tüm glikoz okumaları için aralık dışı mesafenin karesi alınarak, bunların toplanması, sayıma bölünmesi ve karekök alınmasıyla hesaplanır. Bu metrik, aralık içi yüzdeye benzer, ancak ölçümlerin ağırlıkları aralık dışında daha yüksektir. Daha düşük değerler daha iyidir.", "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">buradan.", - "Mean Total Daily Change": "Günde toplam ortalama değişim", - "Mean Hourly Change": "Saatte ortalama değişim", + "\">can be found here.": "\">burada bulabilirsiniz.", + "Mean Total Daily Change": "Ortalama Toplam Günlük Değişim", + "Mean Hourly Change": "Ortalama Saatlik Değişim", "FortyFiveDown": "biraz düşen", "FortyFiveUp": "biraz yükselen", "Flat": "sabit", @@ -557,8 +557,8 @@ "virtAsstUnknown": "Bu değer şu anda bilinmiyor. Daha fazla ayrıntı için lütfen Nightscout sitenize bakın.", "virtAsstTitleAR2Forecast": "AR2 Tahmini", "virtAsstTitleCurrentBasal": "Geçerli Bazal", - "virtAsstTitleCurrentCOB": "Geçerli Karbonhidrat", - "virtAsstTitleCurrentIOB": "Geçerli İnsülin", + "virtAsstTitleCurrentCOB": "Geçerli AKRB", + "virtAsstTitleCurrentIOB": "Geçerli AİNS", "virtAsstTitleLaunch": "Nightscout'a hoş geldiniz", "virtAsstTitleLoopForecast": "Döngü Tahmini", "virtAsstTitleLastLoop": "Son Döngü", @@ -576,31 +576,31 @@ "virtAsstTitleCGMTxAge": "CGM Verici Yaşı", "virtAsstTitleCGMNoise": "CGM Gürültüsü", "virtAsstTitleDelta": "Kan Şekeri Delta", - "virtAsstStatus": "%1 ve %2 e kadar %3.", + "virtAsstStatus": "%3 itibariyle %1 ve %2.", "virtAsstBasal": "%1 geçerli bazal oranı saatte %2 ünite", "virtAsstBasalTemp": "%1 geçici bazal %2 ünite %3 sona eriyor", - "virtAsstIob": "ve Sizde %1 aktif insulin var", - "virtAsstIobIntent": "Sizde %1 aktif insülin var", - "virtAsstIobUnits": "hala %1 birim", + "virtAsstIob": "ve %1 aktif insulin var.", + "virtAsstIobIntent": "%1 aktif insülin var", + "virtAsstIobUnits": "%1 ünite", "virtAsstLaunch": "Nightscout'ta neyi kontrol etmek istersiniz?", "virtAsstPreamble": "Senin", - "virtAsstPreamble3person": "%1 bir tane var", + "virtAsstPreamble3person": "%1 ", "virtAsstNoInsulin": "yok", "virtAsstUploadBattery": "Yükleyici piliniz %1", - "virtAsstReservoir": "%1 birim kaldı", + "virtAsstReservoir": "%1 ünite kaldı", "virtAsstPumpBattery": "Pompa piliniz %1 %2", "virtAsstUploaderBattery": "Yükleyicinizin pili %1 seviyesinde", "virtAsstLastLoop": "Son başarılı döngü %1 oldu", "virtAsstLoopNotAvailable": "Döngü eklentisi etkin görünmüyor", - "virtAsstLoopForecastAround": "Döngü tahminine göre sonraki %2 ye göre around %1 olması bekleniyor", - "virtAsstLoopForecastBetween": "Döngü tahminine göre sonraki %3 ye göre between %1 and %2 olması bekleniyor", + "virtAsstLoopForecastAround": "Döngü tahminine göre, sonraki %2'de %1 civarında olmanız bekleniyor", + "virtAsstLoopForecastBetween": "Döngü tahminine göre, sonraki %3'te %1 ile %2 arasında olmanız bekleniyor", "virtAsstAR2ForecastAround": "AR2 tahminine göre, sonraki %2'de %1 civarında olmanız bekleniyor", "virtAsstAR2ForecastBetween": "AR2 tahminine göre, sonraki %3'te %1 ile %2 arasında olmanız bekleniyor", "virtAsstForecastUnavailable": "Mevcut verilerle tahmin edilemedi", "virtAsstRawBG": "Ham kan şekeriniz %1", "virtAsstOpenAPSForecast": "OpenAPS tarafından tahmin edilen kan şekeri %1", "virtAsstCob3person": "%1'de %2 aktif karbonhidrat var", - "virtAsstCob": "Siz de henüz %1 aktif karbonhidrat var", + "virtAsstCob": "%1 aktif karbonhidrat var", "virtAsstCGMMode": "CGM modunuz %2 itibariyle %1 idi.", "virtAsstCGMStatus": "CGM durumunuz %2 itibariyle %1 idi.", "virtAsstCGMSessAge": "CGM oturumunuz %1 gün ve %2 saattir etkin.", @@ -609,15 +609,15 @@ "virtAsstCGMTxAge": "CGM transmitter vericiniz %1 günlük.", "virtAsstCGMNoise": "CGM sensör gürültüsü %2 itibariyle %1 idi.", "virtAsstCGMBattOne": "CGM piliniz %2 itibariyle %1 volttu.", - "virtAsstCGMBattTwo": "CGM sensör pil seviyeleriniz %3 itibariyle %1 volt ve %2 volttur.", + "virtAsstCGMBattTwo": "CGM pil seviyeleriniz %3 itibariyle %1 volt ve %2 volttur.", "virtAsstDelta": "Deltanız %2 ile %3 arasında %1 idi.", "virtAsstDeltaEstimated": "Tahmini deltanız %2 ile %3 arasında %1 idi.", - "virtAsstUnknownIntentTitle": "Ismeretlen szándék", + "virtAsstUnknownIntentTitle": "Niyet Bilinmiyor", "virtAsstUnknownIntentText": "Üzgünüm, ne istediğinizi bilmiyorum.", "Fat [g]": "Yağ [g]", "Protein [g]": "Protein [g]", "Energy [kJ]": "Enerji [kJ]", - "Clock Views:": "Saat Görünümü", + "Clock Views:": "Saat Görünümleri:", "Clock": "Saat", "Color": "Renk", "Simple": "Sade", @@ -625,19 +625,19 @@ "Bolus average": "Bolus Ortalaması", "Basal average": "Bazal ortalaması", "Base basal average:": "Temel bazal ortalaması:", - "Carbs average": "Günde ortalama karbonhidrat", + "Carbs average": "Karbonhidrat ortalaması", "Eating Soon": "Yakında Yenecek", "Last entry {0} minutes ago": "Son giriş {0} dakika önce", "change": "değişiklik", "Speech": "Konuş", - "Target Top": "Hedef Üst", - "Target Bottom": "Hedef Alt", + "Target Top": "Üst Hedef", + "Target Bottom": "Alt Hedef", "Canceled": "İptal edildi", "Meter BG": "Glikometre KŞ", "predicted": "tahmin", "future": "gelecek", "ago": "önce", - "Last data received": "Alınan son veri", + "Last data received": "Son veri alındı", "Clock View": "Saat Görünümü", "Protein": "Protein", "Fat": "Yağ", @@ -655,8 +655,8 @@ "virtAsstDatabaseSize": "%1 MiB. Bu kullanılabilir veritabanı alanının %2%'sidir.", "virtAsstTitleDatabaseSize": "Veritabanı dosya boyutu", "Carbs/Food/Time": "Karbonhidrat/Gıda/Zaman", - "You have administration messages": "Yeni yönetici mesajları var", - "Admin messages in queue": "Yönetici iletileri sıraya alındı", + "You have administration messages": "Yönetim mesajlarınız var", + "Admin messages in queue": "Sıradaki yönetici mesajları", "Queue empty": "Sıra boş", "There are no admin messages in queue": "Sırada yönetici mesajı yok", "Please sign in using the API_SECRET to see your administration messages": "Yönetim mesajlarınızı görmek için lütfen API_SECRET'i kullanarak oturum açın", @@ -664,7 +664,7 @@ "Data reads enabled": "Veri okumaları etkinleştirildi", "Data writes enabled": "Veri yazma etkin", "Data writes not enabled": "Veri yazma etkin değil", - "Color prediction lines": "Renk tahmin çizgileri", + "Color prediction lines": "Renkli tahmin çizgileri", "Release Notes": "Sürüm Notları", "Check for Updates": "Güncellemeleri Kontrol Et", "Open Source": "Açık Kaynaklı", @@ -687,7 +687,7 @@ "Auth role": "Kimlik doğrulama rolü", "view without token": "token'sız görüntüle", "Remove stored token": "Depolanan token'ı kaldır", - "Weekly Distribution": "Haftalık Dağıtım", + "Weekly Distribution": "Haftalık Dağılım", "Failed authentication": "Başarısız kimlik doğrulama", "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "%1 IP adresindeki bir cihaz, yanlış kimlik bilgileriyle Nightscout ile kimlik doğrulamayı denedi. Yanlış API_SECRET veya tokenlu bir yükleyici kurulumunuz olup olmadığını kontrol ediniz?", "Default (with leading zero and U)": "Varsayılan (başında sıfır ve U ile)", @@ -698,7 +698,7 @@ "Bolus Display Threshold": "Bolus Görüntüleme Eşiği", "%1 U and Over": "%1 U ve Üzeri", "Event repeated %1 times.": "Etkinlik %1 kez tekrarlandı.", - "minutes": "dakikalar", + "minutes": "dakika", "Last recorded %1 %2 ago.": "En son %1 %2 önce kaydedildi.", "Security issue": "Güvenlik Sorunu", "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Zayıf API_SECRET algılandı. Yetkisiz erişim riskini azaltmak için lütfen küçük ve BÜYÜK harf, sayı ve !#%&/ gibi alfasayısal olmayan karakterleri bir arada kullanın. API_SECRET'in minimum uzunluğu 12 karakterdir.", diff --git a/translations/uk_UA.json b/translations/uk_UA.json new file mode 100644 index 00000000000..9f816014c82 --- /dev/null +++ b/translations/uk_UA.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Прослуховування порту", + "Mo": "Пн", + "Tu": "Вт", + "We": "Ср", + "Th": "Чт", + "Fr": "Пт", + "Sa": "Сб", + "Su": "Нд", + "Monday": "Понеділок", + "Tuesday": "Вівторок", + "Wednesday": "Середа", + "Thursday": "Четвер", + "Friday": "П'ятниця", + "Saturday": "Субота", + "Sunday": "Неділя", + "Category": "Категорія", + "Subcategory": "Підкатегорія", + "Name": "Ім'я", + "Today": "Сьогодні", + "Last 2 days": "Минулі 2 дні", + "Last 3 days": "Минулі 3 дні", + "Last week": "Минулий тиждень", + "Last 2 weeks": "Минулих 2 тижні", + "Last month": "Минулий місяць", + "Last 3 months": "Минулих 3 місяці", + "From": "З", + "To": "До", + "Notes": "Примітки", + "Food": "Їжа", + "Insulin": "Інсулін", + "Carbs": "Вуглеводи", + "Notes contain": "Примітки містять", + "Target BG range bottom": "Нижній поріг цільових значень ЦК", + "top": "верх", + "Show": "Показати", + "Display": "Показувати", + "Loading": "Завантаження", + "Loading profile": "Завантаження профілю", + "Loading status": "Завантаження статусу", + "Loading food database": "Завантаження бази продуктів", + "not displayed": "не показано", + "Loading CGM data of": "Завантаження даних моніторингу", + "Loading treatments data of": "Завантаження даних терапії", + "Processing data of": "Обробка даних від", + "Portion": "Порція", + "Size": "Розмір", + "(none)": "(немає)", + "None": "Немає", + "": "<немає>", + "Result is empty": "Результату немає", + "Day to day": "День за день", + "Week to week": "Тиждень у тиждень", + "Daily Stats": "Щоденна статистика", + "Percentile Chart": "Відсоткова діаграма", + "Distribution": "Розподіл", + "Hourly stats": "Погодинна статистика", + "netIOB stats": "Статистика netIOB", + "temp basals must be rendered to display this report": "для звіту потрібно промалювати час базалу", + "No data available": "Немає даних", + "Low": "Низький", + "In Range": "В діапазоні", + "Period": "Перiод", + "High": "Високий", + "Average": "Середнє", + "Low Quartile": "Нижня четверть", + "Upper Quartile": "Верхня четверть", + "Quartile": "Четверть", + "Date": "Дата", + "Normal": "Нормальний", + "Median": "Медіана", + "Readings": "Читання", + "StDev": "Стандартне відхилення", + "Daily stats report": "Щоденна статистика", + "Glucose Percentile report": "Процентний звіт", + "Glucose distribution": "Розподіл глюкози", + "days total": "всього днів", + "Total per day": "Всього за добу", + "Overall": "Усього", + "Range": "Діапозон", + "% of Readings": "% вимірювань", + "# of Readings": "# вимірювань", + "Mean": "Середнє", + "Standard Deviation": "Стандартне відхилення", + "Max": "Макс", + "Min": "Мін", + "A1c estimation*": "Очікуваний HbA1c*", + "Weekly Success": "Підсумки тижня", + "There is not sufficient data to run this report. Select more days.": "Недостатньо даних для звіту. Виберіть більше днів.", + "Using stored API secret hash": "Використання збереженого хешу API", + "No API secret hash stored yet. You need to enter API secret.": "Немає збереженого хешу API. Вам потрібно ввести API.", + "Database loaded": "Базу даних завантажено", + "Error: Database failed to load": "Помилка: Не вдалося завантажити базу даних", + "Error": "Помилка", + "Create new record": "Створити новий запис", + "Save record": "Зберегти запис", + "Portions": "Порції", + "Unit": "Одиниця", + "GI": "GI", + "Edit record": "Редагувати запис", + "Delete record": "Видалити запис", + "Move to the top": "Перемістити на початок", + "Hidden": "Прихований", + "Hide after use": "Приховати після використання", + "Your API secret must be at least 12 characters long": "Ваш пароль API повинен мати щонайменше 12 символів", + "Bad API secret": "Не вірний пароль API", + "API secret hash stored": "Хеш пароля API збережений", + "Status": "Статус", + "Not loaded": "Не завантажено", + "Food Editor": "Редактор продуктів", + "Your database": "Ваша база даних", + "Filter": "Фільтр", + "Save": "Зберегти", + "Clear": "Очистити", + "Record": "Запис", + "Quick picks": "Швидкий вибір", + "Show hidden": "Показати приховане", + "Your API secret or token": "Ваш пароль API або токен", + "Remember this device. (Do not enable this on public computers.)": "Запам'ятати цей пристрій. (Не використовуйте у загальному доступі.)", + "Treatments": "Терапія", + "Time": "Час", + "Event Type": "Тип події", + "Blood Glucose": "Глюкоза крові", + "Entered By": "Введено", + "Delete this treatment?": "Видалити цю терапію?", + "Carbs Given": "Видано вуглеводів", + "Insulin Given": "Введено інсуліну", + "Event Time": "Час події", + "Please verify that the data entered is correct": "Будь ласка перевірте правильність введених даних", + "BG": "ГК", + "Use BG correction in calculation": "При розрахунку враховувати корекцію ГК", + "BG from CGM (autoupdated)": "ГК із моніторингу (автооновлення)", + "BG from meter": "ГК із глюкометра", + "Manual BG": "Ручне введення ГК", + "Quickpick": "Швидкий вибір", + "or": "або", + "Add from database": "Додати з бази даних", + "Use carbs correction in calculation": "Під час розрахунку використовувати вуглеводну корекцію", + "Use COB correction in calculation": "Під час розрахунку використовувати COB корекцію", + "Use IOB in calculation": "Під час розрахунку використовувати IOB", + "Other correction": "Інша корекція", + "Rounding": "Округлення", + "Enter insulin correction in treatment": "Введіть корекцію інсуліну в терапію", + "Insulin needed": "Потрібен інсулін", + "Carbs needed": "Потрібні вуглеводи", + "Carbs needed if Insulin total is negative value": "Потрібні вуглеводи, якщо сумарний інсулін є негативною величиною", + "Basal rate": "Норма базалу", + "60 minutes earlier": "60 хв раніше", + "45 minutes earlier": "45 хв раніше", + "30 minutes earlier": "30 хв раніше", + "20 minutes earlier": "20 хв раніше", + "15 minutes earlier": "На 15 хвилин раніше", + "Time in minutes": "Час у хвилинах", + "15 minutes later": "Через 15 хвилин", + "20 minutes later": "Через 20 хвилин", + "30 minutes later": "На 30 хв пізніше", + "45 minutes later": "На 45 хв пізніше", + "60 minutes later": "На 60 хв пізніше", + "Additional Notes, Comments": "Додаткові примітки", + "RETRO MODE": "Режим РЕТРО", + "Now": "Зараз", + "Other": "Інше", + "Submit Form": "Підтвердити форму", + "Profile Editor": "Редактор профілю", + "Reports": "Звіти", + "Add food from your database": "Додайте їжу з вашої бази даних", + "Reload database": "Перезавантажити базу даних", + "Add": "Додати", + "Unauthorized": "Не авторизовано", + "Entering record failed": "Введення запису не вдалося", + "Device authenticated": "Пристрій автентифіковано", + "Device not authenticated": "Пристрій не автентифіковано", + "Authentication status": "Статус автентифікації", + "Authenticate": "Автентифікувати", + "Remove": "Видаліть", + "Your device is not authenticated yet": "Ваш пристрій ще не автентифіковано", + "Sensor": "Датчик", + "Finger": "Палець", + "Manual": "Вручну", + "Scale": "Масштаб", + "Linear": "Лінійний", + "Logarithmic": "Логарифмічний", + "Logarithmic (Dynamic)": "Логарифмічна (Динамічна)", + "Insulin-on-Board": "Активний інсулін (IOB)", + "Carbs-on-Board": "Активні вуглеводи COB", + "Bolus Wizard Preview": "Калькулятор болюсу", + "Value Loaded": "Значення завантажено", + "Cannula Age": "Катетеру", + "Basal Profile": "Профіль базала", + "Silence for 30 minutes": "Тиша на 30 хвилин", + "Silence for 60 minutes": "Тиша на 60 хвилин", + "Silence for 90 minutes": "Тиша на 90 хвилин", + "Silence for 120 minutes": "Тиша на 120 хвилин", + "Settings": "Налаштування", + "Units": "Одиниці", + "Date format": "Формат дати", + "12 hours": "12 годин", + "24 hours": "24 години", + "Log a Treatment": "Записати терапію", + "BG Check": "Контроль ГК", + "Meal Bolus": "Болюс на їду", + "Snack Bolus": "Подати болюс", + "Correction Bolus": "Корекція болюсу", + "Carb Correction": "Корекція вуглеводів", + "Note": "Примітка", + "Question": "Питання", + "Exercise": "Навантаження", + "Pump Site Change": "Зміна місця катетера помпи", + "CGM Sensor Start": "Старт сенсора моніторингу", + "CGM Sensor Stop": "Зупинка сенсора моніторингу", + "CGM Sensor Insert": "Встановлення сенсора моніторингу", + "Sensor Code": "Код сенсора", + "Transmitter ID": "ID передавача", + "Dexcom Sensor Start": "Старт сенсора Dexcom", + "Dexcom Sensor Change": "Зміна сенсора Dexcom", + "Insulin Cartridge Change": "Зміна картриджа інсуліну", + "D.A.D. Alert": "Сигнал D.A.D.", + "Glucose Reading": "Зчитування глюкози", + "Measurement Method": "Метод вимірювання", + "Meter": "Вимірювач", + "Amount in grams": "Кількість в грамах", + "Amount in units": "Кількість в одиницях", + "View all treatments": "Переглянути всю терапію", + "Enable Alarms": "Увімкнути сигнали тривоги", + "Pump Battery Change": "Заміна батареї помпи", + "Pump Battery Age": "Батарея помпи працює", + "Pump Battery Low Alarm": "Низький заряд батареї помпи", + "Pump Battery change overdue!": "Пропущено термін заміни батареї помпи!", + "When enabled an alarm may sound.": "Коли ввімкнено, може звучати сигнал.", + "Urgent High Alarm": "Увага висока глікемія", + "High Alarm": "Висока глікемія", + "Low Alarm": "Низька глікемія", + "Urgent Low Alarm": "Увага низька глікемія", + "Stale Data: Warn": "Попереджати про застарілі дані", + "Stale Data: Urgent": "Увага застарілі дані", + "mins": "хв.", + "Night Mode": "Нічний режим", + "When enabled the page will be dimmed from 10pm - 6am.": "При активації сторінка буде затемнена з 22:00 до 06:00.", + "Enable": "Увімкнути", + "Show Raw BG Data": "Показувати необроблені дані", + "Never": "Ніколи", + "Always": "Завжди", + "When there is noise": "Коли є шум", + "When enabled small white dots will be displayed for raw BG data": "При ввімкнені необроблені дані будуть помітні як дрібні білі крапки", + "Custom Title": "Довільна назва", + "Theme": "Тема", + "Default": "За умовчанням", + "Colors": "Кольори", + "Colorblind-friendly colors": "Колірна гама для людей із порушеннями зору", + "Reset, and use defaults": "Скидання та використання за замовчуванням", + "Calibrations": "Калібрування", + "Alarm Test / Smartphone Enable": "Перевірка оповіщень / Смартфон активний", + "Bolus Wizard": "Калькулятор болюса", + "in the future": "у майбутньому", + "time ago": "тому", + "hr ago": " год тому", + "hrs ago": " год тому", + "min ago": "хв тому", + "mins ago": "хв тому", + "day ago": "день назад", + "days ago": "днів назад", + "long ago": "давно", + "Clean": "Чисто", + "Light": "Легкий", + "Medium": "Середній", + "Heavy": "Сильний", + "Treatment type": "Тип події", + "Raw BG": "RAW дані", + "Device": "Пристрій", + "Noise": "Шум", + "Calibration": "Калібрування", + "Show Plugins": "Показати плагіни", + "About": "Про застосунок", + "Value in": "Значення в", + "Carb Time": "Час прийому вуглеводів", + "Language": "Мова", + "Add new": "Додати новий", + "g": "г", + "ml": "мл", + "pcs": "шт", + "Drag&drop food here": "Перетягніть сюди їжу", + "Care Portal": "Портал терапії", + "Medium/Unknown": "Середній/Невідомий", + "IN THE FUTURE": "У МАЙБУТНЬОМУ", + "Order": "Сортувати", + "oldest on top": "Старі зверху", + "newest on top": "Нові зверху", + "All sensor events": "Усі події сенсора", + "Remove future items from mongo database": "Видалити майбутні дані з бази Mongo", + "Find and remove treatments in the future": "Знаходити та видаляти методи терапії в майбутньому", + "This task find and remove treatments in the future.": "Ця опція знайде та видалить терапію в майбутньому.", + "Remove treatments in the future": "Видаляйте терапії в майбутньому", + "Find and remove entries in the future": "Знайти та видалити записи в майбутньому", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Ця опція знайде і видалить дані CGM у майбутньому, створені завантажувачем з неправильною датою/часом.", + "Remove entries in the future": "Видалити записи в майбутньому", + "Loading database ...": "Завантаження бази даних...", + "Database contains %1 future records": "База даних містить %1 майбутніх записів", + "Remove %1 selected records?": "Видалити %1 вибраних записів?", + "Error loading database": "Помилка завантаження бази даних", + "Record %1 removed ...": "Запис %1 видалено...", + "Error removing record %1": "Помилка при видаленні запису %1", + "Deleting records ...": "Видалення записів ...", + "%1 records deleted": "%1 записів видалено", + "Clean Mongo status database": "Очистити статус бази даних Mongo", + "Delete all documents from devicestatus collection": "Видалити всі документи з пристроїв збору", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Ця опція видаляє всі документи з пристроїв збору. Корисно, коли стан батареї завантажується некоректно.", + "Delete all documents": "Видалити всі документи", + "Delete all documents from devicestatus collection?": "Видалити всі документи з пристроїв збору?", + "Database contains %1 records": "База даних містить %1 записів", + "All records removed ...": "Усі записи видалено ...", + "Delete all documents from devicestatus collection older than 30 days": "Видалити всі документи з пристроїв збору старші 30 днів", + "Number of Days to Keep:": "Кількість днів для зберігання:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Ця опція видаляє всі документи пристроїв збору, яким понад 30 днів. Корисно, коли статус батареї оновлюється некоректно.", + "Delete old documents from devicestatus collection?": "Видалити старі документи з пристрою збору?", + "Clean Mongo entries (glucose entries) database": "Очистити записи глюкози у базі даних Mongo", + "Delete all documents from entries collection older than 180 days": "Видалити всі документи із записів старше 180 днів", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Ця опція видалить всі документи із записів старше 180 днів. Корисно, коли статус батареї оновлюється некоректно.", + "Delete old documents": "Видалити старі документи", + "Delete old documents from entries collection?": "Видалити старі документи із записів?", + "%1 is not a valid number": "%1 є некоректним числом", + "%1 is not a valid number - must be more than 2": "%1 є некоректним числом - має бути більше ніж 2", + "Clean Mongo treatments database": "Очистити базу даних терапії Mongo", + "Delete all documents from treatments collection older than 180 days": "Видалити всі документи з терапії старше 180 днів", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Ця опція видалить всі документи з терапії старше 180 днів. Корисно, коли статус батареї оновлюється некоректно.", + "Delete old documents from treatments collection?": "Видалити старі документи з терапії?", + "Admin Tools": "Інструменти адміністратора", + "Nightscout reporting": "Звіт Nightscout", + "Cancel": "Скасувати", + "Edit treatment": "Редагувати терапію", + "Duration": "Тривалість", + "Duration in minutes": "Тривалість у хвилинах", + "Temp Basal": "Тимч. базал", + "Temp Basal Start": "Початок тимч. базала", + "Temp Basal End": "Закінчення тимч. базала", + "Percent": "Відсоток", + "Basal change in %": "Зміна базала в %", + "Basal value": "Величина базала", + "Absolute basal value": "Абсолютна величина базала", + "Announcement": "Оголошення", + "Loading temp basal data": "Завантаження даних тимч. базала", + "Save current record before changing to new?": "Зберегти поточний запис перед переходом до нових?", + "Profile Switch": "Перемикач профілю", + "Profile": "Профіль", + "General profile settings": "Загальні налаштування профілю", + "Title": "Назва", + "Database records": "Записи бази даних", + "Add new record": "Додати новий запис", + "Remove this record": "Видалити цей запис", + "Clone this record to new": "Клонувати цей запис у новий", + "Record valid from": "Запис дійсний від", + "Stored profiles": "Збережені профілі", + "Timezone": "Часовий пояс", + "Duration of Insulin Activity (DIA)": "Тривалість дії інсуліну (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Представляє типову тривалість, протягом якої інсулін набуває чинності. Залежить від пацієнта та типу інсуліну. Зазвичай 3-4 години для більшості помпових інсулінів і більшості пацієнтів.", + "Insulin to carb ratio (I:C)": "Співвідношення інсулін/вуглеводи (I:C)", + "Hours:": "Години:", + "hours": "години", + "g/hour": "г/год", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "г вуглеводів на одиницю інсуліну. Співвідношення показує кількість г вуглеводів, яке компенсується кожною одиницею інсуліну.", + "Insulin Sensitivity Factor (ISF)": "Чутливість до інсуліну (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL або mmol/L на одиницю інсуліну. Коефіцієнт того, скільки BG змінюється з кожною одиницею інсуліну на корекцію.", + "Carbs activity / absorption rate": "Активність вуглеводів / швидкість засвоєння", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "грам на одиницю часу. Представляє зміну кількості вуглеводів в організмі COB за одиницю часу і кількість активних вуглеводів. Крива засвоєння вуглеводів менш зрозуміла ніж активність інсуліну, але приблизно може бути представлена ​​у вигляді початкової затримки з наступною постійною швидкістю поглинання (г/год).", + "Basal rates [unit/hour]": "Швидкість базалу [од./час]", + "Target BG range [mg/dL,mmol/L]": "Цільовий діапазон [mg/dL, mmol/L]", + "Start of record validity": "Початок валідності записів", + "Icicle": "Бурулька", + "Render Basal": "Показувати базал", + "Profile used": "Використовуваний профіль", + "Calculation is in target range.": "Розрахункова величина у цільовому діапазоні.", + "Loading profile records ...": "Завантаження записів профілю...", + "Values loaded.": "Значення завантажено.", + "Default values used.": "Використовуються стандартні значення.", + "Error. Default values used.": "Помилка. Використовуються стандартні значення.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Діапазони нижніх та верхніх цільових значень не збігаються. Відновлено значення за промовчанням.", + "Valid from:": "Дійсний з:", + "Save current record before switching to new?": "Зберегти поточний запис перед переходом до нових?", + "Add new interval before": "Додати новий інтервал перед цим", + "Delete interval": "Видалити інтервал", + "I:C": "І:С", + "ISF": "ISF", + "Combo Bolus": "Комбінований болюс", + "Difference": "Різниця", + "New time": "Новий час", + "Edit Mode": "Режим редагування", + "When enabled icon to start edit mode is visible": "При активації видно піктограму почати режим редагування", + "Operation": "Операція", + "Move": "Перемістити", + "Delete": "Видалити", + "Move insulin": "Перемістити інсулін", + "Move carbs": "Перемістити вуглеводи", + "Remove insulin": "Видалити інсулін", + "Remove carbs": "Видалити вуглеводи", + "Change treatment time to %1 ?": "Змінити час події на %1?", + "Change carbs time to %1 ?": "Змінити час прийому вуглеводів на %1?", + "Change insulin time to %1 ?": "Змінити час подачі інсуліну на %1?", + "Remove treatment ?": "Видалити подію?", + "Remove insulin from treatment ?": "Видалити інсулін з події?", + "Remove carbs from treatment ?": "Видалити вуглеводи з події?", + "Rendering": "Побудова графіка", + "Loading OpenAPS data of": "Завантаження даних OpenAPS", + "Loading profile switch data": "Завантаження даних перемикання профілю", + "Redirecting you to the Profile Editor to create a new profile.": "Перенаправлення вас до редактора профілю, щоб створити новий профіль.", + "Pump": "Помпа", + "Sensor Age": "Термін сенсора", + "Insulin Age": "Термін інсуліну", + "Temporary target": "Тимчасова ціль", + "Reason": "Підстава", + "Eating soon": "Очікуваний прийом їжі", + "Top": "верх", + "Bottom": "низ", + "Activity": "Активність", + "Targets": "Цілі", + "Bolus insulin:": "Болюс інсулін:", + "Base basal insulin:": "Базовий базал інсулін:", + "Positive temp basal insulin:": "Позитивне значення базал інсуліну:", + "Negative temp basal insulin:": "Негативне значення базал інсуліну:", + "Total basal insulin:": "Загальний базал інсулін:", + "Total daily insulin:": "Загальний добовий інсулін:", + "Unable to save Role": "Неможливо зберегти Роль", + "Unable to delete Role": "Неможливо видалити Роль", + "Database contains %1 roles": "База даних містить %1 ролей", + "Edit Role": "Змінити Роль", + "admin, school, family, etc": "адмін, школа, сім'я тощо", + "Permissions": "Дозволи", + "Are you sure you want to delete: ": "Ви впевнені, що хочете видалити: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Кожна роль матиме 1 або більше дозволів. Дозвіл * це символ підставляння, дозволи це ієрархія, що використовує : як роздільник.", + "Add new Role": "Додати нову Роль", + "Roles - Groups of People, Devices, etc": "Ролі - групи людей, пристроїв тощо", + "Edit this role": "Редагувати дану Роль", + "Admin authorized": "Адміністратора авторизовано", + "Subjects - People, Devices, etc": "Суб'єкти - люди, пристрої тощо", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Кожна тема матиме унікальний токен доступу та 1 або більше ролей. Натисніть на маркер доступу, щоб відкрити новий вид з обраною темою, цим секретним посиланням потім можна поділитися.", + "Add new Subject": "Додати нового суб'єкта", + "Unable to save Subject": "Неможливо зберегти суб'єкт", + "Unable to delete Subject": "Неможливо видалити суб'єкт", + "Database contains %1 subjects": "База даних містить %1 суб'єктів", + "Edit Subject": "Редагувати суб'єкт", + "person, device, etc": "особа, пристрій тощо", + "role1, role2": "роль 1, роль 2", + "Edit this subject": "Редагувати цей суб'єкт", + "Delete this subject": "Видалити цей суб'єкт", + "Roles": "Ролі", + "Access Token": "Маркер доступу", + "hour ago": "година тому", + "hours ago": "години тому", + "Silence for %1 minutes": "Тиша %1 хвилин", + "Check BG": "Перевірте ЦК", + "BASAL": "Базал", + "Current basal": "Поточний базал", + "Sensitivity": "Чутливість", + "Current Carb Ratio": "Актуальне співвідношення інсуліну та вуглеводів", + "Basal timezone": "Часовий пояс базалу", + "Active profile": "Активований профіль", + "Active temp basal": "Активний тимчасовий базал", + "Active temp basal start": "Початок активного тимчасового базалу", + "Active temp basal duration": "Тривалість активного тимчасового базалу", + "Active temp basal remaining": "Залишок активного тимчасового базалу", + "Basal profile value": "Значення профілю базалу", + "Active combo bolus": "Активний комбінований болюс", + "Active combo bolus start": "Початок активного комбінованого болюсу", + "Active combo bolus duration": "Тривалість активного комбінованого болюсу", + "Active combo bolus remaining": "Залишок активного комбінованого болюсу", + "BG Delta": "Дельта ГК", + "Elapsed Time": "Минуло часу", + "Absolute Delta": "Абсолютна зміна", + "Interpolated": "Інтерпольовано", + "BWP": "Калькулятор болюсу", + "Urgent": "Увага", + "Warning": "Попередження", + "Info": "Інформація", + "Lowest": "Найнижче", + "Snoozing high alarm since there is enough IOB": "Відкладений сигналу високого СК через достатню кількість IOB", + "Check BG, time to bolus?": "Перевірте ГК, дати болюс?", + "Notice": "Примітка", + "required info missing": "необхідна інформація відсутня", + "Insulin on Board": "Активний інсулін (IOB)", + "Current target": "Актуальне цільове значення", + "Expected effect": "Очікуваний ефект", + "Expected outcome": "Очікуваний результат", + "Carb Equivalent": "Еквівалент у вуглеводах", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Вихід інсуліну рівного %1 од, необхідного для досягнення нижнього цільного значення, вуглеводи не прийняті до розрахунку", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Надлишок інсуліну, що дорівнює %1 од, необхідного для досягнення нижнього цільового значення, ПОКРИЙТЕ АКТИВНИЙ ІНСУЛІН ВУГЛЕВОДАМИ", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Для досягнення нижнього цільового значення необхідно знизити величину активного інсуліну на %1 од, чи велика база?", + "basal adjustment out of range, give carbs?": "Коригування базалу поза діапазоном, додати вуглеводів?", + "basal adjustment out of range, give bolus?": "Коригування базалу поза діапазоном, додати болюс?", + "above high": "вище верхньої межі", + "below low": "нижче нижньої межі", + "Projected BG %1 target": "Прогнозована глікемія %1", + "aiming at": "ціль на", + "Bolus %1 units": "Болюс %1 од.", + "or adjust basal": "чи коректувати базал", + "Check BG using glucometer before correcting!": "Перед коригуванням звірте ГК із глюкометром", + "Basal reduction to account %1 units:": "Зниження бази через %1 од. болюса", + "30m temp basal": "30 хв тимчасового базалу", + "1h temp basal": "1 год тимчасового базалу", + "Cannula change overdue!": "Термін заміни катетера помпи минув", + "Time to change cannula": "Час змінити катетер помпи", + "Change cannula soon": "Наближається час заміни катетера помпи", + "Cannula age %1 hours": "Катетер помпи відпрацював %1 год", + "Inserted": "Вставлений", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Остані вуглеводи", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Термін заміни резервуару інсуліну минув!", + "Time to change insulin reservoir": "Настав термін заміни резервуару інсуліну", + "Change insulin reservoir soon": "Настає термін заміни резервуару інсуліну", + "Insulin reservoir age %1 hours": "Картриджу інсуліну %1 годин", + "Changed": "Змінено", + "IOB": "IOB", + "Careportal IOB": "IOB на порталі терапії", + "Last Bolus": "Минулий болюс", + "Basal IOB": "Базал IOB", + "Source": "Джерело", + "Stale data, check rig?": "Застарілі дані, перевірити пристрій?", + "Last received:": "Востаннє отримано:", + "%1m ago": "%1 хв тому", + "%1h ago": "%1 год тому", + "%1d ago": "%1 днів тому", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Заміна/рестарт сенсора пропущений!", + "Time to change/restart sensor": "Час заміни/рестарта сенсора", + "Change/restart sensor soon": "Наближається заміна/рестарт сенсора", + "Sensor age %1 days %2 hours": "Термін сенсора %1 дн %2 годин", + "Sensor Insert": "Сенсор встановлено", + "Sensor Start": "Старт сенсора", + "days": "днів", + "Insulin distribution": "Розподіл інсуліну", + "To see this report, press SHOW while in this view": "Щоб побачити звіт, натисніть Показати", + "AR2 Forecast": "AR2 прогноз", + "OpenAPS Forecasts": "Прогноз OpenAPS", + "Temporary Target": "Тимчасова ціль", + "Temporary Target Cancel": "Скасування тимчасової цілі", + "OpenAPS Offline": "OpenAPS не в мережі", + "Profiles": "Профілі", + "Time in fluctuation": "Час флуктуацій", + "Time in rapid fluctuation": "Час швидких флуктуацій", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Це лише грубі оцінки, які можуть бути неточними і не замінюють фактичного тестування крові. Звідси взята формула:", + "Filter by hours": "Фільтрувати за годинами", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Час флуктуацій і час швидких флуктуацій означає % часу в аналізований період, протягом якого ГК змінювалася відносно швидко або просто швидко. Нижчі значення краще.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Усереднена щоденна зміна це сума абсолютних величин всіх відхилень ЦК в аналізований період, поділена на кількість днів. Менша величина краща.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Усереднена годинна зміна це сума абсолютних величин всіх відхилень ЦК в аналізований період, поділена на кількість годин у цей період. Менша величина краща.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Середнє квадратичне поза діапазоном розраховується шляхом зведення в квадрат дистанції вимірів поза діапазоном для всіх значень глікемії за аналізований період, їх підсумовування, поділу на загальну кількість та вилучення квадратного коріння. Ця методика схожа з розрахунком відсотка значень у діапазоні, але значення за межами діапазону виявляються вагомішими. Чим нижче значення, тим краще.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">можна знайти тут.", + "Mean Total Daily Change": "Середня зміна за день", + "Mean Hourly Change": "Середня зміна за годину", + "FortyFiveDown": "незначне падіння", + "FortyFiveUp": "незначний ріст", + "Flat": "Рівний", + "SingleUp": "зростає", + "SingleDown": "падає", + "DoubleDown": "стрімко зростає", + "DoubleUp": "стрімко падає", + "virtAsstUnknown": "На даний час величина невідома. Зайдіть на сайт Nightscout.", + "virtAsstTitleAR2Forecast": "AR2 прогноз", + "virtAsstTitleCurrentBasal": "Актуальний базал", + "virtAsstTitleCurrentCOB": "Активні COB", + "virtAsstTitleCurrentIOB": "Активний IOB", + "virtAsstTitleLaunch": "Ласкаво просимо до Nightscout", + "virtAsstTitleLoopForecast": "Прогноз Loop", + "virtAsstTitleLastLoop": " Минулий Loop", + "virtAsstTitleOpenAPSForecast": "Прогноз OpenAPS", + "virtAsstTitlePumpReservoir": "Залишилося інсуліну", + "virtAsstTitlePumpBattery": "Батарея помпи", + "virtAsstTitleRawBG": "Актуальний RAW ГК", + "virtAsstTitleUploaderBattery": "Батарея завантажувача", + "virtAsstTitleCurrentBG": "Актуальна ГК", + "virtAsstTitleFullStatus": "Повний статус", + "virtAsstTitleCGMMode": "CGM режим", + "virtAsstTitleCGMStatus": "CGM статус", + "virtAsstTitleCGMSessionAge": "CGM вік сесії", + "virtAsstTitleCGMTxStatus": "CGM статус передавача", + "virtAsstTitleCGMTxAge": "CGM строк передавача", + "virtAsstTitleCGMNoise": "CGM шум", + "virtAsstTitleDelta": "Дельта ГК", + "virtAsstStatus": "%1 та %2 починаючи з %3.", + "virtAsstBasal": "%1 поточний базал %2 од за годину", + "virtAsstBasalTemp": "%1 тимчасовий базал %2 од за годину закінчиться %3", + "virtAsstIob": "і ви маєте %1 інсуліну в організмі.", + "virtAsstIobIntent": "ви маєте %1 інсуліну в організмі", + "virtAsstIobUnits": "%1 од", + "virtAsstLaunch": "Що б ви хотіли перевірити на Nightscout?", + "virtAsstPreamble": "Ваш", + "virtAsstPreamble3person": "%1 має", + "virtAsstNoInsulin": "немає", + "virtAsstUploadBattery": "Батарея завантажувача %1", + "virtAsstReservoir": "У вас залишилася %1 од", + "virtAsstPumpBattery": "Батарея помпи %1 %2", + "virtAsstUploaderBattery": "Батарея завантажувача %1", + "virtAsstLastLoop": "Останній успішний цикл був %1", + "virtAsstLoopNotAvailable": "Плагін циклу не є активним", + "virtAsstLoopForecastAround": "За прогнозом алгоритму , очікувана ГК близько %1 у наступні %2", + "virtAsstLoopForecastBetween": "За прогнозом алгоритму, очікувана ГК між %1 і %2 у наступні %3", + "virtAsstAR2ForecastAround": "За прогнозом AR2 ГК очікується в районі %1 у наступні %2", + "virtAsstAR2ForecastBetween": "За прогнозом AR2 ГК очікується між %1 і %2 у наступні %3", + "virtAsstForecastUnavailable": "Прогноз за таких даних неможливий", + "virtAsstRawBG": "Ваш RAW ГК %1", + "virtAsstOpenAPSForecast": "Прогнозована OpenAPS ГК дорівнює %1", + "virtAsstCob3person": "%1 має %2 вуглеводів", + "virtAsstCob": "У вас %1 вуглеводів", + "virtAsstCGMMode": "Ваш режим моніторингу був %1 як на %2.", + "virtAsstCGMStatus": "Ваш статус моніторингу був %1 як на %2.", + "virtAsstCGMSessAge": "Сесія моніторингу була активною протягом %1 днів та %2 годин.", + "virtAsstCGMSessNotStarted": "Зараз немає активних сеансів моніторингу.", + "virtAsstCGMTxStatus": "Ваш статус передавача моніторингу був %1 як на %2.", + "virtAsstCGMTxAge": "Ваш передавач моніторингу має %1 днів.", + "virtAsstCGMNoise": "Шум у моніторингу був %1 як на %2.", + "virtAsstCGMBattOne": "Ваш акумулятор моніторингу був %1 вольтів як на %2.", + "virtAsstCGMBattTwo": "Ваш рівень заряду батареї становив %1 вольт та %2 вольт як на %3.", + "virtAsstDelta": "Ваша різниця %1 була між %2 і %3.", + "virtAsstDeltaEstimated": "Ви оцінили дельту %1 між %2 і %3.", + "virtAsstUnknownIntentTitle": "Невідомі наміри", + "virtAsstUnknownIntentText": "Перепрошую, я не знаю про що ви запитуєте.", + "Fat [g]": "Жири (г)", + "Protein [g]": "Білок (г)", + "Energy [kJ]": "Енергетична цінність (kJ)", + "Clock Views:": "Вигляд годинника:", + "Clock": "Годинник", + "Color": "Колір", + "Simple": "Простий", + "TDD average": "Середня TDD", + "Bolus average": "Середній болюс", + "Basal average": "Середній базал", + "Base basal average:": "Середнє базового базалу:", + "Carbs average": "Середня кількість вуглеводів", + "Eating Soon": "Очікуваний прийом їжі", + "Last entry {0} minutes ago": "Останній запис {0} хвилин тому", + "change": "зміна", + "Speech": "Мова", + "Target Top": "Верхня межа", + "Target Bottom": "Нижня межа", + "Canceled": "Скасовано", + "Meter BG": "Вимірювач ГК", + "predicted": "прогнозовано", + "future": "майбутнє", + "ago": "тому", + "Last data received": "Останні дані отримані", + "Clock View": "Вигляд годинника", + "Protein": "Білки", + "Fat": "Жири", + "Protein average": "Середні білки", + "Fat average": "Середні жири", + "Total carbs": "Загальні вуглеводи", + "Total protein": "Загальні білки", + "Total fat": "Загальні жири", + "Database Size": "Розмір бази даних", + "Database Size near its limits!": "Розмір бази даних наближається до ліміту!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Розмір бази даних %1 MiB з %2 MiB. Зробіть резервну копію та очистіть базу даних!", + "Database file size": "Розмір файлу бази даних", + "%1 MiB of %2 MiB (%3%)": "%1 МіБ з %2 МіБ (%3%)", + "Data size": "Об'єм даних", + "virtAsstDatabaseSize": "%1 MiB Це %2% доступного місця в базі даних.", + "virtAsstTitleDatabaseSize": "Розмір файлу бази даних", + "Carbs/Food/Time": "Вуглеводи/Їжа/Час", + "You have administration messages": "У вас є повідомлення адміністрації", + "Admin messages in queue": "Адміністративні повідомлення в черзі", + "Queue empty": "Черга порожня", + "There are no admin messages in queue": "У черзі немає повідомлень адміністратора", + "Please sign in using the API_SECRET to see your administration messages": "Будь ласка, увійдіть за допомогою API_SECRET, щоб побачити ваші повідомлення адміністрування", + "Reads enabled in default permissions": "Читання увімкнено в стандартних дозволах", + "Data reads enabled": "Запис даних увімкнено", + "Data writes enabled": "Запис даних увімкнено", + "Data writes not enabled": "Запис даних не увімкнено", + "Color prediction lines": "Кольорові лінії прогнозів", + "Release Notes": "Примітки до релізу", + "Check for Updates": "Перевірити наявність оновлень", + "Open Source": "Відкритий вихідний код", + "Nightscout Info": "Інформація про Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Основною метою Loopalyzer є візуалізувати роботу системи замкнутого циклу Loop. Він може працювати і з іншими установками, як із закритими та відкритими циклами, так і поза циклами. Однак, залежно від того, який завантажувач ви використовуєте, як часто він може отримувати та завантажувати дані, як здатний заповнювати відсутні. Завжди переконайтесь, що графіки виглядають розумно. Найкраще переглядати по одному дню і перегортати через кілька днів.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer включає функцію зсуву за часом. Якщо ви, наприклад, снідаєте о 07:00 один день і о 08:00 в інший, то середня крива глюкози за ці два дні, швидше за все, виглядають згладженою і не показують фактичної відповіді після сніданку. Зсув часу розрахує середній час прийому цих страв і потім переведе всі дані (вуглеводи, інсулін, базал і т.д.) таким чином, що обидва прийоми їжі збігаються з середнім часом початку харчування.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "У даному прикладі всі дані першого дня зрушені на 30 хв вперед, а дані другого - на 30 хвилин тому, так що створюється враження, що ви снідали обидва рази о 7:30. Це дозволяє точніше побачити вашу справжню реакцію ГК на їду.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Зсув часу виділяє середній час початку приймання їжі сірим на тривалість дії інсуліну.", + "Note that time shift is available only when viewing multiple days.": "Зверніть увагу, що зсув часу доступний тільки при перегляді декількох днів.", + "Please select a maximum of two weeks duration and click Show again.": "Будь ласка, виберіть не більше двох тижнів і натисніть Показати знову.", + "Show profiles table": "Показати таблицю профілів", + "Show predictions": "Показати прогнози", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Інтервал приймання їжі більше %1 г вуглеводів між %2 і %3", + "Previous": "Попередні", + "Previous day": "Попередній день", + "Next day": "Наступний день", + "Next": "Наступний", + "Temp basal delta": "Дельта тимчасової базальної швидкості", + "Authorized by token": "Авторизований за токеном", + "Auth role": "Роль авторизації", + "view without token": "перегляд без токена", + "Remove stored token": "Видалити збережений токен", + "Weekly Distribution": "Щотижневий розподіл", + "Failed authentication": "Невдала автентифікація", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Пристрій з IP-адресою %1 спробував авторизуватися в Nightscout з неправильними обліковими даними. Перевірте, чи є у вас завантажувач, налаштований з неправильним API_SECRET або токеном.", + "Default (with leading zero and U)": "За замовчуванням (з початковим нулем та од.)", + "Concise (with U, without leading zero)": "Повний (зі словом од., без нуля попереду)", + "Minimal (without leading zero and U)": "Мінімальний (без нуля та слова од.)", + "Small Bolus Display": "Показувати болюси дрібними значками", + "Large Bolus Display": "Відображати болюси великими значками", + "Bolus Display Threshold": "Поріг відображення болюса", + "%1 U and Over": "%1 од. і більше", + "Event repeated %1 times.": "Подія повторюється %1 разів.", + "minutes": "хвилин", + "Last recorded %1 %2 ago.": "Останній запис %1 %2 тому.", + "Security issue": "Проблема безпеки", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Виявлено слабкий API_SECRET . Будь ласка, використовуйте поєднання малих і великих літер, цифр і неалфавітно-цифрових символів, таких як !#%&/ щоб зменшити ризик несанкціонованого доступу. Мінімальна довжина API_SECRET становить 12 символів.", + "less than 1": "менш ніж 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Пароль MongoDB і API_SECRET збігається. Це дійсно погана ідея. Будь ласка, змініть обидва і не використовуйте паролі в системі." +} diff --git a/translations/zh_CN.json b/translations/zh_CN.json index 7d11aab25ed..5046dc1f426 100644 --- a/translations/zh_CN.json +++ b/translations/zh_CN.json @@ -55,8 +55,8 @@ "Percentile Chart": "百分位图形", "Distribution": "分布", "Hourly stats": "每小时状态", - "netIOB stats": "netIOB stats", - "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "netIOB stats": "IOB净值", + "temp basals must be rendered to display this report": "要显示本报表必须先生成“日到日报表”", "No data available": "无可用数据", "Low": "低血糖", "In Range": "范围内", @@ -91,7 +91,7 @@ "No API secret hash stored yet. You need to enter API secret.": "没有已存储的API密钥,请输入API密钥。", "Database loaded": "数据库已载入", "Error: Database failed to load": "错误:数据库载入失败", - "Error": "Error", + "Error": "出错了!", "Create new record": "新增记录", "Save record": "保存记录", "Portions": "部分", @@ -225,7 +225,7 @@ "Pump Battery Change": "更换泵电池", "Pump Battery Age": "泵电池使用时间", "Pump Battery Low Alarm": "胰岛素泵电量低", - "Pump Battery change overdue!": "Pump Battery change overdue!", + "Pump Battery change overdue!": "泵电池更换超时!", "When enabled an alarm may sound.": "启用后可发出声音报警", "Urgent High Alarm": "血糖过高报警", "High Alarm": "高血糖报警", @@ -300,7 +300,7 @@ "Record %1 removed ...": "%1条记录已清除", "Error removing record %1": "%1条记录清除出错", "Deleting records ...": "正在删除记录...", - "%1 records deleted": "%1 records deleted", + "%1 records deleted": "%1的记录已被删除", "Clean Mongo status database": "清除状态数据库", "Delete all documents from devicestatus collection": "从设备状态采集删除所有文档", "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "此功能从设备状态采集中删除所有文档。适用于上传设备电量信息不能正常同步时使用。", @@ -309,15 +309,15 @@ "Database contains %1 records": "数据库包含%1条记录", "All records removed ...": "所有记录已经被清除", "Delete all documents from devicestatus collection older than 30 days": "删除30天以前的设备数据", - "Number of Days to Keep:": "Number of Days to Keep:", - "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", - "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", - "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", - "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", - "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Number of Days to Keep:": "保留天数:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "此功能将删除所有30天以前的设备状态采集数据。适用于上传设备的电池状态不能正常更新的情况。", + "Delete old documents from devicestatus collection?": "删除旧的设备状态数据?", + "Clean Mongo entries (glucose entries) database": "清空Mongo数据库的葡萄糖条目数据库。", + "Delete all documents from entries collection older than 180 days": "删除所有超过180天的条目数据", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "此功能将删除所有180天以前的设备状态采集数据。适用于上传设备的电池状态不能正常更新的情况。", "Delete old documents": "删除历史数据", "Delete old documents from entries collection?": "从血糖数据集合内删除旧数据?", - "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number": "%1 不是有效的数字", "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", "Clean Mongo treatments database": "Clean Mongo treatments database", "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", diff --git a/views/index.html b/views/index.html index 08e4507d5d8..87a4413a502 100644 --- a/views/index.html +++ b/views/index.html @@ -2,7 +2,7 @@ - + diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js index a81a2f17dcf..5fb24daabdc 100644 --- a/webpack/webpack.config.js +++ b/webpack/webpack.config.js @@ -106,7 +106,7 @@ const rules = [ loader: 'file-loader', options: { outputPath: 'images' - //the images will be emmited to public/assets/images/ folder + //the images will be emitted to public/assets/images/ folder //the images will be put in the DOM