diff --git a/.gitignore b/.gitignore index 0274dd1f44b..2cb28800650 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,4 @@ coverage/ npm-debug.log *.heapsnapshot -/tmp \ No newline at end of file +/tmp diff --git a/.nvmrc b/.nvmrc index 486db33615e..ed13033b848 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -8.9.1 +8.11.x diff --git a/.travis.yml b/.travis.yml index fb6fd879e6d..d8ff4c865ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,16 @@ language: node_js -sudo: required -dist: trusty +os: osx node_js: - - "8.9.1" + - "8" +before_install: + - if [[ `npm --version` != "5.8.0" ]]; then npm install -g npm@latest; npm --version; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi + # https://github.com/Homebrew/homebrew-core/issues/26358 + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew unlink python; fi + # "brew install" can succeed but return 1 if it has "caveats". + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install mongodb || true; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew services start mongodb; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install docker || true; fi matrix: fast_finish: true services: diff --git a/Makefile b/Makefile index b3748228830..7829258bd58 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Nightscout tests/builds/analysis TESTS=tests/*.js -MONGO_CONNECTION?=mongodb://localhost/test_db +MONGO_CONNECTION?=mongodb://localhost:27017/test_db CUSTOMCONNSTR_mongo_settings_collection?=test_settings CUSTOMCONNSTR_mongo_collection?=test_sgvs MONGO_SETTINGS=MONGO_CONNECTION=${MONGO_CONNECTION} \ @@ -40,12 +40,18 @@ report: (npm install codacy-coverage && cat ${ANALYZED} | \ YOURPACKAGE_COVERAGE=1 ./node_modules/codacy-coverage/bin/codacy-coverage.js) || echo "NO COVERAGE" +test_onebyone: + python -c 'import os,sys,fcntl; flags = fcntl.fcntl(sys.stdout, fcntl.F_GETFL); fcntl.fcntl(sys.stdout, fcntl.F_SETFL, flags&~os.O_NONBLOCK);' + $(foreach var,$(wildcard tests/*.js),${MONGO_SETTINGS} ${MOCHA} --timeout 30000 --exit --bail -R tap $(var);) + test: - ${MONGO_SETTINGS} ${MOCHA} --timeout 30000 -R tap ${TESTS} + ${MONGO_SETTINGS} ${MOCHA} --timeout 30000 --exit --bail -R tap ${TESTS} travis: - NODE_ENV=test ${MONGO_SETTINGS} \ - ${ISTANBUL} cover ${MOCHA} --report lcovonly -- --timeout 5000 -R tap ${TESTS} + python -c 'import os,sys,fcntl; flags = fcntl.fcntl(sys.stdout, fcntl.F_GETFL); fcntl.fcntl(sys.stdout, fcntl.F_SETFL, flags&~os.O_NONBLOCK);' +# NODE_ENV=test ${MONGO_SETTINGS} \ +# ${ISTANBUL} cover ${MOCHA} --report lcovonly -- --timeout 5000 -R tap ${TESTS} + $(foreach var,$(wildcard tests/*.js),${MONGO_SETTINGS} ${MOCHA} --timeout 30000 --exit --bail -R tap $(var);) docker_release: # Get the version from the package.json file diff --git a/Procfile b/Procfile index 32dd1c83adc..489b2700aca 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: ./node_modules/.bin/forever --minUptime 100 -c node server.js +web: node server.js diff --git a/README.md b/README.md index 5d47832c4aa..93dd92d17fd 100644 --- a/README.md +++ b/README.md @@ -25,14 +25,14 @@ low values, which can be cleared by any watcher of the data. Community maintained fork of the [original cgm-remote-monitor][original]. -[![Coverage Status](https://coveralls.io/repos/github/nightscout/cgm-remote-monitor/badge.svg?branch=dev)](https://coveralls.io/github/nightscout/cgm-remote-monitor?branch=dev) +[![Coverage Status](https://coveralls.io/repos/github/nightscout/cgm-remote-monitor/badge.svg?branch=master)](https://coveralls.io/github/nightscout/cgm-remote-monitor?branch=master) [build-img]: https://img.shields.io/travis/nightscout/cgm-remote-monitor.svg [build-url]: https://travis-ci.org/nightscout/cgm-remote-monitor [dependency-img]: https://img.shields.io/david/nightscout/cgm-remote-monitor.svg [dependency-url]: https://david-dm.org/nightscout/cgm-remote-monitor [coverage-img]: https://img.shields.io/coveralls/nightscout/cgm-remote-monitor/dev.svg -[coverage-url]: https://coveralls.io/github/nightscout/cgm-remote-monitor?branch=dev +[coverage-url]: https://coveralls.io/github/nightscout/cgm-remote-monitor?branch=master [codacy-img]: https://www.codacy.com/project/badge/f79327216860472dad9afda07de39d3b [codacy-url]: https://www.codacy.com/app/Nightscout/cgm-remote-monitor [gitter-img]: https://img.shields.io/badge/Gitter-Join%20Chat%20%E2%86%92-1dce73.svg @@ -58,6 +58,7 @@ Community maintained fork of the - [Alarms](#alarms) - [Core](#core) - [Predefined values for your browser settings (optional)](#predefined-values-for-your-browser-settings-optional) + - [Views](#views) - [Plugins](#plugins) - [Default Plugins](#default-plugins) - [`delta` (BG Delta)](#delta-bg-delta) @@ -87,6 +88,7 @@ Community maintained fork of the - [`pump` (Pump Monitoring)](#pump-pump-monitoring) - [`openaps` (OpenAPS)](#openaps-openaps) - [`loop` (Loop)](#loop-loop) + - [`xdrip-js` (xDrip-js)](#xdrip-js-xdrip-js) - [`alexa` (Amazon Alexa)](#alexa-amazon-alexa) - [`cors` (CORS)](#cors-cors) - [Extended Settings](#extended-settings) @@ -95,7 +97,6 @@ Community maintained fork of the - [Treatment Profile](#treatment-profile) - [Setting environment variables](#setting-environment-variables) - [Vagrant install](#vagrant-install) - - [Installation on Windows](#installation-on-windows) - [More questions?](#more-questions) - [License](#license) @@ -103,17 +104,37 @@ Community maintained fork of the # Install -Requirements: +Supported configurations: -- [Node.js](http://nodejs.org/) 8.9.0 LTS (use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or `setup.sh`) +If you plan to use Nightscout, we recommend using [Heroku](http://openaps.readthedocs.io/en/latest/docs/While%20You%20Wait%20For%20Gear/nightscout-setup.html#nightscout-setup-with-heroku), as Nightscout can reach the usage limits of the free Azure plan and cause it to shut down for hours or days. If you end up needing a paid tier, the $7/mo Heroku plan is also much cheaper than the first paid tier of Azure. Currently, the only added benefit to choosing the $7/mo Heroku plan vs the free Heroku plan is a section showing site use metrics for performance (such as response time). This has limited benefit to the average Nightscout user. In short, Heroku is the free and best option for Nightscout hosting. -Clone this repo then install dependencies into the root of the project: +- [Nightscout Setup with Heroku] (http://openaps.readthedocs.io/en/latest/docs/While%20You%20Wait%20For%20Gear/nightscout-setup.html#nightscout-setup-with-heroku) (recommended) +- [Nightscout Setup with Microsoft Azure] (http://www.nightscout.info/wiki/faqs-2/azure-2) (not recommended, please +[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) ) +- Linux based install (Debian, Ubuntu, Raspbian) install with own Node.JS and MongoDB install (see software requirements below) +- Windows based install with own Node.JS and MongoDB install (see software requirements below) + +Software requirements: + +- [Node.js](http://nodejs.org/) Latest Node 8 LTS (Node 8.11.3 or later). Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `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. + +As a non-root user clone this repo then install dependencies into the root of the project: ```bash $ npm install ``` -If deploying the software to Microsoft Azure, you must set *WEBSITE_NODE_DEFAULT_VERSION* in the app settings to *8.9.0* **before** you deploy the latest Nightscout or the site deployment will likely fail. Other hosting environments do not require this setting. +Installation notes for Microsoft Azure, Windows and Node 10: + +- 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. Please use: +``` +WEBSITE_NODE_DEFAULT_VERSION=8.11.1 +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. +- If you deploy to Windows and want to develop or test you need to install [Cygwin] (https://www.cygwin.com/) (use [setup-x86_64.exe] (https://www.cygwin.com/setup-x86_64.exe) and make sure to install `build-essential` package. Test your configuration by executing `make` and check if all tests are ok. +- There may be some issues with Node 10.6.0 or later with Nightscout. Node 10 support will be in the 0.11 release. Please don't use Nightscout with (Node 9 or) Node 10 at this moment. # Usage @@ -214,6 +235,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `MONGO_DEVICESTATUS_COLLECTION`(`devicestatus`) - The collection used to store device status information such as uploader battery * `MONGO_PROFILE_COLLECTION`(`profile`) - The collection used to store your profiles * `MONGO_FOOD_COLLECTION`(`food`) - The collection used to store your food database + * `MONGO_ACTIVITY_COLLECTION`(`activity`) - The collection used to store activity data * `PORT` (`1337`) - The port that the node.js application will listen on. * `HOSTNAME` - The hostname that the node.js application will listen on, null by default for any hostname for IPv6 you may need to use `::`. * `SSL_KEY` - Path to your ssl key file, so that ssl(https) can be enabled directly in node.js @@ -228,7 +250,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `NIGHT_MODE` (`off`) - possible values `on` or `off` * `SHOW_RAWBG` (`never`) - possible values `always`, `never` or `noise` * `CUSTOM_TITLE` (`Nightscout`) - Usually name of T1 - * `THEME` (`default`) - possible values `default` or `colors` + * `THEME` (`default`) - possible values `default`, `colors`, or `colorblindfriendly` * `ALARM_TIMEAGO_WARN` (`on`) - possible values `on` or `off` * `ALARM_TIMEAGO_WARN_MINS` (`15`) - minutes since the last reading to trigger a warning * `ALARM_TIMEAGO_URGENT` (`on`) - possible values `on` or `off` @@ -236,12 +258,20 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `SHOW_PLUGINS` - enabled plugins that should have their visualizations shown, defaults to all enabled * `SHOW_FORECAST` (`ar2`) - plugin forecasts that should be shown by default, supports space delimited values such as `"ar2 openaps"` * `LANGUAGE` (`en`) - language of Nightscout. If not available english is used + * Currently supported language codes are: bg (Български), cs (Čeština), de (Deutsch), dk (Dansk), el (Ελληνικά), en (English), es (Español), fi (Suomi), fr (Français), he (עברית), hr (Hrvatski), it (Italiano), ko (한국어), nb (Norsk (Bokmål)), nl (Nederlands), pl (Polski), pt (Português (Brasil)), ro (Română), ru (Русский), sk (Slovenčina), sv (Svenska), zh_cn (中文(简体)), zh_tw (中文(繁體)) * `SCALE_Y` (`log`) - The type of scaling used for the Y axis of the charts system wide. * The default `log` (logarithmic) option will let you see more detail towards the lower range, while still showing the full CGM range. * The `linear` option has equidistant tick marks, the range used is dynamic so that space at the top of chart isn't wasted. * The `log-dynamic` is similar to the default `log` options, but uses the same dynamic range and the `linear` scale. * `EDIT_MODE` (`on`) - possible values `on` or `off`. Enable or disable icon allowing enter treatments edit mode +### Views + + There are a few alternate web views available that display a simplified BG stream. Append any of these to your Nightscout URL: + * `/clock.html` - Shows current BG. Grey text on a black background. + * `/bgclock.html` - Shows current BG, trend arrow, and time of day. Grey text on a black background. + * `/clock-color.html` - Shows current BG and trend arrow. White text on a background that changes color to indicate current BG threshold (green = in range; blue = below range; yellow = above range; red = urgent below/above). + ### Plugins Plugins are used extend the way information is displayed, how notifications are sent, alarms are triggered, and more. @@ -377,7 +407,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm Generic Pump Monitoring for OpenAPS, MiniMed Connect, RileyLink, t:slim, with more on the way * Requires `DEVICESTATUS_ADVANCED="true"` to be set * `PUMP_ENABLE_ALERTS` (`false`) - Set to `true` to enable notifications for Pump battery and reservoir. - * `PUMP_WARNONSUSPEND` (`false`) - Set to `true` to get an alarm when the pump is suspended. + * `PUMP_WARN_ON_SUSPEND` (`false`) - Set to `true` to get an alarm when the pump is suspended. * `PUMP_FIELDS` (`reservoir battery`) - The fields to display by default. Any of the following fields: `reservoir`, `battery`, `clock`, `status`, and `device` * `PUMP_RETRO_FIELDS` (`reservoir battery clock`) - The fields to display in retro mode. Any of the above fields. * `PUMP_WARN_CLOCK` (`30`) - The number of minutes ago that needs to be exceed before an alert is triggered. @@ -408,9 +438,19 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm * `LOOP_URGENT` (`60`) - The number of minutes since the last loop that needs to be exceeded before an urgent alarm is triggered * Add `loop` to `SHOW_FORECAST` to show forecasted BG. +##### `xdrip-js` (xDrip-js) + Integrated xDrip-js monitoring, uses these extended settings: + * Requires `DEVICESTATUS_ADVANCED="true"` to be set + * `XDRIP-JS_ENABLE_ALERTS` (`false`) - Set to `true` to enable notifications when CGM state is not OK or battery voltages fall below threshold. + * `XDRIP-JS_STATE_NOTIFY_INTRVL` (`0.5`) - Set to number of hours between CGM state notifications + * `XDRIP-JS_WARN_BAT_V` (`300`) - The voltage of either transmitter battery, a warning will be triggered when dropping below this threshold. + ##### `alexa` (Amazon Alexa) Integration with Amazon Alexa, [detailed setup instructions](lib/plugins/alexa-plugin.md) +##### `speech` (Speech) + Speech synthesis plugin. When enabled, speaks out the blood glucose values, IOB and alarms. Note you have to set the LANGUAGE setting on the server to get all translated alarms. + ##### `cors` (CORS) Enabled [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) so other websites can make request to your Nightscout site, uses these extended settings: * `CORS_ALLOW_ORIGIN` (`*`) - The list of sites that are allow to make requests @@ -419,6 +459,8 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs.htm Some plugins support additional configuration using extra environment variables. These are prefixed with the name of the plugin and a `_`. For example setting `MYPLUGIN_EXAMPLE_VALUE=1234` would make `extendedSettings.exampleValue` available to the `MYPLUGIN` plugin. Plugins only have access to their own extended settings, all the extended settings of client plugins will be sent to the browser. + + * `DEVICESTATUS_ADVANCED` (`true`) - Defaults to true. Users who only have a single device uploading data to Nightscout can set this to false to reduce the data use of the site. #### Pushover In addition to the normal web based alarms, there is also support for [Pushover](https://pushover.net/) based alarms and notifications. @@ -518,10 +560,6 @@ The setup script will install OS packages then run `npm install`. The Vagrant VM serves to your host machine only on 192.168.33.10, you can access the web interface on [http://192.168.33.10:1337](http://192.168.33.10:1337) -## Installation on Windows - -If you have access to local computing resources and want to maintain more control over your data, you can host Nightscout and its database outside of the cloud. Windows Server supports MongoDB, Node.js, and Nightscout [installed on a single system](https://github.com/jaylagorio/Nightscout-on-Windows-Server). Although the instructions are intended for Windows Server the procedure is compatible with client versions of Windows such as Windows 7 and Windows 10. - More questions? --------------- diff --git a/app.js b/app.js index a073eff8f80..5fd5f85f254 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,6 @@ 'use strict'; -var _ = require('lodash'); +var _get = require('lodash/get'); var express = require('express'); var compression = require('compression'); var bodyParser = require('body-parser'); @@ -24,12 +24,12 @@ function create(env, ctx) { app.locals.cachebuster = fs.readFileSync(process.cwd() + '/tmp/cacheBusterToken').toString().trim(); if (ctx.bootErrors && ctx.bootErrors.length > 0) { - app.get('*', require('./lib/booterror')(ctx)); + app.get('*', require('./lib/server/booterror')(ctx)); return app; } if (env.settings.isEnabled('cors')) { - var allowOrigin = _.get(env, 'extendedSettings.cors.allowOrigin') || '*'; + var allowOrigin = _get(env, 'extendedSettings.cors.allowOrigin') || '*'; console.info('Enabled CORS, allow-origin:', allowOrigin); app.use(function allowCrossDomain(req, res, next) { res.header('Access-Control-Allow-Origin', allowOrigin); @@ -101,9 +101,9 @@ function create(env, ctx) { // pebble data app.get('/pebble', ctx.pebble); - // expose swagger.yaml - app.get('/swagger.yaml', function(req, res) { - res.sendFile(__dirname + '/swagger.yaml'); + // expose swagger.json + app.get('/swagger.json', function(req, res) { + res.sendFile(__dirname + '/swagger.json'); }); /* @@ -141,6 +141,13 @@ function create(env, ctx) { // serve the static content app.use(staticFiles); + var swaggerFiles = express.static(env.swagger_files, { + maxAge: maxAge + }); + + // serve the static content + app.use('/swagger-ui-dist', swaggerFiles); + var tmpFiles = express.static('tmp', { maxAge: maxAge }); diff --git a/app.json b/app.json index 63a5aa37c1c..17909419c54 100644 --- a/app.json +++ b/app.json @@ -8,7 +8,7 @@ "required": true }, "API_SECRET": { - "description": "REQUIRED: A secret passphrase that must be at least 12 characters long, required to enable POST and PUT; also required for the Care Portal", + "description": "REQUIRED: A secret passphrase that must be at least 12 characters long, required to enable POST and PUT; also required for the Care Portal.", "value": "", "required": true }, @@ -18,12 +18,12 @@ "required": false }, "ENABLE": { - "description": "Used to enable optional features, expects a space delimited list, such as: careportal rawbg iob, see https://github.com/nightscout/cgm-remote-monitor/blob/master/README.md for more info", + "description": "Used to enable optional features, expects a space delimited list, such as: careportal rawbg iob, see https://github.com/nightscout/cgm-remote-monitor/blob/master/README.md for more info.", "value": "", "required": false }, "DISABLE": { - "description": "Used to disable default features, expects a space delimited list, such as: direction upbat, see https://github.com/nightscout/cgm-remote-monitor/blob/master/README.md for more info", + "description": "Used to disable default features, expects a space delimited list, such as: direction upbat, see https://github.com/nightscout/cgm-remote-monitor/blob/master/README.md for more info.", "value": "", "required": false }, @@ -33,22 +33,22 @@ "required": false }, "BG_HIGH": { - "description": "Urgent high BG alarm. Default null value implies 260. Must be set in mg/dL. Only used with simple alarms.", + "description": "Urgent high BG alarm. Default null value implies 260. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", "value": "", "required": false }, "BG_TARGET_TOP": { - "description": "Non-urgent high BG alarm, the top of your target range. Default null value implies 180. Must be set in mg/dL. Only used with simple alarms.", + "description": "Non-urgent high BG alarm, the top of your target range. Default null value implies 180. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", "value": "", "required": false }, "BG_TARGET_BOTTOM": { - "description": "Non urgent low BG alarm, the bottom of your target range. Default null value implies 80. Must be set in mg/dL. Only used with simple alarms.", + "description": "Non urgent low BG alarm, the bottom of your target range. Default null value implies 80. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", "value": "", "required": false }, "BG_LOW": { - "description": "Urgent Low BG alarm. Default null value implies 55. Must be set in mg/dL. Only used with simple alarms.", + "description": "Urgent Low BG alarm. Default null value implies 55. Must be set in mg/dL (multiply with 18 if you have a value in mmol/L). Only used with simple alarms.", "value": "", "required": false }, @@ -72,83 +72,73 @@ "value": "", "required": false }, - "THEME": { - "description": "Possible values default, colors or colorblindfriendly", - "value": "", - "required": false - }, - "SHOW_RAWBG": { - "description": "Possible values always, never or noise", - "value": "", - "required": false - }, "BRIDGE_USER_NAME": { - "description": "Share bridge - Your user name for the Share service. ENSURE bridge is in ENABLE if you want to use the share bridge", + "description": "Share bridge - Your user name for the Share service. ENSURE bridge is in ENABLE if you want to use the share bridge.", "value": "", "required": false }, "BRIDGE_PASSWORD": { - "description": "Share bridge - Your password for the Share service. ENSURE bridge is in ENABLE if you want to use the share bridge", + "description": "Share bridge - Your password for the Share service. ENSURE bridge is in ENABLE if you want to use the share bridge.", "value": "", "required": false }, "TIME_FORMAT": { - "description": "Browser default time mode valid settings are 12 or 24", + "description": "Browser default time mode. Valid settings are 12 or 24", "value": "12", "required": false }, "NIGHT_MODE": { - "description": "Browser defaults to night mode valid settings are on or off", + "description": "Browser defaults to night mode. Valid settings are on or off", "value": "off", "required": false }, "SHOW_RAWBG": { - "description": "Browser default raw display mode vaild settings are always never or noise", + "description": "Browser default raw display mode. Valid settings are always, never, or noise", "value": "never", "required": false }, "THEME": { - "description": "Browser default theme setting vaild settings are default or colors", + "description": "Browser default theme setting. Valid settings are default, colors, or colorblindfriendly", "value": "default", "required": false }, "ALARM_URGENT_HIGH": { - "description": "Browser default urgent high alarm enabled vaild settings are on or off", + "description": "Browser default urgent high alarm enabled. Valid settings are on or off", "value": "on", "required": false }, "ALARM_HIGH": { - "description": "Browser default high alarm enabled vaild settings are on or off", + "description": "Browser default high alarm enabled. Valid settings are on or off", "value": "on", "required": false }, "ALARM_LOW": { - "description": "Browser default low alarm enabled vaild settings are on or off", + "description": "Browser default low alarm enabled. Valid settings are on or off", "value": "on", "required": false }, "ALARM_URGENT_LOW": { - "description": "Browser default urgent low alarm enabled vaild settings are on or off", + "description": "Browser default urgent low alarm enabled. Valid settings are on or off", "value": "on", "required": false }, "ALARM_TIMEAGO_WARN": { - "description": "Browser default warn after time of last data exceeds ALARM_TIMEAGO_WARN_MINS alarm enabled vaild settings are on or off", + "description": "Browser default warn after time of last data exceeds ALARM_TIMEAGO_WARN_MINS alarm enabled. Valid settings are on or off", "value": "on", "required": false }, "ALARM_TIMEAGO_WARN_MINS": { - "description": "Browser default minutes since the last reading to trigger a warning", + "description": "Browser default minutes since the last reading to trigger a warning.", "value": "15", "required": false }, "ALARM_TIMEAGO_URGENT": { - "description": "Browser default urgent warning after time of last data exceeds ALARM_TIMEAGO_URGENT_MINS alarm enabled vaild settings are on or off", + "description": "Browser default urgent warning after time of last data exceeds ALARM_TIMEAGO_URGENT_MINS alarm enabled. Valid settings are on or off", "value": "on", "required": false }, "ALARM_TIMEAGO_URGENT_MINS": { - "description": "Browser default minutes since last reading to trigger an urgent alarm", + "description": "Browser default minutes since last reading to trigger an urgent alarm.", "value": "30", "required": false }, diff --git a/azuredeploy.json b/azuredeploy.json index 777b513ddbd..dc89c0ad956 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -218,7 +218,7 @@ }, "WEBSITE_NODE_DEFAULT_VERSION": { "type": "string", - "defaultValue": "8.5.0" + "defaultValue": "8.11.1" } }, "resources": [{ @@ -317,8 +317,12 @@ "value": "[parameters('auth_default_roles')]" }, { "name": "WEBSITE_NODE_DEFAULT_VERSION", - "value": "8.5.0" + "value": "8.11.1" + }, { + "name": "SCM_COMMAND_IDLE_TIMEOUT", + "value": "300" } + ] } }, diff --git a/bower.json b/bower.json deleted file mode 100644 index 00a25dda77a..00000000000 --- a/bower.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "nightscout", - "version": "0.10.2-release-20171201", - "dependencies": { - "colorbrewer": "~1.0.0", - "jQuery-Storage-API": "~1.7.2", - "jquery": "2.1.0", - "jquery-flot": "0.8.3", - "jquery-ui": "~1.11.3", - "swagger-ui": "~2.1.2", - "tipsy-jmalonzo": "~1.0.1", - "tone": "*" - }, - "resolutions": { - "jquery": "2.1.0" - } -} diff --git a/bundle/bundle.source.js b/bundle/bundle.source.js index 9124fceb253..ea7cc924414 100644 --- a/bundle/bundle.source.js +++ b/bundle/bundle.source.js @@ -1,7 +1,6 @@ import '../static/css/drawer.css'; import '../static/css/dropdown.css'; import '../static/css/sgv.css'; -import '../node_modules/jquery.tipsy/src/jquery.tipsy.css'; $ = require("jquery"); @@ -11,7 +10,7 @@ require('jquery-ui-bundle'); window._ = require('lodash'); window.d3 = require('d3'); -require('jquery.tipsy'); +require('jquery.tooltips'); window.Storage = require('js-storage'); diff --git a/deploy.sh b/deploy.sh index 98b62312425..710cbb14d3f 100755 --- a/deploy.sh +++ b/deploy.sh @@ -113,7 +113,10 @@ selectNodeVersion # 3. Install npm packages if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then cd "$DEPLOYMENT_TARGET" - eval $NPM_CMD install --scripts-prepend-node-path --production + echo Installing webpack and webpack-command and yargs + eval $NPM_CMD install -g webpack webpack-command + eval $NPM_CMD install yargs + eval $NPM_CMD install --production --scripts-prepend-node-path exitWithMessageOnError "npm failed" cd - > /dev/null fi diff --git a/env.js b/env.js index 6527d0750f0..d6d1f89d0cd 100644 --- a/env.js +++ b/env.js @@ -1,6 +1,11 @@ 'use strict'; -var _ = require('lodash'); +var _each = require('lodash/each'); +var _trim = require('lodash/trim'); +var _forIn = require('lodash/forIn'); +var _startsWith = require('lodash/startsWith'); +var _camelCase = require('lodash/camelCase'); + var fs = require('fs'); var crypto = require('crypto'); var consts = require('./lib/constants'); @@ -20,6 +25,7 @@ function config ( ) { env.HOSTNAME = readENV('HOSTNAME', null); env.IMPORT_CONFIG = readENV('IMPORT_CONFIG', null); env.static_files = readENV('NIGHTSCOUT_STATIC_FILES', __dirname + '/static/'); + env.swagger_files = readENV('NIGHTSCOUT_SWAGGER_FILES', __dirname + '/node_modules/swagger-ui-dist/'); env.debug = { minify: readENVTruthy('DEBUG_MINIFY', true) }; @@ -79,17 +85,6 @@ function setAPISecret() { function setVersion() { var software = require('./package.json'); - var git = require('git-rev'); - - if (readENV('APPSETTING_ScmType') === readENV('ScmType') && readENV('ScmType') === 'GitHub') { - env.head = require('./scm-commit-id.json'); - console.log('SCM COMMIT ID', env.head); - } else { - git.short(function record_git_head(head) { - console.log('GIT HEAD', head); - env.head = head || readENV('SCM_COMMIT_ID') || readENV('COMMIT_HASH', ''); - }); - } env.version = software.version; env.name = software.name; } @@ -116,6 +111,7 @@ function setStorage() { env.profile_collection = readENV('MONGO_PROFILE_COLLECTION', 'profile'); env.devicestatus_collection = readENV('MONGO_DEVICESTATUS_COLLECTION', 'devicestatus'); env.food_collection = readENV('MONGO_FOOD_COLLECTION', 'food'); + env.activity_collection = readENV('MONGO_ACTIVITY_COLLECTION', 'activity'); // TODO: clean up a bit // Some people prefer to use a json configuration file instead. @@ -170,20 +166,23 @@ function readENVTruthy(varName, defaultValue) { function findExtendedSettings (envs) { var extended = {}; + extended.devicestatus = {}; + extended.devicestatus.advanced = true; + function normalizeEnv (key) { return key.toUpperCase().replace('CUSTOMCONNSTR_', ''); } - _.each(env.settings.enable, function eachEnable(enable) { - if (_.trim(enable)) { - _.forIn(envs, function eachEnvPair (value, key) { + _each(env.settings.enable, function eachEnable(enable) { + if (_trim(enable)) { + _forIn(envs, function eachEnvPair (value, key) { var env = normalizeEnv(key); - if (_.startsWith(env, enable.toUpperCase() + '_')) { + if (_startsWith(env, enable.toUpperCase() + '_')) { var split = env.indexOf('_'); if (split > -1 && split <= env.length) { var exts = extended[enable] || {}; extended[enable] = exts; - var ext = _.camelCase(env.substring(split + 1).toLowerCase()); + var ext = _camelCase(env.substring(split + 1).toLowerCase()); if (!isNaN(value)) { value = Number(value); } if (typeof value === 'string' && (value.toLowerCase() === 'on' || value.toLowerCase() === 'true')) { value = true; } if (typeof value === 'string' && (value.toLowerCase() === 'off' || value.toLowerCase() === 'false')) { value = false; } diff --git a/lib/admin_plugins/index.js b/lib/admin_plugins/index.js index c5e86cb5405..c6463ecca8e 100644 --- a/lib/admin_plugins/index.js +++ b/lib/admin_plugins/index.js @@ -1,6 +1,7 @@ 'use strict'; -var _ = require('lodash'); +var _find = require('lodash/find'); +var _each = require('lodash/each'); function init() { var allPlugins = [ @@ -12,14 +13,14 @@ function init() { function plugins(name) { if (name) { - return _.find(allPlugins, {name: name}); + return _find(allPlugins, {name: name}); } else { return plugins; } } plugins.eachPlugin = function eachPlugin(f) { - _.each(allPlugins, f); + _each(allPlugins, f); }; plugins.createHTML = function createHTML(client) { diff --git a/lib/api/activity/index.js b/lib/api/activity/index.js new file mode 100644 index 00000000000..d88019ab936 --- /dev/null +++ b/lib/api/activity/index.js @@ -0,0 +1,130 @@ +'use strict'; + +var _forEach = require('lodash/forEach'); +var _isNil = require('lodash/isNil'); +var _isArray = require('lodash/isArray'); + +var consts = require('../../constants'); +var moment = require('moment'); + +function configure(app, wares, ctx) { + var express = require('express') + , api = express.Router(); + + api.use(wares.compression()); + api.use(wares.bodyParser({ + limit: 1048576 * 50 + })); + // text body types get handled as raw buffer stream + api.use(wares.bodyParser.raw({ + limit: 1048576 + })); + // json body types get handled as parsed json + api.use(wares.bodyParser.json({ + limit: 1048576 + })); + // also support url-encoded content-type + api.use(wares.bodyParser.urlencoded({ + limit: 1048576 + , extended: true + })); + // invoke common middleware + api.use(wares.sendJSONStatus); + + api.use(ctx.authorization.isPermitted('api:activity:read')); + + // List activity data available + api.get('/activity', function(req, res) { + var ifModifiedSince = req.get('If-Modified-Since'); + ctx.activity.list(req.query, function(err, results) { + var d1 = null; + + _forEach(results, function clean(t) { + + var d2 = null; + + if (t.hasOwnProperty('created_at')) { + d2 = new Date(t.created_at); + } else { + if (t.hasOwnProperty('timestamp')) { + d2 = new Date(t.timestamp); + } + } + + if (d2 == null) { return; } + + if (d1 == null || d2.getTime() > d1.getTime()) { + d1 = d2; + } + }); + + 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); + } + }); + }); + + function config_authed(app, api, wares, ctx) { + + function post_response(req, res) { + var activity = req.body; + + if (!_isArray(activity)) { + activity = [activity]; + }; + + ctx.activity.create(activity, function(err, created) { + if (err) { + console.log('Error adding activity data', err); + res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); + } else { + console.log('Activity measure created'); + res.json(created); + } + }); + } + + api.post('/activity/', wares.bodyParser({ + limit: 1048576 * 50 + }), 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() { + res.json({}); + }); + }); + + // update record + api.put('/activity/', ctx.authorization.isPermitted('api:activity:update'), function(req, res) { + var data = req.body; + ctx.activity.save(data, function(err, created) { + if (err) { + res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); + console.log('Error saving activity'); + console.log(err); + } else { + res.json(created); + console.log('Activity measure saved', data); + } + }); + }); + } + + if (app.enabled('api') && app.enabled('careportal')) { + config_authed(app, api, wares, ctx); + } + + return api; +} + +module.exports = configure; + diff --git a/lib/api/alexa/index.js b/lib/api/alexa/index.js index ad1413b0980..65f477ad85d 100644 --- a/lib/api/alexa/index.js +++ b/lib/api/alexa/index.js @@ -1,8 +1,7 @@ 'use strict'; var moment = require('moment'); -var _ = require('lodash'); - +var _each = require('lodash/each'); function configure (app, wares, ctx, env) { var entries = ctx.entries; @@ -21,7 +20,7 @@ function configure (app, wares, ctx, env) { if (plugin.alexa) { if (plugin.alexa.intentHandlers) { console.log(plugin.name + ' is Alexa enabled'); - _.each(plugin.alexa.intentHandlers, function (route) { + _each(plugin.alexa.intentHandlers, function (route) { if (route) { ctx.alexa.configureIntentHandler(route.intent, route.intentHandler, route.routableSlot, route.slots); } @@ -29,7 +28,7 @@ function configure (app, wares, ctx, env) { } if (plugin.alexa.rollupHandlers) { console.log(plugin.name + ' is Alexa rollup enabled'); - _.each(plugin.alexa.rollupHandlers, function (route) { + _each(plugin.alexa.rollupHandlers, function (route) { console.log('Route'); console.log(route); if (route) { diff --git a/lib/api/entries/index.js b/lib/api/entries/index.js index 425fee4f7a1..691cba7ecc0 100644 --- a/lib/api/entries/index.js +++ b/lib/api/entries/index.js @@ -1,37 +1,41 @@ 'use strict'; -var _ = require('lodash'); +var _last = require('lodash/last'); +var _isNil = require('lodash/isNil'); +var _first = require('lodash/first'); +var _includes = require('lodash/includes'); + var consts = require('../../constants'); var es = require('event-stream'); var sgvdata = require('sgvdata'); var expand = require('expand-braces'); var ID_PATTERN = /^[a-f\d]{24}$/; -function isId (value) { - //TODO: why did we need tht length check? - return value && ID_PATTERN.test(value) && value.length === 24; + +function isId(value) { + //TODO: why did we need tht length check? + return value && ID_PATTERN.test(value) && value.length === 24; } /** - * @module Entries - * Entries module - */ + * @module Entries + * Entries module + */ /** - * @method configure - * Configure the entries module, given an existing express app, common - * middlewares, and the global app's `ctx`. - * @param Express app The express app we'll mount onto. - * @param Object wares Common middleware used by lots of apps. - * @param Object ctx The global ctx with all modules, storage, and event buses - * configured. - */ -function configure (app, wares, ctx) { - // default storage biased towards entries. - var entries = ctx.entries; - var express = require('express'), - api = express.Router( ) - ; + * @method configure + * Configure the entries module, given an existing express app, common + * middlewares, and the global app's `ctx`. + * @param Express app The express app we'll mount onto. + * @param Object wares Common middleware used by lots of apps. + * @param Object ctx The global ctx with all modules, storage, and event buses + * configured. + */ +function configure(app, wares, ctx) { + // default storage biased towards entries. + var entries = ctx.entries; + var express = require('express'), + api = express.Router(); // invoke common middleware api.use(wares.sendJSONStatus); @@ -41,76 +45,67 @@ function configure (app, wares, ctx) { api.use(wares.bodyParser.json()); // shortcut to use extension to specify output content-type api.use(wares.extensions([ - 'json', 'svg', 'csv', 'txt', 'png', 'html', 'tsv' + 'json', 'svg', 'csv', 'txt', 'png', 'html', 'tsv' ])); // also support url-encoded content-type - api.use(wares.bodyParser.urlencoded({ extended: true })); + api.use(wares.bodyParser.urlencoded({ + extended: true + })); api.use(ctx.authorization.isPermitted('api:entries:read')); /** - * @method force_typed_data - * @returns {Stream} Creates a through stream which validates that all - * elements on the stream have a `type` field. - * Generate a stream that ensures elements have a `type` field. - */ - function force_typed_data (opts) { - /** - * @function sync - * Iterate over every element in the stream, enforcing some data type. - */ - function sync (data, next) { - // if element has no data type, but we know what the type should be - if (!data.type && opts.type) { - // bless absence with known type - data.type = opts.type; + * @method force_typed_data + * @returns {Stream} Creates a through stream which validates that all + * elements on the stream have a `type` field. + * Generate a stream that ensures elements have a `type` field. + */ + function force_typed_data(opts) { + /** + * @function sync + * Iterate over every element in the stream, enforcing some data type. + */ + function sync(data, next) { + // if element has no data type, but we know what the type should be + if (!data.type && opts.type) { + // bless absence with known type + data.type = opts.type; + } + // continue control flow to next element in the stream + next(null, data); } - // continue control flow to next element in the stream - next(null, data); - } - // return configured stream - return es.map(sync); + // return configured stream + return es.map(sync); } // check for last modified from in-memory data - function ifModifiedSinceCTX (req, res, next) { - - var lastEntry = _.last(ctx.ddata.sgvs); - var lastEntryDate = null; - - if (!_.isNil(lastEntry)) { - lastEntryDate = new Date(_.last(ctx.ddata.sgvs).mills); - res.setHeader('Last-Modified', lastEntryDate.toUTCString()); - } - - var ifModifiedSince = req.get('If-Modified-Since'); - if (!ifModifiedSince) { return next(); } - - if (lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { - res.status(304).send({status:304, message: 'Not modified', type:'internal'}); - return; - } - - return next(); - } + function ifModifiedSinceCTX(req, res, next) { + + var lastEntry = _last(ctx.ddata.sgvs); + var lastEntryDate = null; + + if (!_isNil(lastEntry)) { + lastEntryDate = new Date(_last(ctx.ddata.sgvs).mills); + res.setHeader('Last-Modified', lastEntryDate.toUTCString()); + } + + var ifModifiedSince = req.get('If-Modified-Since'); + if (!ifModifiedSince) { + return next(); + } + + console.log("CGM Entry request with If-Modified-Since: ", ifModifiedSince); + + if (lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { + res.status(304).send({ + status: 304, + message: 'Not modified', + type: 'internal' + }); + return; + } - // check for last modified from query results - - function ifModifiedSince (req, res, next) { - - var lastEntryDate = new Date(_.last(res.entries).dateString); - res.setHeader('Last-Modified', lastEntryDate.toUTCString()); - - var ifModifiedSince = req.get('If-Modified-Since'); - - if (!ifModifiedSince) { return next(); } - - if (lastEntryDate <= new Date(ifModifiedSince)) { - res.status(304).send({status:304, message: 'Not modified', type:'internal'}); - return; - } - - return next(); + return next(); } /** @@ -120,342 +115,395 @@ function configure (app, wares, ctx) { * We expect a payload to be attached to `res.entries`. // Middleware to format any response involving entries. */ - function format_entries (req, res) { - // deduce what type of records we might expect - var type_params = { - type: (req.query && req.query.find && req.query.find.type - && req.query.find.type !== req.params.model) - ? req.query.find.type : req.params.model - }; - // prepare a stream of elements from some prepared payload - var output = es.readArray(res.entries || [ ]); - // on other hand, if there's been some error, report that - if (res.entries_err) { - return res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', res.entries_err); - } - // if no error, format the payload - // The general pattern here is to create an output stream that reformats - // the data correctly into the desired representation. - // The stream logic allows some streams to ensure that some basic rules, - // such as enforcing a type property to exist, are followed. - return res.format({ - text: function ( ) { - res.set('Content-Type', 'text/plain'); - // sgvdata knows how to format sgv entries as text - es.pipeline(output, sgvdata.format( ), es.writeArray(function (err, out) { - res.send(out.join('')); - })); - }, - csv: function ( ) { - // sgvdata knows how to format sgv entries as text - res.set('Content-Type', 'text/plain'); - var csvpipe = require('sgvdata/lib/text')({ format: ',', parse: /[\t,]/ }); - es.pipeline( - output - , sgvdata.mapper(csvpipe.format) - , es.join('\n') - , es.writeArray(function (err, out) { - res.send(out.join('')); - }) - ); - }, - json: function ( ) { - // so long as every element has a `type` field, and some kind of - // date, we'll consider it valid - es.pipeline(output, force_typed_data(type_params), es.writeArray(function (err, out) { - res.json(out); - })); + function format_entries(req, res) { + // deduce what type of records we might expect + var type_params = { + type: (req.query && req.query.find && req.query.find.type && + req.query.find.type !== req.params.model) ? + req.query.find.type : req.params.model + }; + // prepare a stream of elements from some prepared payload + var output = es.readArray(res.entries || []); + // on other hand, if there's been some error, report that + if (res.entries_err) { + return res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', res.entries_err); + } + + // IF-Modified-Since support + + function compare(a, b) { + var a_field = a.mills ? a.mills : a.date; + var b_field = b.mills ? b.mills : b.date; + + if (a_field > b_field) + return -1; + if (a_field < b_field) + return 1; + return 0; } - }); + + res.entries.sort(compare); + + var lastEntry = _first(res.entries); + var lastEntryDate = null; + + if (!_isNil(lastEntry)) { + if (lastEntry.mills) lastEntryDate = new Date(lastEntry.mills); + if (!lastEntry.mills && lastEntry.date) lastEntryDate = new Date(lastEntry.date); + res.setHeader('Last-Modified', lastEntryDate.toUTCString()); + } + + var ifModifiedSince = req.get('If-Modified-Since'); + + console.log('If-Modified-Since: ' + new Date(ifModifiedSince) + ' Last-Modified', lastEntryDate); + + if (lastEntryDate !== null && ifModifiedSince !== null && lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) { + res.status(304).send({ + status: 304, + message: 'Not modified', + type: 'internal' + }); + return; + } + + // if no error, format the payload + // The general pattern here is to create an output stream that reformats + // the data correctly into the desired representation. + // The stream logic allows some streams to ensure that some basic rules, + // such as enforcing a type property to exist, are followed. + return res.format({ + text: function() { + res.set('Content-Type', 'text/plain'); + // sgvdata knows how to format sgv entries as text + es.pipeline(output, sgvdata.format(), es.writeArray(function(err, out) { + res.send(out.join('')); + })); + }, + csv: function() { + // sgvdata knows how to format sgv entries as text + res.set('Content-Type', 'text/plain'); + var csvpipe = require('sgvdata/lib/text')({ + format: ',', + parse: /[\t,]/ + }); + es.pipeline( + output, sgvdata.mapper(csvpipe.format), es.join('\n'), es.writeArray(function(err, out) { + res.send(out.join('')); + }) + ); + }, + json: function() { + // so long as every element has a `type` field, and some kind of + // date, we'll consider it valid + es.pipeline(output, force_typed_data(type_params), es.writeArray(function(err, out) { + res.json(out); + })); + } + }); } /** - * @method insert_entries - * middleware to process "uploads" of sgv data - * This inspects the http requests's incoming payload. This creates a - * validating stream for the appropriate type of payload, which is piped - * into the configured storage layer, saving the results in mongodb. - */ + * @method insert_entries + * middleware to process "uploads" of sgv data + * This inspects the http requests's incoming payload. This creates a + * validating stream for the appropriate type of payload, which is piped + * into the configured storage layer, saving the results in mongodb. + */ // middleware to process "uploads" of sgv data - function insert_entries (req, res, next) { - // list of incoming records - var incoming = [ ]; - // Potentially a single json encoded body. - // This can happen from either an url-encoded or json content-type. - if ('date' in req.body) { - // add it to the incoming list - incoming.push(req.body); - } - // potentially a list of json entries - if (req.body.length) { - // add them to the list - incoming = incoming.concat(req.body); - } - - /** - * @function inputs - * @returns {ReadableStream} Readable stream with all incoming elements - * in the stream. - * in node, pipe is the most interoperable interface - * inputs returns a readable stream representing all the potential - * records from the HTTP body. - * Most content-types are handled by express middeware. - * However, text/* types are given to us as a raw buffer, this - * function switches between these two variants to find the - * correct input stream. - * stream, so use svgdata to handle those. - * The inputs stream always emits sgv json objects. - */ - function inputs ( ) { - var input; - // handle all text types - if (req.is('text/*')) { - // re-use the svgdata parsing stream - input = es.pipeline(req, sgvdata.parse( )); - return input; + function insert_entries(req, res, next) { + // list of incoming records + var incoming = []; + // Potentially a single json encoded body. + // This can happen from either an url-encoded or json content-type. + if ('date' in req.body) { + // add it to the incoming list + incoming.push(req.body); + } + // potentially a list of json entries + if (req.body.length) { + // add them to the list + incoming = incoming.concat(req.body); } - // use established list - return es.readArray(incoming); - } - - /** - * @function persist - * @returns {WritableStream} a writable persistent storage stream - * Sends stream elements into storage layer. - * Configures the storage layer stream. - */ - function persist (fn) { - if (req.persist_entries) { - // store everything - return entries.persist(fn); + + /** + * @function inputs + * @returns {ReadableStream} Readable stream with all incoming elements + * in the stream. + * in node, pipe is the most interoperable interface + * inputs returns a readable stream representing all the potential + * records from the HTTP body. + * Most content-types are handled by express middeware. + * However, text/* types are given to us as a raw buffer, this + * function switches between these two variants to find the + * correct input stream. + * stream, so use svgdata to handle those. + * The inputs stream always emits sgv json objects. + */ + function inputs() { + var input; + // handle all text types + if (req.is('text/*')) { + // re-use the svgdata parsing stream + input = es.pipeline(req, sgvdata.parse()); + return input; + } + // use established list + return es.readArray(incoming); + } + + /** + * @function persist + * @returns {WritableStream} a writable persistent storage stream + * Sends stream elements into storage layer. + * Configures the storage layer stream. + */ + function persist(fn) { + if (req.persist_entries) { + // store everything + return entries.persist(fn); + } + // support a preview mode, just lint everything + return es.pipeline(entries.map(), es.writeArray(fn)); } - // support a preview mode, just lint everything - return es.pipeline(entries.map( ), es.writeArray(fn)); - } - - /** - * @function done - * Final callback store results on `res.entries`, after all I/O is done. - * store results and move to the next middleware - */ - function done (err, result) { - // assign payload - res.entries = result; - res.entries_err = err; - return next( ); - } - - // pipe everything to persistent storage - // when finished, pass to the next piece of middleware - es.pipeline(inputs( ), persist(done)); + + /** + * @function done + * Final callback store results on `res.entries`, after all I/O is done. + * store results and move to the next middleware + */ + function done(err, result) { + // assign payload + res.entries = result; + res.entries_err = err; + return next(); + } + + // pipe everything to persistent storage + // when finished, pass to the next piece of middleware + es.pipeline(inputs(), persist(done)); } /** - * @function prepReqModel - * @param {Request} req The request to inspect - * @param {String} model The name of the model to use if not found. - * Sets `req.query.find.type` to your chosen model. - */ + * @function prepReqModel + * @param {Request} req The request to inspect + * @param {String} model The name of the model to use if not found. + * Sets `req.query.find.type` to your chosen model. + */ function prepReqModel(req, model) { - var type = model || 'sgv'; - if (!req.query.find) { - req.query.find = { - type: type - }; - } else { - req.query.find.type = type; - } + var type = model || 'sgv'; + if (!req.query.find) { + req.query.find = { + type: type + }; + } else { + req.query.find.type = type; + } } /** - * @param model - * Prepare model based on explicit choice in route/path parameter. - */ - api.param('model', function (req, res, next, model) { - prepReqModel(req, model); - next( ); + * @param model + * Prepare model based on explicit choice in route/path parameter. + */ + api.param('model', function(req, res, next, model) { + prepReqModel(req, model); + next(); }); /** - * @module get#/entries/current - * @route - * Get last entry. - * @response /definitions/Entries - */ + * @module get#/entries/current + * @route + * Get last entry. + * @response /definitions/Entries + */ api.get('/entries/current', function(req, res, next) { - //assume sgv - req.params.model = 'sgv'; - entries.list({count: 1}, function(err, records) { - res.entries = records; - res.entries_err = err; - return next( ); - }); + //assume sgv + req.params.model = 'sgv'; + entries.list({ + count: 1 + }, function(err, records) { + res.entries = records; + res.entries_err = err; + return next(); + }); }, format_entries); /** - * @module get#/entries/:spec - * @route - * Fetch one entry by id - * @response /definitions/Entries - * @param String spec :spec is either the id of a record or model name to - * search. If it is an id, only the record with that id will be in the - * response. If the string is a model name, like `sgv`, `mbg`, et al, the - * usual query logic is performed biased towards that model type. - * Useful for filtering by type. - */ + * @module get#/entries/:spec + * @route + * Fetch one entry by id + * @response /definitions/Entries + * @param String spec :spec is either the id of a record or model name to + * search. If it is an id, only the record with that id will be in the + * response. If the string is a model name, like `sgv`, `mbg`, et al, the + * usual query logic is performed biased towards that model type. + * Useful for filtering by type. + */ api.get('/entries/:spec', function(req, res, next) { - if (isId(req.params.spec)) { - entries.getEntry(req.params.spec, function(err, entry) { - if (err) { return next(err); } - res.entries = [entry]; - res.entries_err = err; - req.query.find = req.query.find || {}; - if (entry) { - req.query.find.type = entry.type; - } else { - res.entries_err = 'No such id: \'' + req.params.spec + '\''; - } - next(); - }); - } else { - req.params.model = req.params.spec; - prepReqModel(req, req.params.model); - query_models(req, res, next); - } + if (isId(req.params.spec)) { + entries.getEntry(req.params.spec, function(err, entry) { + if (err) { + return next(err); + } + res.entries = [entry]; + res.entries_err = err; + req.query.find = req.query.find || {}; + if (entry) { + req.query.find.type = entry.type; + } else { + res.entries_err = 'No such id: \'' + req.params.spec + '\''; + } + next(); + }); + } else { + req.params.model = req.params.spec; + prepReqModel(req, req.params.model); + query_models(req, res, next); + } }, format_entries); /** - * @module get#/entries - * @route - * @response /definitions/Entries - * Use the `find` parameter to generate mongo queries. - * Default is `count=10`, for only 10 latest entries, reverse sorted by - * `find[date]`. - * - */ + * @module get#/entries + * @route + * @response /definitions/Entries + * Use the `find` parameter to generate mongo queries. + * Default is `count=10`, for only 10 latest entries, reverse sorted by + * `find[date]`. + * + */ api.get('/entries', ifModifiedSinceCTX, query_models, format_entries); /** - * @function echo_query - * Output the generated query object itself, instead of the query results. - * Useful for understanding how REST api parameters translate into mongodb - * queries. - */ - function echo_query (req, res) { - var query = req.query; - // make a depth-wise copy of the original raw input - var input = JSON.parse(JSON.stringify(query)); - - // If "?count=" is present, use that number to decided how many to return. - if (!query.count) { - query.count = 10; - } - // bias towards entries, but allow expressing preference of storage layer - var storage = req.params.echo || 'entries'; - - // send payload with information about query itself - res.json({ query: ctx[storage].query_for(query), input: input, params: req.params, storage: storage}); + * @function echo_query + * Output the generated query object itself, instead of the query results. + * Useful for understanding how REST api parameters translate into mongodb + * queries. + */ + function echo_query(req, res) { + var query = req.query; + // make a depth-wise copy of the original raw input + var input = JSON.parse(JSON.stringify(query)); + + // If "?count=" is present, use that number to decided how many to return. + if (!query.count) { + query.count = 10; + } + // bias towards entries, but allow expressing preference of storage layer + var storage = req.params.echo || 'entries'; + + // send payload with information about query itself + res.json({ + query: ctx[storage].query_for(query), + input: input, + params: req.params, + storage: storage + }); } /** - * @function query_models - * Perform the standard query logic, translating API parameters into mongo - * db queries in a fairly regimented manner. - * This middleware executes the query, assigning the payload to results on - * `res.entries`. - */ - function query_models (req, res, next) { - var query = req.query; - - // If "?count=" is present, use that number to decided how many to return. - if (!query.count) { - query.count = 10; - } - - // bias to entries, but allow expressing a preference - var storage = req.storage || ctx.entries; - // perform the query - storage.list(query, function payload (err, entries) { - // assign payload - res.entries = entries; - res.entries_err = err; - return next( ); - }); + * @function query_models + * Perform the standard query logic, translating API parameters into mongo + * db queries in a fairly regimented manner. + * This middleware executes the query, assigning the payload to results on + * `res.entries`. + */ + function query_models(req, res, next) { + var query = req.query; + + // If "?count=" is present, use that number to decided how many to return. + if (!query.count) { + query.count = 10; + } + + // bias to entries, but allow expressing a preference + var storage = req.storage || ctx.entries; + // perform the query + storage.list(query, function payload(err, entries) { + // assign payload + res.entries = entries; + res.entries_err = err; + return next(); + }); } - function count_records (req, res, next) { - var query = req.query; - var storage = req.storage || ctx.entries; - storage.aggregate(query, function payload (err, entries) { - // assign payload - res.entries = entries; - res.entries_err = err; - return next(err); - }); + function count_records(req, res, next) { + var query = req.query; + var storage = req.storage || ctx.entries; + storage.aggregate(query, function payload(err, entries) { + // assign payload + res.entries = entries; + res.entries_err = err; + return next(err); + }); } - function format_results (req, res, next) { - res.json(res.entries); - next( ); + function format_results(req, res, next) { + res.json(res.entries); + next(); } /** - * @function delete_records - * Delete entries. The query logic works the same way as find/list. This - * endpoint uses same search logic to remove records from the database. - */ - function delete_records (req, res, next) { - // bias towards model, but allow expressing a preference - if (!req.model) { - req.model = ctx.entries; - } - var query = req.query; - if (!query.count) { query.count = 10 } - // remove using the query - req.model.remove(query, function(err, stat) { - if (err) { - return next(err); + * @function delete_records + * Delete entries. The query logic works the same way as find/list. This + * endpoint uses same search logic to remove records from the database. + */ + function delete_records(req, res, next) { + // bias towards model, but allow expressing a preference + if (!req.model) { + req.model = ctx.entries; + } + var query = req.query; + if (!query.count) { + query.count = 10 } - // yield some information about success of operation - res.json(stat); - return next( ); - }); + // remove using the query + req.model.remove(query, function(err, stat) { + if (err) { + return next(err); + } + // yield some information about success of operation + res.json(stat); + return next(); + }); } /** - * @param spec - * Middleware that prepares the :spec parameter in the routed path. - */ - api.param('spec', function (req, res, next, spec) { - if (isId(spec)) { - prepReqModel(req, req.params.model); - req.query = {find: {_id: req.params.spec}}; - } else { - prepReqModel(req, req.params.model); - } - next( ); + * @param spec + * Middleware that prepares the :spec parameter in the routed path. + */ + api.param('spec', function(req, res, next, spec) { + if (isId(spec)) { + prepReqModel(req, req.params.model); + req.query = { + find: { + _id: req.params.spec + } + }; + } else { + prepReqModel(req, req.params.model); + } + next(); }); /** - * @param echo - * The echo parameter in the path routing parameters allows the echo - * endpoints to customize the storage layer. - */ - api.param('echo', function (req, res, next, echo) { - console.log('echo', echo); - if (!echo) { - req.params.echo = 'entries'; - } - next( ); + * @param echo + * The echo parameter in the path routing parameters allows the echo + * endpoints to customize the storage layer. + */ + api.param('echo', function(req, res, next, echo) { + console.log('echo', echo); + if (!echo) { + req.params.echo = 'entries'; + } + next(); }); /** - * @module get#/echo/:echo/:model/:spec - * @routed - * Echo information about model/spec queries. - * Useful in understanding how REST API prepares queries against mongo. - */ + * @module get#/echo/:echo/:model/:spec + * @routed + * Echo information about model/spec queries. + * Useful in understanding how REST API prepares queries against mongo. + */ api.get('/echo/:echo/:model?/:spec?', echo_query); /** @@ -474,131 +522,137 @@ curl -s -g 'http://localhost:1337/api/v1/times/20{14..15}/T{13..18}:{00..15}'.js ``` */ - function prep_patterns (req, res, next) { - // initialize empty pattern list. - var pattern = [ ]; - // initialize a basic prefix - // also perform bash brace/glob-style expansion - var prefix = expand(req.params.prefix || '.*'); - - // if expansion leads to more than one prefix - if (prefix.length > 1) { - // pre-pend the prefix to the pattern list and wait to expand it as - // part of the full pattern - pattern.push('^' + req.params.prefix); - } - // append any regex parameters - if (req.params.regex) { - // prepend "match any" rule to their rule - pattern.push('.*' + req.params.regex); - } - // create a single pattern with all inputs considered - // expand the pattern using bash/glob style brace expansion to generate - // an array of patterns. - pattern = expand(pattern.join('')); - - /** - * Factory function to customize creation of RegExp patterns. - * @method iter_regex - * @param String prefix Default null - * @param String suffix Default null - * @returns function(pat) which turns the given pattern into a new - * RegExp with the prefix and suffix prepended, and appended, - * respectively. - */ - function iter_regex (prefix, suffix) { + function prep_patterns(req, res, next) { + // initialize empty pattern list. + var pattern = []; + // initialize a basic prefix + // also perform bash brace/glob-style expansion + var prefix = expand(req.params.prefix || '.*'); + + // if expansion leads to more than one prefix + if (prefix.length > 1) { + // pre-pend the prefix to the pattern list and wait to expand it as + // part of the full pattern + pattern.push('^' + req.params.prefix); + } + // append any regex parameters + if (req.params.regex) { + // prepend "match any" rule to their rule + pattern.push('.*' + req.params.regex); + } + // create a single pattern with all inputs considered + // expand the pattern using bash/glob style brace expansion to generate + // an array of patterns. + pattern = expand(pattern.join('')); + /** - * @function make - * @returns RegExp Make a RegExp with configured prefix and suffix - */ - function make (pat) { - // concat the prefix, pattern, and suffix. - pat = (prefix ? prefix : '') + pat + (suffix ? suffix : ''); - // return RegExp. - return new RegExp(pat); + * Factory function to customize creation of RegExp patterns. + * @method iter_regex + * @param String prefix Default null + * @param String suffix Default null + * @returns function(pat) which turns the given pattern into a new + * RegExp with the prefix and suffix prepended, and appended, + * respectively. + */ + function iter_regex(prefix, suffix) { + /** + * @function make + * @returns RegExp Make a RegExp with configured prefix and suffix + */ + function make(pat) { + // concat the prefix, pattern, and suffix. + pat = (prefix ? prefix : '') + pat + (suffix ? suffix : ''); + // return RegExp. + return new RegExp(pat); + } + // return functor + return make; + } + + // save pattern for other middlewares, eg echo, query, etc. + req.pattern = pattern; + var matches = pattern.map(iter_regex()); + // prepare the query against a configurable field name. + var field = req.patternField; + var query = {}; + query[field] = { + // $regex: prefix, + // configure query to perform regex against list of potential regexp + $in: matches + }; + if (prefix.length === 1) { + // If there is a single prefix pattern, mongo can optimize this against + // an indexed field + query[field].$regex = prefix.map(iter_regex('^')).pop(); } - // return functor - return make; - } - - // save pattern for other middlewares, eg echo, query, etc. - req.pattern = pattern; - var matches = pattern.map(iter_regex( )); - // prepare the query against a configurable field name. - var field = req.patternField; - var query = { }; - query[field] = { - // $regex: prefix, - // configure query to perform regex against list of potential regexp - $in: matches - }; - if (prefix.length === 1) { - // If there is a single prefix pattern, mongo can optimize this against - // an indexed field - query[field].$regex = prefix.map(iter_regex('^')).pop( ); - } - - // Merge into existing query structure. - if (req.query.find) { - if (req.query.find[field]) { - req.query.find[field].$in = query[field].$in; + + // Merge into existing query structure. + if (req.query.find) { + if (req.query.find[field]) { + req.query.find[field].$in = query[field].$in; + } else { + req.query.find[field] = query[field]; + } } else { - req.query.find[field] = query[field]; + req.query.find = query; } - } else { - req.query.find = query; - } - // Also assist in querying for the requested type. - if (req.params.type) { - req.query.find.type = req.params.type; - } - next( ); + // Also assist in querying for the requested type. + if (req.params.type) { + req.query.find.type = req.params.type; + } + next(); } /** - * @method prep_pattern_field - * Ensure that `req.patternField` is set to assist other middleware in - * deciding which field to generate queries against. - * Default is `dateString`, because that's the iso8601 field for sgv - * entries. - */ - function prep_pattern_field (req, res, next) { - // If req.params.field from routed path parameter is available use it. - if (req.params.field) { - req.patternField = req.params.field; - } else { - // Default is `dateString`. - req.patternField = 'dateString'; - } - next( ); + * @method prep_pattern_field + * Ensure that `req.patternField` is set to assist other middleware in + * deciding which field to generate queries against. + * Default is `dateString`, because that's the iso8601 field for sgv + * entries. + */ + function prep_pattern_field(req, res, next) { + // If req.params.field from routed path parameter is available use it. + if (req.params.field) { + req.patternField = req.params.field; + } else { + // Default is `dateString`. + req.patternField = 'dateString'; + } + next(); } /** - * @method prep_storage - * Prep storage layer for other middleware by setting `req.storage`. - * Some routed paths have a `storage` parameter available, when this is - * set, `req.storage will be set to that value. The default otherwise is - * the entries storage layer, because that's where sgv records are stored - * by default. - */ - function prep_storage (req, res, next) { - if (req.params.storage && _.includes(['entries', 'treatments', 'devicestatus'], req.params.storage)) { - req.storage = ctx[req.params.storage]; - } else { - req.storage = ctx.entries; - } - next( ); + * @method prep_storage + * Prep storage layer for other middleware by setting `req.storage`. + * Some routed paths have a `storage` parameter available, when this is + * set, `req.storage will be set to that value. The default otherwise is + * the entries storage layer, because that's where sgv records are stored + * by default. + */ + function prep_storage(req, res, next) { + if (req.params.storage && _includes(['entries', 'treatments', 'devicestatus'], req.params.storage)) { + req.storage = ctx[req.params.storage]; + } else { + req.storage = ctx.entries; + } + next(); } /** - * @module get#/times/echo/:prefix/:regex - * Echo interface for the regex pattern generator. - * @routed - * Useful for understanding how the `/:prefix/:regex` route generates - * mongodb queries. - */ - api.get('/times/echo/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, prep_patterns, function (req, res) { - res.json({ req: { params: req.params, query: req.query}, pattern: req.pattern}); + * @module get#/times/echo/:prefix/:regex + * Echo interface for the regex pattern generator. + * @routed + * Useful for understanding how the `/:prefix/:regex` route generates + * mongodb queries. + */ + api.get('/times/echo/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, prep_patterns, function(req, res) { + res.json({ + req: { + params: req.params, + query: req.query + }, + pattern: req.pattern + }); }); /** @@ -630,52 +684,56 @@ curl -s -g 'http://localhost:1337/api/v1/times/20{14..15}/T{13..18}:{00..15}'.js api.get('/slice/:storage/:field/:type?/:prefix?/:regex?', prep_storage, prep_pattern_field, prep_patterns, query_models, format_entries); /** - * @module post#/entries/preview - * Allow previewing your post content, just echos everything you - * posted back out. - * Similar to the echo api, useful to lint/debug upload problems. - */ - api.post('/entries/preview', ctx.authorization.isPermitted('api:entries:create'), function (req, res, next) { - // setting this flag tells insert_entries to not actually store the results - req.persist_entries = false; - next( ); + * @module post#/entries/preview + * Allow previewing your post content, just echos everything you + * posted back out. + * Similar to the echo api, useful to lint/debug upload problems. + */ + api.post('/entries/preview', ctx.authorization.isPermitted('api:entries:create'), function(req, res, next) { + // setting this flag tells insert_entries to not actually store the results + req.persist_entries = false; + next(); }, insert_entries, format_entries); // Protect endpoints with authenticated api. if (app.enabled('api')) { - // Create and store new sgv entries - /** - * @module post#/entries - * Allow posting content to store. - * Stores incoming payload that follows basic rules about having a - * `type` field in `entries` storage layer. - */ - api.post('/entries/', ctx.authorization.isPermitted('api:entries:create'), function (req, res, next) { - // setting this flag tells insert_entries to store the results - req.persist_entries = true; - next( ); - }, insert_entries, format_entries); - - /** - * @module delete#/entries/:spec - * @route - * Delete entries. The query logic works the same way as find/list. This - * endpoint uses same search logic to remove records from the database. - */ - api.delete('/entries/:spec', ctx.authorization.isPermitted('api:entries:delete'), function (req, res, next) { - // if ID, prepare to query for one record - if (isId(req.params.spec)) { - prepReqModel(req, req.params.model); - req.query = {find: {_id: req.params.spec}}; - } else { - req.params.model = req.params.spec; - prepReqModel(req, req.params.model); - if (req.query.find.type === '*') { - delete req.query.find.type; - } - } - next( ); - }, delete_records); + // Create and store new sgv entries + /** + * @module post#/entries + * Allow posting content to store. + * Stores incoming payload that follows basic rules about having a + * `type` field in `entries` storage layer. + */ + api.post('/entries/', ctx.authorization.isPermitted('api:entries:create'), function(req, res, next) { + // setting this flag tells insert_entries to store the results + req.persist_entries = true; + next(); + }, insert_entries, format_entries); + + /** + * @module delete#/entries/:spec + * @route + * Delete entries. The query logic works the same way as find/list. This + * endpoint uses same search logic to remove records from the database. + */ + api.delete('/entries/:spec', ctx.authorization.isPermitted('api:entries:delete'), function(req, res, next) { + // if ID, prepare to query for one record + if (isId(req.params.spec)) { + prepReqModel(req, req.params.model); + req.query = { + find: { + _id: req.params.spec + } + }; + } else { + req.params.model = req.params.spec; + prepReqModel(req, req.params.model); + if (req.query.find.type === '*') { + delete req.query.find.type; + } + } + next(); + }, delete_records); } @@ -684,4 +742,4 @@ curl -s -g 'http://localhost:1337/api/v1/times/20{14..15}/T{13..18}:{00..15}'.js } // expose module -module.exports = configure; +module.exports = configure; \ No newline at end of file diff --git a/lib/api/index.js b/lib/api/index.js index 7926ab5fd9a..3c9748c93e6 100644 --- a/lib/api/index.js +++ b/lib/api/index.js @@ -1,7 +1,7 @@ 'use strict'; function create (env, ctx) { - var _ = require('lodash') + var _each = require('lodash/each') , express = require('express') , app = express( ) ; @@ -11,11 +11,7 @@ function create (env, ctx) { // set up express app with our options app.set('name', env.name); app.set('version', env.version); - // app.set('head', env.head); - function get_head ( ) { - return env.head; - } - wares.get_head = get_head; + app.set('units', env.DISPLAY_UNITS); // Only allow access to the API if API_SECRET is set on the server. app.disable('api'); @@ -26,7 +22,7 @@ function create (env, ctx) { if (env.settings.enable) { app.extendedClientSettings = ctx.plugins && ctx.plugins.extendedClientSettings ? ctx.plugins.extendedClientSettings(env.extendedSettings) : {}; - _.each(env.settings.enable, function (enable) { + _each(env.settings.enable, function (enable) { console.info('enabling feature:', enable); app.enable(enable); }); @@ -57,6 +53,8 @@ function create (env, ctx) { app.all('/devicestatus*', require('./devicestatus/')(app, wares, ctx)); app.all('/notifications*', require('./notifications-api')(app, wares, ctx)); + app.all('/activity*', require('./activity/')(app, wares, ctx)); + app.use('/', wares.sendJSONStatus, require('./verifyauth')(ctx)); app.all('/food*', require('./food/')(app, wares, ctx)); diff --git a/lib/api/properties.js b/lib/api/properties.js index 11e03e07395..981f3c31328 100644 --- a/lib/api/properties.js +++ b/lib/api/properties.js @@ -1,6 +1,9 @@ 'use strict'; -var _ = require('lodash'); +var _isEmpty = require('lodash/isEmpty'); +var _filter = require('lodash/filter'); +var _pick = require('lodash/pick'); + var express = require('express'); var sandbox = require('../sandbox')(); @@ -22,21 +25,21 @@ function create (env, ctx) { ctx.plugins.setProperties(sbx); function notEmpty (part) { - return ! _.isEmpty(part); + return ! _isEmpty(part); } - var segments = _.filter(req.path.split('/'), notEmpty); + var segments = _filter(req.path.split('/'), notEmpty); var selected = [ ]; if (segments.length > 0) { - selected = _.filter(segments[0].split(','), notEmpty); + selected = _filter(segments[0].split(','), notEmpty); } var result = sbx.properties; if (selected.length > 0) { - result = _.pick(sbx.properties, selected); + result = _pick(sbx.properties, selected); } if (req.query && req.query.pretty) { diff --git a/lib/api/status.js b/lib/api/status.js index 350f428fdc4..9d18b524ec3 100644 --- a/lib/api/status.js +++ b/lib/api/status.js @@ -23,7 +23,6 @@ function configure (app, wares, env, ctx) { , apiEnabled: app.enabled('api') , careportalEnabled: app.enabled('api') && env.settings.enable.indexOf('careportal') > -1 , boluscalcEnabled: app.enabled('api') && env.settings.enable.indexOf('boluscalc') > -1 - , head: wares.get_head( ) , settings: env.settings , extendedSettings: app.extendedClientSettings , authorized: ctx.authorization.authorize(req.query.token || '') diff --git a/lib/api/treatments/index.js b/lib/api/treatments/index.js index 842c26df800..3fff4ceb331 100644 --- a/lib/api/treatments/index.js +++ b/lib/api/treatments/index.js @@ -1,6 +1,9 @@ 'use strict'; -var _ = require('lodash'); +var _forEach = require('lodash/forEach'); +var _isNil = require('lodash/isNil'); +var _isArray = require('lodash/isArray'); + var consts = require('../../constants'); var moment = require('moment'); @@ -36,7 +39,7 @@ function configure(app, wares, ctx) { ctx.treatments.list(req.query, function(err, results) { var d1 = null; - _.forEach(results, function clean(t) { + _forEach(results, function clean(t) { t.carbs = Number(t.carbs); t.insulin = Number(t.insulin); @@ -57,7 +60,7 @@ function configure(app, wares, ctx) { } }); - if (!_.isNil(d1)) res.setHeader('Last-Modified', d1.toUTCString()); + if (!_isNil(d1)) res.setHeader('Last-Modified', d1.toUTCString()); if (ifModifiedSince && d1.getTime() <= moment(ifModifiedSince).valueOf()) { res.status(304).send({ @@ -77,7 +80,7 @@ function configure(app, wares, ctx) { function post_response(req, res) { var treatments = req.body; - if (!_.isArray(treatments)) { + if (!_isArray(treatments)) { treatments = [treatments]; }; diff --git a/lib/authorization/storage.js b/lib/authorization/storage.js index 5b89f2b4177..41969be150f 100644 --- a/lib/authorization/storage.js +++ b/lib/authorization/storage.js @@ -5,7 +5,7 @@ var crypto = require('crypto'); var shiroTrie = require('shiro-trie'); var ObjectID = require('mongodb').ObjectID; -var find_options = require('../query'); +var find_options = require('../server/query'); function init (env, ctx) { var storage = { }; @@ -114,6 +114,7 @@ function init (env, ctx) { , { name: 'readable', permissions: [ '*:*:read' ] } , { name: 'careportal', permissions: [ 'api:treatments:create' ] } , { name: 'devicestatus-upload', permissions: [ 'api:devicestatus:create' ] } + , { name: 'activity', permissions: [ 'api:activity:create' ] } ]; storage.reload = function reload (callback) { diff --git a/lib/client/browser-settings.js b/lib/client/browser-settings.js index fab5dafbd50..bfac4df8067 100644 --- a/lib/client/browser-settings.js +++ b/lib/client/browser-settings.js @@ -36,6 +36,7 @@ function init (client, serverSettings, $) { $('#alarm-timeagowarnmins-browser').val(settings.alarmTimeagoWarnMins); $('#alarm-timeagourgent-browser').prop('checked', settings.alarmTimeagoUrgent); $('#alarm-timeagourgentmins-browser').val(settings.alarmTimeagoUrgentMins); + $('#alarm-pumpbatterylow-browser').prop('checked', settings.alarmPumpBatteryLow); $('#nightmode-browser').prop('checked', settings.nightMode); $('#editmode-browser').prop('checked', settings.editMode); diff --git a/lib/client/browser-utils.js b/lib/client/browser-utils.js index 6ce7d2461d7..fc9a983d0e0 100644 --- a/lib/client/browser-utils.js +++ b/lib/client/browser-utils.js @@ -7,12 +7,12 @@ function init ($) { // Tooltips can remain in the way on touch screens. if (!isTouch()) { - $('.tip').tipsy(); + $('.tip').tooltip(); } else { // Drawer info tips should be displayed on touchscreens. - $('#drawer').find('.tip').tipsy(); + $('#drawer').find('.tip').tooltip(); } - $.fn.tipsy.defaults = { + $.fn.tooltip.defaults = { fade: true, gravity: 'n', opacity: 0.75 diff --git a/lib/client/careportal.js b/lib/client/careportal.js index f595b335734..f6c73c2abb3 100644 --- a/lib/client/careportal.js +++ b/lib/client/careportal.js @@ -11,6 +11,7 @@ function init (client, $) { var translate = client.translate; var storage = Storages.localStorage; + var units = client.settings.units; careportal.allEventTypes = client.plugins.getAllEventTypes(client.sbx); @@ -207,6 +208,11 @@ function init (client, $) { , units: client.settings.units }; + if (units == "mmol") { + data.targetTop = data.targetTop * 18; + data.targetBottom = data.targetBottom * 18; + } + //special handling for absolute to support temp to 0 var absolute = $('#absolute').val(); if ('' !== absolute && !isNaN(absolute)) { @@ -264,8 +270,17 @@ function init (client, $) { pushIf(data.glucose, translate('Measurement Method') + ': ' + translate(data.glucoseType)); pushIf(data.reason, translate('Reason') + ': ' + data.reason); - pushIf(data.targetTop, translate('Target Top') + ': ' + data.targetTop); - pushIf(data.targetBottom, translate('Target Bottom') + ': ' + data.targetBottom); + + var targetTop = data.targetTop; + var targetBottom = data.targetBottom; + + if (units == "mmol") { + targetTop = Math.round(data.targetTop / 18.0 * 10) / 10; + targetBottom = Math.round(data.targetBottom / 18.0 * 10) / 10; + } + + pushIf(data.targetTop, translate('Target Top') + ': ' + targetTop); + pushIf(data.targetBottom, translate('Target Bottom') + ': ' + targetBottom); pushIf(data.carbs, translate('Carbs Given') + ': ' + data.carbs); pushIf(data.insulin, translate('Insulin Given') + ': ' + data.insulin); diff --git a/lib/client/index.js b/lib/client/index.js index f8ca8e56fbe..7a305148677 100644 --- a/lib/client/index.js +++ b/lib/client/index.js @@ -111,6 +111,7 @@ client.load = function load(serverSettings, callback) { , currentAnnouncement , alarmSound = 'alarm.mp3' , urgentAlarmSound = 'alarm2.mp3' + , previousNotifyTimestamp ; client.entryToDate = function entryToDate (entry) { return new Date(entry.mills); }; @@ -167,6 +168,10 @@ client.load = function load(serverSettings, callback) { , pluginBase: client.plugins.base(majorPills, minorPills, statusPills, bgStatus, client.tooltip, Storages.localStorage) }; + client.ctx.language = language; + levels.translate = language.translate; + client.ctx.levels = levels; + client.sbx = sandbox.clientInit(client.ctx, client.now); client.renderer = require('./renderer')(client, d3, $); @@ -571,16 +576,19 @@ client.load = function load(serverSettings, callback) { return range; } - function setAlarmMessage (notify) { + function formatAlarmMessage(notify) { var announcementMessage = notify && notify.isAnnouncement && notify.message && notify.message.length > 1; if (announcementMessage) { - alarmMessage = levels.toDisplay(notify.level) + ': ' + notify.message; + return levels.toDisplay(notify.level) + ': ' + notify.message; } else if (notify) { - alarmMessage = notify.title; - } else { - alarmMessage = null; + return notify.title; } + return null; + } + + function setAlarmMessage (notify) { + alarmMessage = formatAlarmMessage(notify); } function generateAlarm (file, notify) { @@ -596,6 +604,9 @@ client.load = function load(serverSettings, callback) { playAlarm(audio); $(this).addClass('playing'); }); + + console.log('Asking plugins to visualize alarms'); + client.plugins.visualizeAlarm(client.sbx, notify, alarmMessage); } container.addClass('alarming').addClass(file === urgentAlarmSound ? 'urgent' : 'warning'); @@ -763,8 +774,9 @@ client.load = function load(serverSettings, callback) { console.info('generating timeAgoAlarm', alarm); container.addClass('alarming-timeago'); var display = client.timeago.calcDisplay(client.sbx.lastSGVEntry(), client.sbx.time); + var translate = client.translate; var notify = { - title: 'Last data received ' + [display.value, display.label].join(' ') + title: translate('Last data received') + ' ' + display.value + ' ' + translate(display.label) , level: status === 'urgent' ? 2 : 1 , group: 'Time Ago' }; @@ -978,6 +990,18 @@ client.load = function load(serverSettings, callback) { return client.latestSGV && client.latestSGV.mgdl <= client.settings.thresholds.bgTargetTop; } + socket.on('notification', function (notify) { + console.log('notification from server:',notify); + + if (notify.timestamp && previousNotifyTimestamp != notify.timestamp) + { + previousNotifyTimestamp = notify.timestamp; + client.plugins.visualizeAlarm(client.sbx, notify, notify.title + ' ' + notify.message); + } else { + console.log('No timestamp found for notify, not passing to plugins'); + } + }); + socket.on('announcement', function (notify) { console.info('announcement received from server'); console.log('notify:',notify); @@ -1127,6 +1151,7 @@ client.load = function load(serverSettings, callback) { chart.update(true); } else if (!inRetroMode()) { chart.update(false); + client.plugins.updateVisualisations(client.nowSBX); } } diff --git a/lib/client/receiveddata.js b/lib/client/receiveddata.js index e80b971710f..be622a7705f 100644 --- a/lib/client/receiveddata.js +++ b/lib/client/receiveddata.js @@ -37,7 +37,6 @@ function mergeDataUpdate(isDelta, cachedDataArray, receivedDataArray, maxAge) { } // purge old data from cache before updating - var purgeCount = 0; var mAge = (isNaN(maxAge) || maxAge == null) ? TWO_DAYS : maxAge; var twoDaysAgo = new Date().getTime() - mAge; @@ -45,14 +44,8 @@ function mergeDataUpdate(isDelta, cachedDataArray, receivedDataArray, maxAge) { var element = cachedDataArray[i]; if (element !== null && element !== undefined && element.mills <= twoDaysAgo) { cachedDataArray.splice(i,0); - purgeCount += 1; } } - - //if (purgeCount > 0) { - // console.log('Purged ' + purgeCount + ' elements from cache due to age'); - //} - // If this is delta, calculate the difference, merge and sort var diff = nsArrayDiff(cachedDataArray, receivedDataArray); @@ -113,6 +106,7 @@ function receiveDData (received, ddata, settings) { ddata.sgvs = mergeDataUpdate(received.delta, ddata.sgvs, received.sgvs); ddata.mbgs = mergeDataUpdate(received.delta, ddata.mbgs, received.mbgs); ddata.treatments = mergeTreatmentUpdate(received.delta, ddata.treatments, received.treatments); + ddata.food = mergeTreatmentUpdate(received.delta, ddata.food, received.food); ddata.processTreatments(false); diff --git a/lib/client/renderer.js b/lib/client/renderer.js index e9478e4a378..6dc0f68fcb3 100644 --- a/lib/client/renderer.js +++ b/lib/client/renderer.js @@ -151,7 +151,7 @@ function init (client, d3) { client.tooltip.transition().duration(TOOLTIP_TRANS_MS).style('opacity', .9); client.tooltip.html('' + translate('BG')+ ': ' + client.sbx.scaleEntry( d ) + (d.type === 'mbg' ? '
' + translate('Device') + ': ' + d.device : '') + - (d.type === 'forecast' ? '
' + translate('Forecast Type') + ': ' + d.forecastType : '') + + (d.type === 'forecast' && d.forecastType ? '
' + translate('Forecast Type') + ': ' + d.forecastType : '') + (rawbgInfo.value ? '
' + translate('Raw BG') + ': ' + rawbgInfo.value : '') + (rawbgInfo.noise ? '
' + translate('Noise') + ': ' + rawbgInfo.noise : '') + '
' + translate('Time') + ': ' + client.formatTime(new Date(d.mills))) @@ -393,8 +393,6 @@ function init (client, d3) { function calcTreatmentRadius(treatment, opts, carbratio) { var CR = treatment.CR || carbratio || 20; - var carbs = treatment.carbs || CR; - var insulin = treatment.insulin || 1; var carbsOrInsulin = CR; if ( treatment.carbs ) { carbsOrInsulin = treatment.carbs; @@ -883,6 +881,7 @@ function init (client, d3) { renderer.drawTreatments = function drawTreatments(client) { var treatmentCount = 0; + chart().focus.selectAll('.draggable-treatment').remove(); _.forEach(client.ddata.treatments, function eachTreatment (d) { if (Number(d.insulin) > 0 || Number(d.carbs) > 0) { treatmentCount += 1; }; diff --git a/lib/data/dataloader.js b/lib/data/dataloader.js index 541e32a9c38..ee6308d9846 100644 --- a/lib/data/dataloader.js +++ b/lib/data/dataloader.js @@ -5,297 +5,383 @@ var async = require('async'); var times = require('../times'); var fitTreatmentsToBGCurve = require('./treatmenttocurve'); -var ONE_DAY = 86400000 - , TWO_DAYS = 172800000; +var ONE_DAY = 86400000, + TWO_DAYS = 172800000; function uniq(a) { - var seen = {}; - return a.filter(function (item) { - return seen.hasOwnProperty(item.mills) ? false : (seen[item.mills] = true); - }); + var seen = {}; + return a.filter(function(item) { + return seen.hasOwnProperty(item.mills) ? false : (seen[item.mills] = true); + }); } function init(env, ctx) { - var dataloader = { }; + var dataloader = {}; - dataloader.update = function update(ddata, opts, done) { - if (opts && done == null && opts.call) { - done = opts; - opts = { lastUpdated: Date.now( ), frame: false }; - } + dataloader.update = function update(ddata, opts, done) { - if (opts.frame) { - ddata.page = { - frame: true - , after: opts.lastUpdated - // , before: opts. - }; - } - ddata.lastUpdated = opts.lastUpdated; - // console.log('LOOKING SINCE', (new Date(ddata.lastUpdated))); - - function loadComplete (err, result) { - ddata.treatments = _.uniq(ddata.treatments, false, function (item) { return item._id.toString(); }); - //sort treatments so the last is the most recent - ddata.treatments = _.sortBy(ddata.treatments, function (item) { return item.mills; }); - fitTreatmentsToBGCurve(ddata, env, ctx); - if (err) { - console.error(err); - } - ddata.processTreatments(true); - - var counts = []; - _.forIn(ddata, function each (value, key) { - if (_.isArray(value) && value.length > 0) { - counts.push(key + ':' + value.length); + //console.log("Database is connected: " + ctx.store.client.isConnected()); + + if (opts && done == null && opts.call) { + done = opts; + opts = { + lastUpdated: Date.now(), + frame: false + }; } - }); - console.info('Load Complete:\n\t', counts.join(', ')); + if (opts.frame) { + ddata.page = { + frame: true, + after: opts.lastUpdated + // , before: opts. + }; + } + ddata.lastUpdated = opts.lastUpdated; + // console.log('LOOKING SINCE', (new Date(ddata.lastUpdated))); - done(err, result); - } + function loadComplete(err, result) { + ddata.treatments = _.uniq(ddata.treatments, false, function(item) { + return item._id.toString(); + }); + //sort treatments so the last is the most recent + ddata.treatments = _.sortBy(ddata.treatments, function(item) { + return item.mills; + }); + fitTreatmentsToBGCurve(ddata, env, ctx); + if (err) { + console.error(err); + } + ddata.processTreatments(true); + + var counts = []; + _.forIn(ddata, function each(value, key) { + if (_.isArray(value) && value.length > 0) { + counts.push(key + ':' + value.length); + } + }); - // clear treatments, we're going to merge from more queries - ddata.treatments = []; + console.info('Load Complete:\n\t', counts.join(', ')); - async.parallel([ - loadEntries.bind(null, ddata, ctx) - , loadTreatments.bind(null, ddata, ctx) - , loadProfileSwitchTreatments.bind(null, ddata, ctx) - , loadSensorAndInsulinTreatments.bind(null, ddata, ctx) - , loadProfile.bind(null, ddata, ctx) - , loadFood.bind(null, ddata, ctx) - , loadDeviceStatus.bind(null, ddata, env, ctx) - ], loadComplete); + done(err, result); + } + + // clear treatments, we're going to merge from more queries + ddata.treatments = []; + + async.parallel([ + loadEntries.bind(null, ddata, ctx) + , loadTreatments.bind(null, ddata, ctx) + , loadProfileSwitchTreatments.bind(null, ddata, ctx) + , loadSensorAndInsulinTreatments.bind(null, ddata, ctx) + , loadProfile.bind(null, ddata, ctx) + , loadFood.bind(null, ddata, ctx) + , loadDeviceStatus.bind(null, ddata, env, ctx) + , loadActivity.bind(null, ddata, ctx) + ], loadComplete); - }; + }; - return dataloader; + return dataloader; } -function loadEntries (ddata, ctx, callback) { - var dateRange = { - $gte: ddata.lastUpdated - TWO_DAYS - }; - if (ddata.page && ddata.page.frame) { - dateRange['$lte'] = ddata.lastUpdated; - } - var q = { - find: { - date: dateRange +function loadEntries(ddata, ctx, callback) { + var dateRange = { + $gte: ddata.lastUpdated - TWO_DAYS + }; + if (ddata.page && ddata.page.frame) { + dateRange['$lte'] = ddata.lastUpdated; } - , sort: {date: 1} - }; - - ctx.entries.list(q, function (err, results) { - if (!err && results) { - var mbgs = []; - var sgvs = []; - var cals = []; - results.forEach(function (element) { - if (element) { - if (element.mbg) { - mbgs.push({ - mgdl: Number(element.mbg), mills: element.date, device: element.device - }); - } else if (element.sgv) { - sgvs.push({ - mgdl: Number(element.sgv), mills: element.date, device: element.device, direction: element.direction, filtered: element.filtered, unfiltered: element.unfiltered, noise: element.noise, rssi: element.rssi - }); - } else if (element.type === 'cal') { - cals.push({ - mills: element.date, scale: element.scale, intercept: element.intercept, slope: element.slope - }); - } + var q = { + find: { + date: dateRange + }, + sort: { + date: 1 } - }); + }; - //stop using uniq for SGVs since we use buckets, also enables more detailed monitoring - ddata.sgvs = sgvs; + ctx.entries.list(q, function(err, results) { - ddata.mbgs = uniq(mbgs); - ddata.cals = uniq(cals); - } - callback(); - }); + if (err) { + console.log("Problem loading entries"); + } + + if (!err && results) { + var mbgs = []; + var sgvs = []; + var cals = []; + results.forEach(function(element) { + if (element) { + if (element.mbg) { + mbgs.push({ + mgdl: Number(element.mbg), + mills: element.date, + device: element.device + }); + } else if (element.sgv) { + sgvs.push({ + mgdl: Number(element.sgv), + mills: element.date, + device: element.device, + direction: element.direction, + filtered: element.filtered, + unfiltered: element.unfiltered, + noise: element.noise, + rssi: element.rssi + }); + } else if (element.type === 'cal') { + cals.push({ + mills: element.date, + scale: element.scale, + intercept: element.intercept, + slope: element.slope + }); + } + } + }); + + //stop using uniq for SGVs since we use buckets, also enables more detailed monitoring + ddata.sgvs = sgvs; + + ddata.mbgs = uniq(mbgs); + ddata.cals = uniq(cals); + } + callback(); + }); } -function mergeToTreatments (ddata, results) { - var filtered = _.filter(results, function hasId (treatment) { - return !_.isEmpty(treatment._id); - }); - - var treatments = _.map(filtered, function update (treatment) { - treatment.mills = new Date(treatment.created_at).getTime(); - return treatment; - }); - - //filter out temps older than a day and an hour ago since we don't display them - var oldestAgo = ddata.lastUpdated - TWO_DAYS - times.hour().msecs; - treatments = _.filter(treatments, function noOldTemps (treatment) { - return !treatment.eventType || treatment.eventType.indexOf('Temp Basal') === -1 || treatment.mills > oldestAgo; - }); - - ddata.treatments = _.unionWith(ddata.treatments, treatments, function (a, b) { - return a._id.toString() == b._id.toString(); - }); +function mergeToTreatments(ddata, results) { + var filtered = _.filter(results, function hasId(treatment) { + return !_.isEmpty(treatment._id); + }); + + var treatments = _.map(filtered, function update(treatment) { + treatment.mills = new Date(treatment.created_at).getTime(); + return treatment; + }); + + //filter out temps older than a day and an hour ago since we don't display them + var oldestAgo = ddata.lastUpdated - TWO_DAYS - times.hour().msecs; + treatments = _.filter(treatments, function noOldTemps(treatment) { + return !treatment.eventType || treatment.eventType.indexOf('Temp Basal') === -1 || treatment.mills > oldestAgo; + }); + + ddata.treatments = _.unionWith(ddata.treatments, treatments, function(a, b) { + return a._id.toString() == b._id.toString(); + }); } -function loadTreatments (ddata, ctx, callback) { - var dateRange = { - $gte: new Date(ddata.lastUpdated - (ONE_DAY * 8)).toISOString() - }; - if (ddata.page && ddata.page.frame) { - dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString( ); - } - var tq = { - find: { - created_at: dateRange - } - , sort: {created_at: 1} - }; - console.log('searching treatments q', tq); - ctx.treatments.list(tq, function (err, results) { - if (!err && results) { - mergeToTreatments(ddata, results); +function loadActivity(ddata, ctx, callback) { + var dateRange = { + $gte: new Date(ddata.lastUpdated - (ONE_DAY * 2)).toISOString() + }; + if (ddata.page && ddata.page.frame) { + dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString(); } - callback(); - }); -} + var q = { + find: { + created_at: dateRange + }, + sort: { + created_at: 1 + } + }; -function loadProfileSwitchTreatments (ddata, ctx, callback) { - var dateRange = { - $gte: new Date(ddata.lastUpdated - (ONE_DAY * 31 * 12)).toISOString() - }; + var activity = []; + ctx.activity.list(q, function(err, results) { - if (ddata.page && ddata.page.frame) { - dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString( ); - } + if (err) { + console.log("Problem loading activity data"); + } - var tq = { - find: { - eventType: 'Profile Switch' - , created_at: dateRange - } - , sort: {created_at: -1} - }; + if (!err && results) { + var activity = []; + results.forEach(function(element) { + if (element) { + if (element.created_at) { + var d = new Date(element.created_at); + activity.push({ + mills: d, + heartrate: element.heartrate, + steps: element.steps, + activitylevel: element.activitylevel + }); + } + } + }); + + ddata.activity = uniq(activity); + } + callback(); + }); +} - ctx.treatments.list(tq, function (err, results) { - if (!err && results) { - mergeToTreatments(ddata, results); +function loadTreatments(ddata, ctx, callback) { + var dateRange = { + $gte: new Date(ddata.lastUpdated - (ONE_DAY * 8)).toISOString() + }; + if (ddata.page && ddata.page.frame) { + dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString(); } + var tq = { + find: { + created_at: dateRange + }, + sort: { + created_at: 1 + } + }; - // Store last profile switch - if (results) { - ddata.lastProfileFromSwitch = null; - var now = new Date().getTime(); - for (var p = 0; p < results.length; p++ ) { - var pdate = new Date(results[p].created_at).getTime(); - if (pdate < now) { - ddata.lastProfileFromSwitch = results[p].profile; - break; + console.log('searching treatments q', tq); + ctx.treatments.list(tq, function(err, results) { + if (!err && results) { + mergeToTreatments(ddata, results); } - } - } - callback(); - }); + callback(); + }); } -function loadSensorAndInsulinTreatments (ddata, ctx, callback) { - var dateRange = { - $gte: new Date(ddata.lastUpdated - (ONE_DAY * 32)).toISOString() - }; - - if (ddata.page && ddata.page.frame) { - dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString( ); - } - - var tq = { - find: { - eventType: { - $in: [ 'Sensor Start', 'Sensor Change', 'Insulin Change', 'Pump Battery Change'] - } - , created_at: dateRange +function loadProfileSwitchTreatments(ddata, ctx, callback) { + var dateRange = { + $gte: new Date(ddata.lastUpdated - (ONE_DAY * 31 * 12)).toISOString() + }; + + if (ddata.page && ddata.page.frame) { + dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString(); } - , sort: {created_at: -1} - }; - ctx.treatments.list(tq, function (err, results) { - if (!err && results) { - mergeToTreatments(ddata, results); + var tq = { + find: { + eventType: 'Profile Switch', + created_at: dateRange + }, + sort: { + created_at: -1 + } + }; + + ctx.treatments.list(tq, function(err, results) { + if (!err && results) { + mergeToTreatments(ddata, results); + } + + // Store last profile switch + if (results) { + ddata.lastProfileFromSwitch = null; + var now = new Date().getTime(); + for (var p = 0; p < results.length; p++) { + var pdate = new Date(results[p].created_at).getTime(); + if (pdate < now) { + ddata.lastProfileFromSwitch = results[p].profile; + break; + } + } + } + + callback(); + }); +} + +function loadSensorAndInsulinTreatments(ddata, ctx, callback) { + var dateRange = { + $gte: new Date(ddata.lastUpdated - (ONE_DAY * 32)).toISOString() + }; + + if (ddata.page && ddata.page.frame) { + dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString(); } - callback(); - }); + var tq = { + find: { + eventType: { + $in: ['Sensor Start', 'Sensor Change', 'Insulin Change', 'Pump Battery Change'] + }, + created_at: dateRange + }, + sort: { + created_at: -1 + } + }; + + ctx.treatments.list(tq, function(err, results) { + if (!err && results) { + mergeToTreatments(ddata, results); + } + + callback(); + }); } -function loadProfile (ddata, ctx, callback) { - ctx.profile.last(function (err, results) { - if (!err && results) { - var profiles = []; - results.forEach(function (element) { - if (element) { - profiles[0] = element; +function loadProfile(ddata, ctx, callback) { + ctx.profile.last(function(err, results) { + if (!err && results) { + var profiles = []; + results.forEach(function(element) { + if (element) { + profiles[0] = element; + } + }); + ddata.profiles = profiles; } - }); - ddata.profiles = profiles; - } - callback(); - }); + callback(); + }); } - function loadFood (ddata, ctx, callback) { - ctx.food.list(function (err, results) { - if (!err && results) { - ddata.food = results; - } - callback(); +function loadFood(ddata, ctx, callback) { + ctx.food.list(function(err, results) { + if (!err && results) { + ddata.food = results; + } + callback(); }); - } - - function loadDeviceStatus (ddata, env, ctx, callback) { - var dateRange = { - $gte: new Date(ddata.lastUpdated - ONE_DAY).toISOString() - }; - if (ddata.page && ddata.page.frame) { - dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString( ); - } - var opts = { - find: { - created_at: dateRange +} + +function loadDeviceStatus(ddata, env, ctx, callback) { + var dateRange = { + $gte: new Date(ddata.lastUpdated - ONE_DAY).toISOString() + }; + if (ddata.page && ddata.page.frame) { + dateRange['$lte'] = new Date(ddata.lastUpdated).toISOString(); } - , sort: {created_at: -1} - }; - - if (env.extendedSettings.devicestatus && env.extendedSettings.devicestatus.advanced) { - //not adding count: 1 restriction - } else { - opts.count = 1; - } - - ctx.devicestatus.list(opts, function (err, results) { - if (!err && results) { - ddata.devicestatus = _.map(results, function eachStatus (result) { - result.mills = new Date(result.created_at).getTime(); - if ('uploaderBattery' in result) { - result.uploader = { - battery: result.uploaderBattery - }; - delete result.uploaderBattery; + var opts = { + find: { + created_at: dateRange + }, + sort: { + created_at: -1 } - return result; - }).reverse(); + }; + + if (env.extendedSettings.devicestatus && env.extendedSettings.devicestatus.advanced) { + //not adding count: 1 restriction } else { - ddata.devicestatus = []; + opts.count = 1; } - callback(); - }); + + ctx.devicestatus.list(opts, function(err, results) { + if (!err && results) { + ddata.devicestatus = _.map(results, function eachStatus(result) { + result.mills = new Date(result.created_at).getTime(); + if ('uploaderBattery' in result) { + result.uploader = { + battery: result.uploaderBattery + }; + delete result.uploaderBattery; + } + return result; + }).reverse(); + } else { + ddata.devicestatus = []; + } + callback(); + }); } module.exports = init; + diff --git a/lib/data/ddata.js b/lib/data/ddata.js index 49f874cb2d1..a055b9f3049 100644 --- a/lib/data/ddata.js +++ b/lib/data/ddata.js @@ -3,227 +3,271 @@ var _ = require('lodash'); var times = require('../times'); -var DEVICE_TYPE_FIELDS = ['uploader', 'pump', 'openaps', 'loop']; - -function init( ) { - - var ddata = { - sgvs: [] - , treatments: [] - , mbgs: [] - , cals: [] - , profiles: [] - , devicestatus: [] - , food: [] - , lastUpdated: 0 - }; - - ddata.clone = function clone() { - return _.clone(ddata, function (value) { - //special handling of mongo ObjectID's - //see https://github.com/lodash/lodash/issues/602#issuecomment-47414964 - - //instead of requiring Mongo.ObjectID here and having it get pulled into the bundle - //we'll look for the toHexString function and then assume it's an ObjectID - if (value && value.toHexString && value.toHexString.call && value.toString && value.toString.call) { - return value.toString(); - } - }); - }; - - ddata.splitRecent = function splitRecent (time, cutoff, max, treatmentsToo) { - var result = { - first: { } - , rest: { } +var DEVICE_TYPE_FIELDS = ['uploader', 'pump', 'openaps', 'loop', 'xdripjs']; + +function init() { + + var ddata = { + sgvs: [], + treatments: [], + mbgs: [], + cals: [], + profiles: [], + devicestatus: [], + food: [], + activity: [], + lastUpdated: 0 }; - - function recent (item) { - return item.mills >= time - cutoff; - } - - function filterMax(item) { - return item.mills >= time - max; - } - - function partition (field, filter) { - var data; - if (filter) { - data = ddata[field].filter(filterMax); - } else { - data = ddata[field]; - } - - var parts = _.partition(data, recent); - result.first[field] = parts[0]; - result.rest[field] = parts[1]; - } - - partition('treatments', treatmentsToo ? filterMax : false); - - result.first.devicestatus = ddata.recentDeviceStatus(time); - - result.first.sgvs = ddata.sgvs.filter(filterMax); - result.first.cals = ddata.cals; - - var profiles = _.cloneDeep(ddata.profiles); - if (profiles && profiles[0]) - for (var k in profiles[0].store) { - if (profiles[0].store.hasOwnProperty(k)) { - if (k.indexOf('@@@@@') > 0) { - delete profiles[0].store[k]; - } + + ddata.clone = function clone() { + return _.clone(ddata, function(value) { + //special handling of mongo ObjectID's + //see https://github.com/lodash/lodash/issues/602#issuecomment-47414964 + + //instead of requiring Mongo.ObjectID here and having it get pulled into the bundle + //we'll look for the toHexString function and then assume it's an ObjectID + if (value && value.toHexString && value.toHexString.call && value.toString && value.toString.call) { + return value.toString(); + } + }); + }; + + ddata.splitRecent = function splitRecent(time, cutoff, max, treatmentsToo) { + var result = { + first: {}, + rest: {} + }; + + function recent(item) { + return item.mills >= time - cutoff; } - } - result.first.profiles = profiles; - - result.rest.mbgs = ddata.mbgs.filter(filterMax); - result.rest.food = ddata.food; - - console.log('results.first size', JSON.stringify(result.first).length,'bytes'); - console.log('results.rest size', JSON.stringify(result.rest).length,'bytes'); - - return result; - }; - - ddata.recentDeviceStatus = function recentDeviceStatus (time) { - - var deviceAndTypes = - _.chain(ddata.devicestatus) - .map(function eachStatus (status) { - return _.chain(status) - .keys() - .filter(function isExcluded (key) { - return _.includes(DEVICE_TYPE_FIELDS, key); - }) - .map(function toDeviceTypeKey (key) { - return { - device: status.device - , type: key - }; - }) - .value(); - }) - .flatten() - .uniqWith(_.isEqual) - .value(); - - //console.info('>>>deviceAndTypes', deviceAndTypes); - - return _.chain(deviceAndTypes) - .map(function findMostRecent (deviceAndType) { - return _.chain(ddata.devicestatus) - .filter(function isSameDeviceType (status) { - return status.device === deviceAndType.device && _.has(status, deviceAndType.type) - }) - .filter(function notInTheFuture (status) { - return status.mills <= time; + + function filterMax(item) { + return item.mills >= time - max; + } + + function partition(field, filter) { + var data; + if (filter) { + data = ddata[field].filter(filterMax); + } else { + data = ddata[field]; + } + + var parts = _.partition(data, recent); + result.first[field] = parts[0]; + result.rest[field] = parts[1]; + } + + partition('treatments', treatmentsToo ? filterMax : false); + + result.first.devicestatus = ddata.recentDeviceStatus(time); + + result.first.sgvs = ddata.sgvs.filter(filterMax); + result.first.cals = ddata.cals; + + var profiles = _.cloneDeep(ddata.profiles); + if (profiles && profiles[0]) + for (var k in profiles[0].store) { + if (profiles[0].store.hasOwnProperty(k)) { + if (k.indexOf('@@@@@') > 0) { + delete profiles[0].store[k]; + } + } + } + result.first.profiles = profiles; + + result.rest.mbgs = ddata.mbgs.filter(filterMax); + result.rest.food = ddata.food; + result.rest.activity = ddata.activity; + + console.log('results.first size', JSON.stringify(result.first).length, 'bytes'); + console.log('results.rest size', JSON.stringify(result.rest).length, 'bytes'); + + return result; + }; + + ddata.recentDeviceStatus = function recentDeviceStatus(time) { + + var deviceAndTypes = + _.chain(ddata.devicestatus) + .map(function eachStatus(status) { + return _.chain(status) + .keys() + .filter(function isExcluded(key) { + return _.includes(DEVICE_TYPE_FIELDS, key); + }) + .map(function toDeviceTypeKey(key) { + return { + device: status.device, + type: key + }; + }) + .value(); }) - .maxBy('mills') + .flatten() + .uniqWith(_.isEqual) .value(); - }) - .filter(_.isObject) - .uniq('_id') - .sortBy('mills') - .value(); - - }; - - ddata.processDurations = function processDurations (treatments, keepzeroduration) { - - treatments = _.uniqBy(treatments, 'mills'); - - // cut temp basals by end events - // better to do it only on data update - var endevents = treatments.filter(function filterEnd(t) { - return !t.duration; - }); - - function cutIfInInterval (base, end) { - if (base.mills < end.mills && base.mills + times.mins(base.duration).msecs > end.mills) { - base.duration = times.msecs(end.mills-base.mills).mins; - if (end.profile) { - base.cuttedby = end.profile; - end.cutting = base.profile; + + //console.info('>>>deviceAndTypes', deviceAndTypes); + + var rv = _.chain(deviceAndTypes) + .map(function findMostRecent(deviceAndType) { + return _.chain(ddata.devicestatus) + .filter(function isSameDeviceType(status) { + return status.device === deviceAndType.device && _.has(status, deviceAndType.type) + }) + .filter(function notInTheFuture(status) { + return status.mills <= time; + }) + .sortBy('mills') + .takeRight(10) + .value(); + }).value(); + + var merged = [].concat.apply([], rv); + + rv = _.chain(merged) + .filter(_.isObject) + .uniq('_id') + .sortBy('mills') + .value(); + + return rv; + + }; + + ddata.processDurations = function processDurations(treatments, keepzeroduration) { + + treatments = _.uniqBy(treatments, 'mills'); + + // cut temp basals by end events + // better to do it only on data update + var endevents = treatments.filter(function filterEnd(t) { + return !t.duration; + }); + + function cutIfInInterval(base, end) { + if (base.mills < end.mills && base.mills + times.mins(base.duration).msecs > end.mills) { + base.duration = times.msecs(end.mills - base.mills).mins; + if (end.profile) { + base.cuttedby = end.profile; + end.cutting = base.profile; + } + } } - } - } - - // cut by end events - treatments.forEach(function allTreatments (t) { - if (t.duration) { - endevents.forEach(function allEndevents (e) { - cutIfInInterval(t, e); + + // cut by end events + treatments.forEach(function allTreatments(t) { + if (t.duration) { + endevents.forEach(function allEndevents(e) { + cutIfInInterval(t, e); + }); + } + }); + + // cut by overlaping events + treatments.forEach(function allTreatments(t) { + if (t.duration) { + treatments.forEach(function allEndevents(e) { + cutIfInInterval(t, e); + }); + } + }); + + if (keepzeroduration) { + return treatments; + } else { + return treatments.filter(function filterEnd(t) { + return t.duration; + }); + } + }; + + ddata.processTreatments = function processTreatments(preserveOrignalTreatments) { + + // filter & prepare 'Site Change' events + ddata.sitechangeTreatments = ddata.treatments.filter(function filterSensor(t) { + return t.eventType.indexOf('Site Change') > -1; + }).sort(function(a, b) { + return a.mills > b.mills; }); - } - }); - - // cut by overlaping events - treatments.forEach(function allTreatments (t) { - if (t.duration) { - treatments.forEach(function allEndevents (e) { - cutIfInInterval(t, e); + + // filter & prepare 'Insulin Change' events + ddata.insulinchangeTreatments = ddata.treatments.filter(function filterInsulin(t) { + return t.eventType.indexOf('Insulin Change') > -1; + }).sort(function(a, b) { + return a.mills > b.mills; + }); + + // filter & prepare 'Pump Battery Change' events + ddata.batteryTreatments = ddata.treatments.filter(function filterSensor(t) { + return t.eventType.indexOf('Pump Battery Change') > -1; + }).sort(function(a, b) { + return a.mills > b.mills; + }); + + // filter & prepare 'Sensor' events + ddata.sensorTreatments = ddata.treatments.filter(function filterSensor(t) { + return t.eventType.indexOf('Sensor') > -1; + }).sort(function(a, b) { + return a.mills > b.mills; + }); + + // filter & prepare 'Profile Switch' events + var profileTreatments = ddata.treatments.filter(function filterProfiles(t) { + return t.eventType === 'Profile Switch'; + }).sort(function(a, b) { + return a.mills > b.mills; }); - } - }); - - if (keepzeroduration) { - return treatments; - } else { - return treatments.filter(function filterEnd(t) { - return t.duration; + if (preserveOrignalTreatments) + profileTreatments = _.cloneDeep(profileTreatments); + ddata.profileTreatments = ddata.processDurations(profileTreatments, true); + + // filter & prepare 'Combo Bolus' events + ddata.combobolusTreatments = ddata.treatments.filter(function filterComboBoluses(t) { + return t.eventType === 'Combo Bolus'; + }).sort(function(a, b) { + return a.mills > b.mills; }); - } - }; - - ddata.processTreatments = function processTreatments (preserveOrignalTreatments ) { - - // filter & prepare 'Site Change' events - ddata.sitechangeTreatments = ddata.treatments.filter( function filterSensor (t) { - return t.eventType.indexOf('Site Change') > -1; - }).sort(function (a,b) { return a.mills > b.mills; }); - - // filter & prepare 'Insulin Change' events - ddata.insulinchangeTreatments = ddata.treatments.filter( function filterInsulin (t) { - return t.eventType.indexOf('Insulin Change') > -1; - }).sort(function (a,b) { return a.mills > b.mills; }); - - // filter & prepare 'Sensor' events - ddata.sensorTreatments = ddata.treatments.filter( function filterSensor (t) { - return t.eventType.indexOf('Sensor') > -1; - }).sort(function (a,b) { return a.mills > b.mills; }); - - // filter & prepare 'Profile Switch' events - var profileTreatments = ddata.treatments.filter( function filterProfiles (t) { - return t.eventType === 'Profile Switch'; - }).sort(function (a,b) { return a.mills > b.mills; }); - if (preserveOrignalTreatments) - profileTreatments = _.cloneDeep(profileTreatments); - ddata.profileTreatments = ddata.processDurations(profileTreatments, true); - - // filter & prepare 'Combo Bolus' events - ddata.combobolusTreatments = ddata.treatments.filter( function filterComboBoluses (t) { - return t.eventType === 'Combo Bolus'; - }).sort(function (a,b) { return a.mills > b.mills; }); - - // filter & prepare temp basals - var tempbasalTreatments = ddata.treatments.filter( function filterBasals (t) { - return t.eventType && t.eventType.indexOf('Temp Basal') > -1; - }); - if (preserveOrignalTreatments) - tempbasalTreatments = _.cloneDeep(tempbasalTreatments); - ddata.tempbasalTreatments = ddata.processDurations(tempbasalTreatments, false); - - // filter temp target - var tempTargetTreatments = ddata.treatments.filter( function filterTargets (t) { - return t.eventType && t.eventType.indexOf('Temporary Target') > -1; - }); - if (preserveOrignalTreatments) - tempTargetTreatments = _.cloneDeep(tempTargetTreatments); - ddata.tempTargetTreatments = ddata.processDurations(tempTargetTreatments, false); - - }; - - return ddata; + + // filter & prepare temp basals + var tempbasalTreatments = ddata.treatments.filter(function filterBasals(t) { + return t.eventType && t.eventType.indexOf('Temp Basal') > -1; + }); + if (preserveOrignalTreatments) + tempbasalTreatments = _.cloneDeep(tempbasalTreatments); + ddata.tempbasalTreatments = ddata.processDurations(tempbasalTreatments, false); + + // filter temp target + var tempTargetTreatments = ddata.treatments.filter(function filterTargets(t) { + //check for a units being sent + if (t.units) { + if (t.units == 'mmol') { + //convert to mgdl + t.targetTop = t.targetTop * 18; + t.targetBottom = t.targetBottom * 18; + 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 * 18; + t.units = 'mg/dl'; + } + if (t.targetBottom < 20) { + t.targetBottom = t.targetBottom * 18; + t.units = 'mg/dl'; + } + return t.eventType && t.eventType.indexOf('Temporary Target') > -1; + }); + if (preserveOrignalTreatments) + tempTargetTreatments = _.cloneDeep(tempTargetTreatments); + ddata.tempTargetTreatments = ddata.processDurations(tempTargetTreatments, false); + + }; + + return ddata; } diff --git a/lib/language.js b/lib/language.js index b69b1c26d9b..e5e879c0929 100644 --- a/lib/language.js +++ b/lib/language.js @@ -3,36 +3,38 @@ var _ = require('lodash'); function init() { - var lang; function language() { return language; } + language.speechCode = 'en-US'; + language.lang = 'en'; + language.languages = [ - { code: 'bg', language: 'Български' } - , { code: 'cs', language: 'Čeština' } - , { code: 'de', language: 'Deutsch' } - , { code: 'dk', language: 'Dansk' } - , { code: 'el', language: 'Ελληνικά' } - , { code: 'en', language: 'English' } - , { code: 'es', language: 'Español' } - , { code: 'fi', language: 'Suomi' } - , { code: 'fr', language: 'Français' } - , { code: 'he', language: 'עברית' } - , { code: 'hr', language: 'Hrvatski' } - , { code: 'it', language: 'Italiano' } - , { code: 'ko', language: '한국어' } - , { code: 'nb', language: 'Norsk (Bokmål)' } - , { code: 'nl', language: 'Nederlands' } - , { code: 'pl', language: 'Polski' } - , { code: 'pt', language: 'Português (Brasil)' } - , { code: 'ro', language: 'Română' } - , { code: 'ru', language: 'Русский' } - , { code: 'sk', language: 'Slovenčina' } - , { code: 'sv', language: 'Svenska' } -   , { code: 'zh_cn', language: '中文(简体)' } -   , { code: 'zh_tw', language: '中文(繁體)' } + { code: 'bg', language: 'Български', speechCode: 'bg-BG' } + , { code: 'cs', language: 'Čeština', speechCode: 'cs-CZ' } + , { code: 'de', language: 'Deutsch', speechCode: 'de-DE' } + , { code: 'dk', language: 'Dansk', speechCode: 'dk-DK' } + , { code: 'el', language: 'Ελληνικά', speechCode: 'el-GR'} + , { code: 'en', language: 'English', speechCode: 'en-US' } + , { code: 'es', language: 'Español', speechCode: 'es-ES' } + , { code: 'fi', language: 'Suomi', speechCode: 'fi-FI' } + , { code: 'fr', language: 'Français', speechCode: 'fr-FR' } + , { code: 'he', language: 'עברית', speechCode: 'he-IL' } + , { code: 'hr', language: 'Hrvatski', speechCode: 'hr-HR' } + , { code: 'it', language: 'Italiano', speechCode: 'it-IT' } + , { code: 'ko', language: '한국어', speechCode: 'ko-KR' } + , { code: 'nb', language: 'Norsk (Bokmål)', speechCode: 'no-NO' } + , { code: 'nl', language: 'Nederlands', speechCode: 'nl-NL' } + , { code: 'pl', language: 'Polski', speechCode: 'pl-PL' } + , { code: 'pt', language: 'Português (Brasil)', speechCode: 'pt-BR' } + , { code: 'ro', language: 'Română', speechCode: 'ro-RO' } + , { code: 'ru', language: 'Русский', speechCode: 'ru-RU' } + , { code: 'sk', language: 'Slovenčina', speechCode: 'sk-SK' } + , { code: 'sv', language: 'Svenska', speechCode: 'sv-SE' } + , { code: 'zh_cn', language: '中文(简体)', speechCode: 'cmn-Hans-CN' } + , { code: 'zh_tw', language: '中文(繁體)', speechCode: 'cmn-Hant-TW' } ]; var translations = { @@ -40,6 +42,7 @@ function init() { 'Listening on port' : { cs: 'Poslouchám na portu' ,es: 'Escuchando en el puerto' + ,dk: 'Lytter på port' ,fr: 'Ecoute sur port' ,pt: 'Escutando porta' ,sv: 'Lyssnar på port' @@ -48,7 +51,6 @@ function init() { ,bg: 'Активиране на порта' ,hr: 'Slušanje na portu' ,it: 'Porta in ascolto' - ,dk: 'Lytter på port' ,fi: 'Kuuntelen porttia' ,nb: 'Lytter på port' ,he: 'מקשיב על פתחה' @@ -464,7 +466,7 @@ function init() { ,hr: 'Danas' ,sv: 'Idag' ,it: 'Oggi' - ,dk: 'Idag' + ,dk: 'I dag' ,fi: 'Tänään' ,nb: 'Idag' ,he: 'היום' @@ -513,7 +515,7 @@ function init() { ,dk: 'Sidste 3 dage' ,fi: 'Edelliset 3 päivää' ,nb: 'Siste 3 dager' - ,he: '3 ימים אחרונים' + ,he: 'שלושה ימים אחרונים' ,pl: 'Ostatnie 3 dni' ,ru: 'Последние 3 дня' ,sk: 'Posledné 3 dni' @@ -605,7 +607,7 @@ function init() { ,dk: 'Sidste 3 måneder' ,fi: 'Viimeiset 3 kuukautta' ,nb: 'Siste 3 måneder' - ,he: '3 חודשים אחרונים' + ,he: 'שלושה חודשים אחרונים' ,pl: 'Ostatnie 3 miesiące' ,ru: 'Последние 3 месяца' ,sk: 'Posledné 3 mesiace' @@ -617,7 +619,7 @@ function init() { cs: 'Od' ,de: 'Von' ,es: 'Desde' - ,fr: 'De' + ,fr: 'Du' ,el: 'Από' ,pt: 'De' ,sv: 'Från' @@ -640,7 +642,7 @@ function init() { cs: 'Do' ,de: 'Bis' ,es: 'Hasta' - ,fr: 'À' + ,fr: 'Au' ,el: 'Έως' ,pt: 'a' ,ro: 'La' @@ -754,6 +756,7 @@ function init() { ,'Notes contain' : { cs: 'Poznámky obsahují' ,de: 'Erläuterungen' + ,he: 'ההערות מכילות' ,es: 'Contenido de las notas' ,fr: 'Notes contiennent' ,el: 'Οι σημειώσεις περιέχουν' @@ -766,6 +769,7 @@ function init() { ,dk: 'Noter indeholder' ,fi: 'Merkinnät sisältävät' ,nb: 'Notater inneholder' + ,he: 'הערות מכילות' ,pl: 'Zawierają uwagi' ,ru: 'Примечания содержат' ,sk: 'Poznámky obsahujú' @@ -800,7 +804,7 @@ function init() { cs: 'horní' ,de: 'oben' ,es: 'Superior' - ,fr: 'Supérieur' + ,fr: 'Supérieure' ,el: 'Πάνω όριο' ,pt: 'Superior' ,ro: 'Sus' @@ -1015,7 +1019,7 @@ function init() { ,bg: 'Зареждане на въведените лечения от' ,hr: 'Učitavanje podataka o tretmanu' ,it: 'Carico dati dei trattamenti' - ,dk: 'Indlæser data for' + ,dk: 'Indlæser behandlingsdata for' ,fi: 'Lataan toimenpidetietoja: ' ,nb: 'Leser behandlingsdata for' ,he: 'טוען נתוני טיפולים של' @@ -1131,7 +1135,7 @@ function init() { ,bg: 'няма' ,hr: 'Prazno' ,it: 'Nessuno' - ,dk: 'ingen' + ,dk: 'Ingen' ,fi: 'tyhjä' ,nb: 'ingen' ,he: 'ללא' @@ -1204,7 +1208,7 @@ function init() { ,dk: 'Dag til dag' ,fi: 'Päivittäinen' ,nb: 'Dag til dag' - ,he: 'יום-יום' + ,he: 'יום ביומו' ,pl: 'Dzień po dniu' ,ru: 'Ежедневно' ,sk: 'Deň po dni' @@ -1273,7 +1277,7 @@ function init() { ,dk: 'Distribution' ,fi: 'Jakauma' ,nb: 'Distribusjon' - ,he: 'פיזור' + ,he: 'התפלגות' ,pl: 'Dystrybucja' ,ru: 'Распределение' ,sk: 'Distribúcia' @@ -1304,8 +1308,26 @@ function init() { ,ko: '시간 통계' ,zh_cn: '每小时状态' } + ,'netIOB stats': { // hourlystats.js + nl: 'netIOB stats' + ,sv: 'netIOB statistik' + ,he: 'netIOB סטטיסטיקת' + ,de: 'netIOB Statistiken' + ,fi: 'netIOB tilasto' + ,bg: 'netIOB татистика' + } + ,'temp basals must be rendered to display this report': { //hourlystats.js + nl: 'tijdelijk basaal moet zichtbaar zijn voor dit rapport' + ,sv: 'temp basal måste vara synlig för denna rapport' + ,de: 'temporäre Basalraten müssen für diesen Report sichtbar sein' + ,fi: 'tämä raportti vaatii, että basaalien piirto on päällä' + ,he: 'חובה לאפשר רמה בזלית זמנית כדי לרות דוח זה' + ,bg: 'временните базали трябва да са показани за да се покаже тази това' + ,he: 'חובה לאפשר רמה בזלית זמנית כדי לרות דוח זה' + } ,'Weekly success' : { cs: 'Statistika po týdnech' + ,he: 'הצלחה שבועית' ,de: 'Wöchentlicher Erfolg' ,es: 'Resultados semanales' ,fr: 'Résultat hebdomadaire' @@ -1318,6 +1340,7 @@ function init() { ,it: 'Statistiche settimanali' ,dk: 'Uge resultat' ,fi: 'Viikkotilasto' + ,he: 'הצלחה שבועית' ,nb: 'Ukeresultat' ,pl: 'Wyniki tygodniowe' ,ru: 'Результаты недели' @@ -1407,7 +1430,7 @@ function init() { ,bg: 'Период' ,hr: 'Period' ,it: 'Periodo' - ,dk: 'Period' + ,dk: 'Periode' ,fi: 'Aikaväli' ,nb: 'Periode' ,he: 'תקופה' @@ -1479,7 +1502,7 @@ function init() { ,dk: 'Nedre kvartil' ,fi: 'Alin neljäsosa' ,nb: 'Nedre kvartil' - ,he: 'רבעון נמוך' + ,he: 'רבעון תחתון' ,pl: 'Dolny kwartyl' ,ru: 'Нижняя четверть' ,sk: 'Nizky kvartil' @@ -1502,7 +1525,7 @@ function init() { ,dk: 'Øvre kvartil' ,fi: 'Ylin neljäsosa' ,nb: 'Øvre kvartil' - ,he: 'רבעון גבוה' + ,he: 'רבעון עליון' ,pl: 'Górny kwartyl' ,ru: 'Верхняя четверть' ,sk: 'Vysoký kvartil' @@ -1560,6 +1583,7 @@ function init() { cs: 'Normální' ,de: 'Normal' ,es: 'Normal' + ,he: 'נורמלי ' ,fr: 'Normale' ,el: 'Εντός Στόχου' ,pt: 'Normal' @@ -1571,6 +1595,7 @@ function init() { ,dk: 'Normal' ,fi: 'Normaali' ,nb: 'Normal' + ,he: 'נורמלי' ,pl: 'Normalny' ,ru: 'Норма' ,sk: 'Normálny' @@ -1641,6 +1666,7 @@ function init() { ,nb: 'Standardavvik' ,he: 'סטיית תקן' ,pl: 'Stand. odchylenie' + ,nl: 'Std. deviatie' ,ru: 'Стандартное отклонение' ,sk: 'Štand. odch.' ,ko: '표준 편차' @@ -1671,6 +1697,7 @@ function init() { } ,'Glucose Percentile report' : { cs: 'Tabulka percentil glykémií' + ,he: 'דוח אחוזוני גלוקוזה' ,de: 'Glukose-Perzentil Bericht' ,es: 'Informe de percetiles de glucemia' ,fr: 'Rapport percentiles Glycémie' @@ -1684,6 +1711,7 @@ function init() { ,dk: 'Glukoserapport i procent' ,fi: 'Verensokeriarvojen jakauma' ,nb: 'Glukoserapport i prosent' + ,he: 'דוח אחוזון סוכר' ,pl: 'Tabela centylowa glikemii' ,ru: 'Процентиль' ,sk: 'Report percentilu glykémií' @@ -1706,7 +1734,7 @@ function init() { ,dk: 'Glukosefordeling' ,fi: 'Glukoosijakauma' ,nb: 'Glukosefordeling' - ,he: 'פיזור סוכר' + ,he: 'התפלגות סוכר' ,pl: 'Rozkład glikemii' ,ru: 'Распределение СК' ,sk: 'Rozloženie glykémie' @@ -1813,7 +1841,7 @@ function init() { ,fr: '% de valeurs' ,el: '% των μετρήσεων' ,pt: '% de valores' - ,sv: '& av avläsningar' + ,sv: '% av avläsningar' ,ro: '% de valori' ,bg: '% от измервания' ,hr: '% očitanja' @@ -1831,7 +1859,7 @@ function init() { } ,'# of Readings' : { cs: 'počet záznamů' - ,de: '# des Messwerts' + ,de: 'Anzahl der Messwerte' ,es: 'N° de valores' ,fr: 'nbr de valeurs' ,el: 'Πλήθος μετρήσεων' @@ -1887,7 +1915,7 @@ function init() { ,hr: 'Standardna devijacija' ,sv: 'Standardavvikelse' ,it: 'Deviazione Standard' - ,dk: 'Standardafgivelse' + ,dk: 'Standardafvigelse' ,fi: 'Keskijakauma' ,nb: 'Standardavvik' ,he: 'סטיית תקן' @@ -1969,6 +1997,7 @@ function init() { } ,'Weekly Success' : { cs: 'Týdenní úspěšnost' + ,he: 'הצלחה שבועית ' ,de: 'Wöchtlicher Erfolg' ,es: 'Resultados semanales' ,fr: 'Réussite hebdomadaire' @@ -1982,6 +2011,7 @@ function init() { ,dk: 'Uge resultat' ,fi: 'Viikottainen tulos' ,nb: 'Ukeresultat' + ,he: 'הצלחה שבועית' ,pl: 'Wyniki tygodniowe' ,ru: 'Результаты недели' ,sk: 'Týždenná úspešnosť' @@ -2015,8 +2045,9 @@ function init() { // food editor ,'Using stored API secret hash' : { cs: 'Používám uložený hash API hesla' + ,he: 'משתמש בסיסמת ממשק תכנות יישומים הסודית ' ,de: 'Gespeicherte API-Prüfsumme verwenden' - ,es: 'Usando el hash del API pre-almacenado' + ,es: 'Usando hash del API secreto pre-almacenado' ,fr: 'Utilisation du hash API existant' ,el: 'Χρηση αποθηκευμένου συνθηματικού' ,pt: 'Usando o hash de API existente' @@ -2028,6 +2059,7 @@ function init() { ,dk: 'Anvender gemt API-nøgle' ,fi: 'Tallennettu salainen API-tarkiste käytössä' ,nb: 'Bruker lagret API nøkkel' + ,he: 'עורך אוכל' ,pl: 'Korzystając z zapisanego poufnego hasha API' ,ru: 'Применение сохраненного пароля API' ,sk: 'Používam uložený API hash heslo' @@ -2038,9 +2070,10 @@ function init() { } ,'No API secret hash stored yet. You need to enter API secret.' : { cs: 'Není uložený žádný hash API hesla. Musíte zadat API heslo.' + ,he: 'הכנס את סיסמת ממשק תכנות יישומים הסודית' ,de: 'Keine API-Prüfsumme gespeichert. Bitte API-Prüfsumme eingeben.' ,es: 'No se ha almacenado ningún hash todavía. Debe introducir su secreto API.' - ,fr: 'Pas de secret API existant. Vous devez l\'en entrer.' + ,fr: 'Pas de secret API existant. Vous devez en entrer un.' ,el: 'Δεν υπάρχει αποθηκευμένο συνθηματικό API. Πρέπει να εισάγετε το συνθηματικό API' ,pt: 'Hash de segredo de API inexistente. Insira um segredo de API.' ,ro: 'Încă nu există cheie API secretă. Aceasta trebuie introdusă.' @@ -2048,9 +2081,10 @@ function init() { ,hr: 'Nema pohranjenog API tajnog hasha. Unesite tajni API' ,sv: 'Hemlig api-nyckel saknas. Du måste ange API hemlighet' ,it: 'API hash segreto non è ancora memorizzato. È necessario inserire API segreto.' - ,dk: 'Mangler API-nøgle. Du skal indtaste API hemmelighed' + ,dk: 'Mangler API-nøgle. Du skal indtaste API nøglen' ,fi: 'Salainen API-tarkiste puuttuu. Syötä API tarkiste.' ,nb: 'Mangler API nøkkel. Du må skrive inn API hemmelighet.' + ,he:'הכנס את הסיסמא הסודית של ה API' ,pl: 'Nie ma żadnego poufnego hasha API zapisanego. Należy wprowadzić poufny hash API.' ,ru: 'Пароля API нет в памяти. Введите пароль API' ,sk: 'Nieje uložené žiadne API hash heslo. Musíte zadať API heslo.' @@ -2061,6 +2095,7 @@ function init() { } ,'Database loaded' : { cs: 'Databáze načtena' + ,he: 'אגר מידע נטען ' ,de: 'Datenbank geladen' ,es: 'Base de datos cargada' ,fr: 'Base de données chargée' @@ -2074,6 +2109,7 @@ function init() { ,dk: 'Database indlæst' ,fi: 'Tietokanta ladattu' ,nb: 'Database lest' + ,he: 'בסיס נתונים נטען' ,pl: 'Baza danych załadowana' ,ru: 'База данных загружена' ,sk: 'Databáza načítaná' @@ -2198,6 +2234,7 @@ function init() { } ,'GI' : { cs: 'GI' + ,he: 'GI' ,de: 'GI' ,es: 'IG' ,fr: 'IG' @@ -2214,6 +2251,7 @@ function init() { ,pl: 'IG' ,ru: 'ГИ' ,sk: 'GI' + ,he: 'GI' ,nl: 'Glycemische index ' ,ko: '혈당 지수' ,zh_cn: 'GI(血糖生成指数)' @@ -2230,7 +2268,7 @@ function init() { ,hr: 'Uredi zapis' ,sv: 'Editera post' ,it: 'Modifica registro' - ,dk: 'Editere post' + ,dk: 'Rediger post' ,fi: 'Muokkaa tallennetta' ,nb: 'Editere registrering' ,he: 'ערוך רשומה' @@ -2335,14 +2373,16 @@ function init() { } ,'Your API secret must be at least 12 characters long' : { cs: 'Vaše API heslo musí mít alespoň 12 znaků' + ,he: 'הסיסמא חייבת להיות באורך 12 תווים לפחות' ,de: 'Deine API-Prüfsumme muss mindestens 12 Zeichen lang sein' - ,es: 'Su secreo API debe contener al menos 12 caracteres' + ,es: 'Su API secreo debe contener al menos 12 carácteres' ,fr: 'Votre secret API doit contenir au moins 12 caractères' ,el: 'Το συνθηματικό πρέπει να είναι τουλάχιστον 12 χαρακτήρων' ,pt: 'Seu segredo de API deve conter no mínimo 12 caracteres' ,ro: 'Cheia API trebuie să aibă mai mult de 12 caractere' ,bg: 'Вашата АPI парола трябва да е дълга поне 12 символа' ,hr: 'Vaš tajni API mora sadržavati barem 12 znakova' + ,he:' הסיסמא הסודית חייבת להיות באורך של 12 תווים לפחות' ,sv: 'Hemlig API-nyckel måsta innehålla 12 tecken' ,it: 'il vostro API secreto deve essere lungo almeno 12 caratteri' ,dk: 'Din API nøgle skal være mindst 12 tegn lang' @@ -2359,7 +2399,8 @@ function init() { ,'Bad API secret' : { cs: 'Chybné API heslo' ,de: 'Fehlerhafte API-Prüfsumme' - ,es: 'Secreto API incorrecto' + ,he: 'סיסמא שגויה' + ,es: 'API secreto incorrecto' ,fr: 'Secret API erroné' ,el: 'Λάθος συνθηματικό' ,pt: 'Segredo de API incorreto' @@ -2373,6 +2414,7 @@ function init() { ,nb: 'Ugyldig API nøkkel' ,pl: 'Błędny klucz API' ,ru: 'Плохой пароль API' + ,he: ' הסיסמא הסודית אינה חוקית' ,sk: 'Nesprávne API heslo' ,nl: 'Onjuist API wachtwoord' ,ko: '잘못된 API secret' @@ -2381,8 +2423,9 @@ function init() { } ,'API secret hash stored' : { cs: 'Hash API hesla uložen' + ,he: 'סיסמא אוכסנה' ,de: 'API-Prüfsumme gespeichert' - ,es: 'Hash de secreto API guardado' + ,es: 'Hash del API secreto guardado' ,fr: 'Hash API secret sauvegardé' ,el: 'Το συνθηματικό αποθηκεύτηκε' ,pt: 'Segredo de API guardado' @@ -2395,6 +2438,7 @@ function init() { ,fi: 'API salaisuus talletettu' ,nb: 'API nøkkel lagret' ,pl: 'Poufne klucz API zapisane' + ,he: ' הסיסמא הסודית נשמרה' ,ru: 'Пароль API сохранен' ,sk: 'Hash API hesla uložený' ,nl: 'API wachtwoord opgeslagen' @@ -2427,6 +2471,7 @@ function init() { } ,'Not loaded' : { cs: 'Nenačtený' + ,he: 'לא נטען' ,de: 'Nicht geladen' ,es: 'No cargado' ,fr: 'Non chargé' @@ -2440,6 +2485,7 @@ function init() { ,dk: 'Ikke indlæst' ,fi: 'Ei ladattu' ,nb: 'Ikke lest' + ,he: 'לא נטען' ,pl: 'Nie załadowany' ,ru: 'Не загружено' ,sk: 'Nenačítaný' @@ -2449,7 +2495,8 @@ function init() { } ,'Food Editor' : { cs: 'Editor jídel' - ,de: 'Nahrungsmittel Editor' + ,he: 'עורך המזון' + ,de: 'Nahrungsmittel-Editor' ,es: 'Editor de alimentos' ,fr: 'Editeur aliments' ,el: 'Επεξεργασία Δεδομένων Φαγητών' @@ -2459,6 +2506,7 @@ function init() { ,hr: 'Editor hrane' ,sv: 'Födoämneseditor' ,it: 'NS - Database Alimenti' + ,he: 'עורך מזון' ,dk: 'Mad editor' ,fi: 'Muokkaa ruokia' ,nb: 'Mat editor' @@ -2633,8 +2681,9 @@ function init() { } ,'Your API secret' : { cs: 'Vaše API heslo' + ,he: 'הסיסמא הסודית שלך' ,de: 'Deine API-Prüfsumme' - ,es: 'Su secreto API' + ,es: 'Su API secreto' ,fr: 'Votre secret API' ,el: 'Το συνθηματικό σας' ,pt: 'Seu segredo de API' @@ -2642,6 +2691,7 @@ function init() { ,ro: 'Cheia API' ,bg: 'Твоята API парола' ,hr: 'Vaš tajni API' + ,he: 'הסיסמא הסודית שלך' ,it: 'Il tuo API secreto' ,dk: 'Din API-nøgle' ,fi: 'Sinun API-avaimesi' @@ -2656,9 +2706,10 @@ function init() { } ,'Store hash on this computer (Use only on private computers)' : { cs: 'Ulož hash na tomto počítači (používejte pouze na soukromých počítačích)' - ,de: 'Speichere Prüfsumme auf diesem Computer (nur auf privaten Computern anwenden)' + ,he: 'אחסן את הסיסמא הסודית שלך על מחשב זה.מומלץ לעשות כן רק אם המחשב בשימושך הפרטי' + ,de: 'Speichere Prüfsumme auf diesem Computer (nur auf privaten Computern verwenden)' ,es: 'Guardar hash en este ordenador (Usar solo en ordenadores privados)' - ,fr: 'Sauver le hash sur cet ordinateur (privé uniquement)' + ,fr: 'Sauvegarder le hash sur cet ordinateur (privé uniquement)' ,el: 'Αποθήκευση συνθηματικού σε αυτό τον υπολογιστή (μόνο για υπολογιστές προσωπικής χρήσης)' ,pt: 'Salvar hash nesse computador (Somente em computadores privados)' ,ro: 'Salvează cheia pe acest PC (Folosiți doar PC de încredere)' @@ -2669,6 +2720,7 @@ function init() { ,dk: 'Gemme hash på denne computer (brug kun på privat computer)' ,fi: 'Tallenna avain tälle tietokoneelle (käytä vain omalla tietokoneellasi)' ,nb: 'Lagre hash på denne pc (bruk kun på privat pc)' + ,he:'שמור סיסמא הסודית על המחשב ( יש להשתמש רק על מחשב פרטי)' ,pl: 'Zapisz na tym komputerze (korzystaj tylko na komputerach prywatnych)' ,ru: 'Сохранить на этом ПК (только для личных компьютеров)' ,sk: 'Uložiť hash na tomto počítači (Používajte iba na súkromných počítačoch)' @@ -2864,7 +2916,7 @@ function init() { } ,'Event Time' : { cs: 'Čas události' - ,de: 'Ereignis Zeit' + ,de: 'Ereignis-Zeit' ,es: 'Hora del evento' ,fr: 'Heure de l\'événement' ,el: 'Ώρα ενέργειας' @@ -2910,6 +2962,7 @@ function init() { } ,'BG' : { cs: 'Glykémie' + ,he: 'סוכר בדם' ,de: 'BG' ,es: 'Glucemia en sangre' ,fr: 'Glycémie' @@ -2932,6 +2985,7 @@ function init() { } ,'Use BG correction in calculation' : { cs: 'Použij korekci na glykémii' + ,he: 'השתמש ברמת סוכר בדם לצורך החישוב' ,de: 'Verwende BG-Korrektur zur Kalkulation' ,es: 'Usar la corrección de glucemia en los cálculos' ,fr: 'Utiliser la correction de glycémie dans les calculs' @@ -2942,7 +2996,7 @@ function init() { ,hr: 'Koristi korekciju GUK-a u izračunu' ,sv: 'Använd BS-korrektion för beräkning' ,it: 'Utilizzare la correzione nei calcoli delle Glicemie' - ,dk: 'Anvend BS-korrektion før beregning' + ,dk: 'Anvend BS-korrektion i beregning' ,fi: 'Käytä korjausannosta laskentaan' ,nb: 'Bruk blodsukkerkorrigering i beregning' ,pl: 'Użyj BG w obliczeniach korekty' @@ -2954,8 +3008,9 @@ function init() { } ,'BG from CGM (autoupdated)' : { cs: 'Glykémie z CGM (automaticky aktualizovaná)' + ,he: 'רמת סוכר מהחיישן , מעודכן אוטומטית' ,de: 'Blutglukose vom CGM (Auto-Update)' - ,es: 'Glucemia del sensor (Actualizado automáticamente)' + ,es: 'Glucemia del sensor (Auto-actualizado)' ,fr: 'Glycémie CGM (automatique)' ,el: 'Τιμή γλυκόζης από τον αισθητήρα (αυτόματο)' ,pt: 'Glicemia do sensor (Automático)' @@ -2976,9 +3031,10 @@ function init() { } ,'BG from meter' : { cs: 'Glykémie z glukoměru' + ,he: 'רמת סוכר ממד הסוכר' ,de: 'Blutzucker vom Messgerät' ,es: 'Glucemia del glucómetro' - ,fr: 'Glycémie de glucomètre' + ,fr: 'Glycémie du glucomètre' ,el: 'Τιμή γλυκόζης από τον μετρητή' ,pt: 'Glicemia do glicosímetro' ,sv: 'BS från blodsockermätare' @@ -2998,6 +3054,7 @@ function init() { } ,'Manual BG' : { cs: 'Ručně zadaná glykémie' + ,he: 'רמת סוכר ידנית' ,de: 'BG von Hand' ,es: 'Glucemia manual' ,fr: 'Glycémie manuelle' @@ -3020,6 +3077,7 @@ function init() { } ,'Quickpick' : { cs: 'Rychlý výběr' + ,he: 'בחירה מהירה' ,de: 'Schnellauswahl' ,es: 'Selección rápida' ,fr: 'Sélection rapide' @@ -3030,7 +3088,7 @@ function init() { ,hr: 'Brzi izbor' ,sv: 'Snabbval' ,it: 'Scelta rapida' - ,dk: 'Hurtig snack' + ,dk: 'Hurtig valg' ,fi: 'Pikavalinta' ,nb: 'Hurtigvalg' ,pl: 'Szybki wybór' @@ -3088,6 +3146,7 @@ function init() { } ,'Use carbs correction in calculation' : { cs: 'Použij korekci na sacharidy' + ,he: 'השתמש בתיקון פחמימות במהלך החישוב' ,de: 'Verwende Kohlenhydrate-Korrektur zur Kalkulation' ,es: 'Usar la corrección de hidratos de carbono en los cálculos' ,fr: 'Utiliser la correction en glucides dans les calculs' @@ -3110,8 +3169,9 @@ function init() { } ,'Use COB correction in calculation' : { cs: 'Použij korekci na COB' + ,he: 'השתמש בתיקון פחמימות בגוף במהלך החישוב' ,de: 'Verwende verzehrte Kohlenhydrate zur Kalkulation' - ,es: 'Usar la corrección de COB en los cálculos' + ,es: 'Usar carbohidratos activos para los cálculos' ,fr: 'Utiliser les COB dans les calculs' ,el: 'Χρήση των υδατανθράκων που απομένουν για τον υπολογισμό' ,pt: 'Usar correção de COB no cálculo' @@ -3132,8 +3192,9 @@ function init() { } ,'Use IOB in calculation' : { cs: 'Použij IOB ve výpočtu' + ,he: 'השתמש בתיקון אינסולין בגוף במהלך החישוב' ,de: 'Verwende gespritzes Insulin zur Kalkulation' - ,es: 'Usar la IOB en los cálculos' + ,es: 'Usar Insulina activa en los cálculos' ,fr: 'Utiliser l\'IOB dans les calculs' ,el: 'Χρήση της υπολογισθείσας ινσουλίνης που έχει απομείνει για τον υπολογισμό' ,pt: 'Usar IOB no cálculo' @@ -3154,8 +3215,9 @@ function init() { } ,'Other correction' : { cs: 'Jiná korekce' + ,he: 'תיקון אחר' ,de: 'Weitere Korrektur' - ,es: 'Otra correción' + ,es: 'Otra corrección' ,fr: 'Autre correction' ,el: 'Άλλη διόρθωση' ,pt: 'Outra correção' @@ -3176,6 +3238,7 @@ function init() { } ,'Rounding' : { cs: 'Zaokrouhlení' + ,he: 'עיגול' ,de: 'Gerundet' ,es: 'Redondeo' ,fr: 'Arrondi' @@ -3198,6 +3261,7 @@ function init() { } ,'Enter insulin correction in treatment' : { cs: 'Zahrň inzulín do záznamu ošetření' + ,he: 'הזן תיקון אינסולין בטיפול' ,de: 'Insulin Korrektur zur Behandlung eingeben' ,es: 'Introducir correción de insulina en tratamiento' ,fr: 'Entrer correction insuline dans le traitement' @@ -3208,7 +3272,7 @@ function init() { ,hr: 'Unesi korekciju inzulinom u tretman' ,sv: 'Ange insulinkorrektion för händelse' ,it: 'Inserisci correzione insulina nella somministrazione' - ,dk: 'Indtast insulionkorrektion' + ,dk: 'Indtast insulinkorrektion' ,fi: 'Syötä insuliinikorjaus' ,nb: 'Task inn insulinkorrigering' ,pl: 'Wprowadź wartość korekty w leczeniu' @@ -3266,8 +3330,9 @@ function init() { } ,'Carbs needed if Insulin total is negative value' : { cs: 'Chybějící sacharidy v případě, že výsledek je záporný' + ,he: 'פחמימות דרושות אם סך אינסולין הוא שלילי' ,de: 'Benötigte Kohlenhydrate sofern Gesamtinsulin einen negativen Wert aufweist' - ,es: 'Hidratos de carbono necesarios si el total de insulina es un valor negativo' + ,es: 'Carbohidratos necesarios si total insulina es un valor negativo' ,fr: 'Glucides nécessaires si insuline totale est un valeur négative' ,el: 'Απαιτούνται υδατάνθρακες εάν η συνολική ινσουλίνη έχει αρνητική τιμή' ,pt: 'Carboidratos necessários se Insulina total for negativa' @@ -3288,6 +3353,7 @@ function init() { } ,'Basal rate' : { cs: 'Bazál' + ,he: 'קצב בזלי' ,de: 'Basalrate' ,es: 'Tasa basal' ,fr: 'Taux basal' @@ -3310,9 +3376,10 @@ function init() { } ,'60 minutes earlier' : { cs: '60 min předem' + ,he: 'שישים דקות מוקדם יותר' ,de: '60 Min. früher' ,es: '60 min antes' - ,fr: '60 min avant' + ,fr: '60 min plus tôt' ,el: '60 λεπτά πριν' ,pt: '60 min antes' ,sv: '60 min tidigare' @@ -3332,9 +3399,10 @@ function init() { } ,'45 minutes earlier' : { cs: '45 min předem' + ,he: 'ארבעים דקות מוקדם יותר' ,de: '45 Min. früher' ,es: '45 min antes' - ,fr: '45 min avant' + ,fr: '45 min plus tôt' ,el: '45 λεπτά πριν' ,pt: '45 min antes' ,sv: '45 min tidigare' @@ -3354,9 +3422,10 @@ function init() { } ,'30 minutes earlier' : { cs: '30 min předem' + ,he: 'שלושים דקות מוקדם יותר' ,de: '30 Min früher' ,es: '30 min antes' - ,fr: '30 min avant' + ,fr: '30 min plus tôt' ,el: '30 λεπτά πριν' ,pt: '30 min antes' ,sv: '30 min tidigare' @@ -3376,9 +3445,10 @@ function init() { } ,'20 minutes earlier' : { cs: '20 min předem' + ,he: 'עשרים דקות מוקדם יותר' ,de: '20 Min. früher' ,es: '20 min antes' - ,fr: '20 min avant' + ,fr: '20 min plus tôt' ,el: '20 λεπτά πριν' ,pt: '20 min antes' ,sv: '20 min tidigare' @@ -3398,9 +3468,10 @@ function init() { } ,'15 minutes earlier' : { cs: '15 min předem' + ,he: 'חמש עשרה דקות מוקדם יותר' ,de: '15 Min. früher' ,es: '15 min antes' - ,fr: '15 min avant' + ,fr: '15 min plus tôt' ,el: '15 λεπτά πριν' ,pt: '15 min antes' ,sv: '15 min tidigare' @@ -3445,7 +3516,7 @@ function init() { cs: '15 min po' ,de: '15 Min. später' ,es: '15 min más tarde' - ,fr: '15 min après' + ,fr: '15 min plus tard' ,el: '15 λεπτά αργότερα' ,pt: '15 min depois' ,ro: 'după 15 min' @@ -3468,7 +3539,7 @@ function init() { cs: '20 min po' ,de: '20 Min. später' ,es: '20 min más tarde' - ,fr: '20 min après' + ,fr: '20 min plus tard' ,el: '20 λεπτά αργότερα' ,pt: '20 min depois' ,ro: 'după 20 min' @@ -3491,7 +3562,7 @@ function init() { cs: '30 min po' ,de: '30 Min. später' ,es: '30 min más tarde' - ,fr: '30 min après' + ,fr: '30 min plus tard' ,el: '30 λεπτά αργότερα' ,pt: '30 min depois' ,ro: 'după 30 min' @@ -3514,7 +3585,7 @@ function init() { cs: '45 min po' ,de: '45 Min. später' ,es: '45 min más tarde' - ,fr: '45 min après' + ,fr: '45 min plus tard' ,el: '45 λεπτά αργότερα' ,pt: '45 min depois' ,ro: 'după 45 min' @@ -3537,7 +3608,7 @@ function init() { cs: '60 min po' ,de: '60 Min. später' ,es: '60 min más tarde' - ,fr: '60 min après' + ,fr: '60 min plus tard' ,el: '60 λεπτά αργότερα' ,pt: '60 min depois' ,ro: 'după 60 min' @@ -3581,6 +3652,7 @@ function init() { } ,'RETRO MODE' : { cs: 'V MINULOSTI' + ,he: 'מצב רטרו' ,de: 'RETRO MODUS' ,es: 'Modo Retrospectivo' ,fr: 'MODE RETROSPECTIF' @@ -3594,6 +3666,7 @@ function init() { ,dk: 'Retro mode' ,fi: 'VANHENTUNEET TIEDOT' ,nb: 'Retro mode' + ,nl: 'Retro mode' ,pl: 'Tryb RETRO' ,ru: 'режим РЕТРО' ,sk: 'V MINULOSTI' @@ -3650,7 +3723,7 @@ function init() { cs: 'Odeslat formulář' ,de: 'Formular absenden' ,es: 'Enviar formulario' - ,fr: 'Formulaire de soumission' + ,fr: 'Suomettre le formulaire' ,el: 'Υποβολή Φόρμας' ,pt: 'Enviar formulário' ,sv: 'Överför händelse' @@ -3695,6 +3768,7 @@ function init() { } ,'Reports' : { cs: 'Výkazy' + ,he: 'דוחות' ,de: 'Berichte' ,es: 'Herramienta de informes' ,fr: 'Outil de rapport' @@ -3718,7 +3792,8 @@ function init() { } ,'Add food from your database' : { cs: 'Přidat jidlo z Vaší databáze' - ,de: 'Ergänze Nahrung von Deiner Datenbank' + ,he: 'הוסף אוכל מבסיס הנתונים שלך' + ,de: 'Ergänze Nahrung aus Deiner Datenbank' ,es: 'Añadir alimento a su base de datos' ,fr: 'Ajouter aliment de votre base de données' ,el: 'Προσθήκη φαγητού από τη Βάση Δεδομένων' @@ -3740,6 +3815,7 @@ function init() { } ,'Reload database' : { cs: 'Znovu nahraj databázi' + ,he: 'טען בסיס נתונים שוב' ,de: 'Datenbank nachladen' ,es: 'Recargar base de datos' ,fr: 'Recharger la base de données' @@ -3762,6 +3838,7 @@ function init() { } ,'Add' : { cs: 'Přidej' + ,he: 'הוסף' ,de: 'Hinzufügen' ,es: 'Añadir' ,fr: 'Ajouter' @@ -3784,6 +3861,7 @@ function init() { } ,'Unauthorized' : { cs: 'Neautorizováno' + ,he: 'אין אישור' ,de: 'Unbefugt' ,es: 'No autorizado' ,fr: 'Non autorisé' @@ -3807,6 +3885,7 @@ function init() { } ,'Entering record failed' : { cs: 'Vložení záznamu selhalo' + ,he: 'הוספת רשומה נכשלה' ,de: 'Eingabe Datensatz fehlerhaft' ,es: 'Entrada de registro fallida' ,fr: 'Entrée enregistrement a échoué' @@ -3829,8 +3908,9 @@ function init() { } ,'Device authenticated' : { cs: 'Zařízení ověřeno' + ,he: 'התקן מאושר' ,de: 'Gerät authentifiziert' - ,es: 'Dispositivo autenticado' + ,es: 'Dispositivo autorizado' ,fr: 'Appareil authentifié' ,el: 'Εξουσιοδοτημένη Συσκευή' ,pt: 'Dispositivo autenticado' @@ -3852,8 +3932,9 @@ function init() { } ,'Device not authenticated' : { cs: 'Zařízení není ověřeno' + ,he: 'התקן לא מאושר' ,de: 'Gerät nicht authentifiziert' - ,es: 'Dispositivo no autenticado' + ,es: 'Dispositivo no autorizado' ,fr: 'Appareil non authentifié' ,el: 'Συσκευή Μη Εξουσιοδοτημένη' ,pt: 'Dispositivo não autenticado' @@ -3875,8 +3956,9 @@ function init() { } ,'Authentication status' : { cs: 'Stav ověření' - ,de: 'Authentifikations Status' - ,es: 'Estado de autenticación' + ,he: 'סטטוס אימות' + ,de: 'Authentifikationsstatus' + ,es: 'Estado de autorización' ,fr: 'Status de l\'authentification' ,el: 'Κατάσταση Εξουσιοδότησης' ,pt: 'Status de autenticação' @@ -3885,7 +3967,7 @@ function init() { ,hr: 'Status autentikacije' ,sv: 'Autentiseringsstatus' ,it: 'Stato di autenticazione' - ,dk: 'Autentifikationsstatus' + ,dk: 'Godkendelsesstatus' ,fi: 'Autentikoinnin tila' ,nb: 'Autentiseringsstatus' ,pl: 'Status uwierzytelnienia' @@ -3898,12 +3980,13 @@ function init() { } ,'Authenticate' : { cs: 'Ověřit' + ,he: 'אמת' ,de: 'Authentifizieren' - ,es: 'Autenticar' + ,es: 'Autentificar' ,fr: 'Authentifier' ,el: 'Πιστοποίηση' ,pt: 'Autenticar' - ,sv: 'Autentiserar' + ,sv: 'Autentisera' ,ro: 'Autentificare' ,bg: 'Удостоверяване' ,hr: 'Autenticirati' @@ -3921,6 +4004,7 @@ function init() { } ,'Remove' : { cs: 'Vymazat' + ,he: 'הסר' ,de: 'Entfernen' ,es: 'Eliminar' ,fr: 'Retirer' @@ -3944,8 +4028,9 @@ function init() { } ,'Your device is not authenticated yet' : { cs: 'Toto zařízení nebylo dosud ověřeno' + ,he: 'ההתקן שלך עדיין לא מאושר' ,de: 'Dein Gerät ist noch nicht authentifiziert' - ,es: 'Su dispositivo no ha sido autenticado todavía' + ,es: 'Su dispositivo no ha sido autentificado todavía' ,fr: 'Votre appareil n\'est pas encore authentifié' ,el: 'Η συκευή σας δεν έχει πιστοποιηθεί' ,pt: 'Seu dispositivo ainda não foi autenticado' @@ -4036,6 +4121,7 @@ function init() { } ,'Scale' : { cs: 'Měřítko' + ,he: 'סקלה' ,de: 'Skalierung' ,es: 'Escala' ,fr: 'Echelle' @@ -4107,8 +4193,12 @@ function init() { } ,'Logarithmic (Dynamic)' : { cs: 'Logaritmické (Dynamické)' + ,he: 'לוגריטמי - דינמי' ,de: 'Logaritmisch (dynamisch)' + ,es: 'Logarítmo (Dinámico)' + ,dk: 'Logaritmisk (Dynamisk)' ,it: 'Logaritmica (Dinamica)' + ,fr: 'Logarithmique (Dynamique)' ,el: 'Λογαριθμική (Δυναμική)' ,ro: 'Logaritmic (Dinamic)' ,bg: 'Логоритмична (Динамична)' @@ -4126,7 +4216,11 @@ function init() { } ,'Insulin-on-Board' : { cs: 'IOB' + ,he: 'אינסולין בגוף' ,de: 'Aktives Bolus-Insulin' + ,es: 'Insulina activa' + ,fr: 'Insuline à bord' + ,dk: 'Aktivt insulin (IOB)' ,it: 'IOB-Insulina a Bordo' ,nb: 'AI' ,el: 'Ενεργή Ινσουλίνη (IOB)' @@ -4145,7 +4239,11 @@ function init() { } ,'Carbs-on-Board' : { cs: 'COB' + ,he: 'פחמימות בגוף' ,de: 'Aktiv wirksame Kohlenhydrate' + ,es: 'Carbohidratos activos' + ,fr: 'Glucides à bord' + ,dk: 'Aktive kulhydrater (COB)' ,it: 'COB-Carboidrati a Bordo' ,nb: 'AK' ,el: 'Ενεργοί Υδατάνθρακες (COB)' @@ -4164,7 +4262,11 @@ function init() { } ,'Bolus Wizard Preview' : { cs: 'BWP-Náhled bolusového kalk.' + ,he: 'סקירת אשף הבולוס' ,de: 'Bolus-Kalkulator Vorschau' + ,es: 'Vista previa del cálculo del bolo' + ,fr: 'Prévue du Calculatuer de bolus' + ,dk: 'Bolus Wizard (BWP)' ,it: 'BWP-Calcolatore di bolo' ,nb: 'Boluskalkulator' ,el: 'Εργαλείο Εκτίμησης Επάρκειας Ινσουλίνης (BWP)' @@ -4183,7 +4285,11 @@ function init() { } ,'Value Loaded' : { cs: 'Hodnoty načteny' + ,he: 'ערך נטען' ,de: 'Geladener Wert' + ,es: 'Valor cargado' + ,fr: 'Valeur chargée' + ,dk: 'Værdi indlæst' ,it: 'Valori Caricati' ,nb: 'Verdi lastet' ,el: 'Τιμή ανακτήθηκε' @@ -4202,7 +4308,11 @@ function init() { } ,'Cannula Age' : { cs: 'CAGE-Stáří kanyly' + ,he: 'גיל הקנולה' ,de: 'Kanülenalter' + ,es: 'Antigüedad cánula' + ,fr: 'Age de la canule' + ,dk: 'Insuflon alder (CAGE)' ,it: 'CAGE-Cambio Ago' ,el: 'Ημέρες Χρήσης Κάνουλας (CAGE)' ,nb: 'Nålalder' @@ -4221,7 +4331,11 @@ function init() { } ,'Basal Profile' : { cs: 'Bazál' + ,he: 'פרופיל רמה בזלית' ,de: 'Basalraten-Profil' + ,es: 'Perfil Basal' + ,fr: 'Profil Basal' + ,dk: 'Basal profil' ,it: 'BASAL-Profilo Basale' ,el: 'Προφίλ Βασικής Ινσουλίνης (BASAL)' ,nb: 'Basalprofil' @@ -4240,6 +4354,7 @@ function init() { } ,'Silence for 30 minutes' : { cs: 'Ztlumit na 30 minut' + ,he: 'השתק לשלושים דקות' ,de: 'Stille für 30 Minuten' ,es: 'Silenciar durante 30 minutos' ,fr: 'Silence pendant 30 minutes' @@ -4263,6 +4378,7 @@ function init() { } ,'Silence for 60 minutes' : { cs: 'Ztlumit na 60 minut' + ,he: 'השתק לששים דקות' ,de: 'Stille für 60 Minuten' ,es: 'Silenciar durante 60 minutos' ,fr: 'Silence pendant 60 minutes' @@ -4286,6 +4402,7 @@ function init() { } ,'Silence for 90 minutes' : { cs: 'Ztlumit na 90 minut' + ,he: 'השתק לתשעים דקות' ,de: 'Stille für 90 Minuten' ,es: 'Silenciar durante 90 minutos' ,fr: 'Silence pendant 90 minutes' @@ -4309,6 +4426,7 @@ function init() { } ,'Silence for 120 minutes' : { cs: 'Ztlumit na 120 minut' + ,he: 'השתק לשעתיים' ,de: 'Stille für 120 Minuten' ,es: 'Silenciar durante 120 minutos' ,fr: 'Silence pendant 120 minutes' @@ -4330,8 +4448,32 @@ function init() { ,zh_cn: '静音2小时' ,zh_tw: '靜音2小時' } + ,'2HR' : { + cs: '2hod' + ,de: '2h' + ,es: '2h' + ,fr: '2hr' + ,el: '2 ώρες' + ,pt: '2h' + ,sv: '2tim' + ,ro: '2h' + ,bg: '2часа' + ,hr: '2h' + ,it: '2ORE' + ,dk: '2t' + ,fi: '2h' + ,nb: '2t' + ,pl: '2h' + ,ru: '2ч' + ,sk: '2 hod' + ,nl: '2uur' + ,ko: '2시간' + ,zh_cn: '2小时' + ,zh_tw: '2小時' + } ,'3HR' : { cs: '3hod' + ,he: 'שלוש שעות' ,de: '3h' ,es: '3h' ,fr: '3hr' @@ -4342,19 +4484,20 @@ function init() { ,bg: '3часа' ,hr: '3h' ,it: '3ORE' - ,dk: '3tim' + ,dk: '3t' ,fi: '3h' ,nb: '3t' ,pl: '3h' ,ru: '3ч' ,sk: '3 hod' - ,nl: '3 uur' + ,nl: '3uur' ,ko: '3시간' ,zh_cn: '3小时' ,zh_tw: '3小時' } ,'6HR' : { cs: '6hod' + ,he: 'שש שעות' ,de: '6h' ,es: '6h' ,fr: '6hr' @@ -4365,25 +4508,26 @@ function init() { ,bg: '6часа' ,hr: '6h' ,it: '6ORE' - ,dk: '6tim' + ,dk: '6t' ,fi: '6h' ,nb: '6t' ,pl: '6h' ,ru: '6ч' ,sk: '6 hod' - ,nl: '6 uur' + ,nl: '6uur' ,ko: '6시간' ,zh_cn: '6小时' ,zh_tw: '6小時' } ,'12HR' : { cs: '12hod' + ,he: 'שתים עשרה שעות' ,de: '12h' ,es: '12h' ,fr: '12hr' ,el: '12 ώρες' ,pt: '12h' - ,sv: '12tim' + ,sv: '12t' ,ro: '12h' ,bg: '12часа' ,hr: '12h' @@ -4394,13 +4538,14 @@ function init() { ,pl: '12h' ,ru: '12ч' ,sk: '12 hod' - ,nl: '12 uur' + ,nl: '12uur' ,ko: '12시간' ,zh_cn: '12小时' ,zh_tw: '12小時' } ,'24HR' : { cs: '24hod' + ,he: 'עשרים וארבע שעות' ,de: '24h' ,es: '24h' ,fr: '24hr' @@ -4411,19 +4556,20 @@ function init() { ,bg: '24часа' ,hr: '24h' ,it: '24ORE' - ,dk: '24tim' + ,dk: '24t' ,fi: '24h' ,nb: '24t' ,pl: '24h' ,ru: '24ч' ,sk: '24 hod' - ,nl: '24 uur' + ,nl: '24uur' ,ko: '24시간' ,zh_cn: '24小时' ,zh_tw: '24小時' } ,'Settings' : { cs: 'Nastavení' + ,he: 'הגדרות' ,de: 'Einstellungen' ,es: 'Ajustes' ,fr: 'Paramètres' @@ -4434,7 +4580,7 @@ function init() { ,bg: 'Настройки' ,hr: 'Postavke' ,it: 'Impostazioni' - ,dk: 'Opsætning' + ,dk: 'Indstillinger' ,fi: 'Asetukset' ,nb: 'Innstillinger' ,pl: 'Ustawienia' @@ -4447,6 +4593,7 @@ function init() { } ,'Units' : { cs: 'Jednotky' + ,he: 'יחידות' ,de: 'Einheiten' ,es: 'Unidades' ,fr: 'Unités' @@ -4470,6 +4617,7 @@ function init() { } ,'Date format' : { cs: 'Formát datumu' + ,he: 'פורמט תאריך' ,de: 'Datumsformat' ,es: 'Formato de fecha' ,fr: 'Format Date' @@ -4480,7 +4628,7 @@ function init() { ,bg: 'Формат на датата' ,hr: 'Format datuma' ,it: 'Formato data' - ,dk: 'dato format' + ,dk: 'Dato format' ,fi: 'Aikamuoto' ,nb: 'Datoformat' ,pl: 'Format daty' @@ -4493,9 +4641,10 @@ function init() { } ,'12 hours' : { cs: '12 hodin' + ,he: 'שתים עשרה שעות' ,de: '12 Stunden' ,es: '12 horas' - ,fr: '12hr' + ,fr: '12 heures' ,el: '12ωρο' ,pt: '12 horas' ,sv: '12-timmars' @@ -4516,9 +4665,10 @@ function init() { } ,'24 hours' : { cs: '24 hodin' + ,he: 'עשרים וארבע שעות' ,de: '24 Stunden' ,es: '24 horas' - ,fr: '24hr' + ,fr: '24 heures' ,el: '24ωρο' ,pt: '24 horas' ,sv: '24-timmars' @@ -4585,7 +4735,7 @@ function init() { } ,'Meal Bolus' : { cs: 'Bolus na jídlo' - ,de: 'Mahlzeiten Bolus' + ,de: 'Mahlzeiten-Bolus' ,es: 'Bolo de comida' ,fr: 'Bolus repas' ,el: 'Ινσουλίνη Γέυματος' @@ -4608,7 +4758,7 @@ function init() { } ,'Snack Bolus' : { cs: 'Bolus na svačinu' - ,de: 'Snack Bolus' + ,de: 'Snack-Bolus' ,es: 'Bolo de aperitivo' ,fr: 'Bolus friandise' ,el: 'Ινσουλίνη Σνακ' @@ -4631,7 +4781,7 @@ function init() { } ,'Correction Bolus' : { cs: 'Bolus na glykémii' - ,de: 'Korrektur Bolus' + ,de: 'Korrektur-Bolus' ,es: 'Bolo corrector' ,fr: 'Bolus de correction' ,el: 'Διόρθωση με Ινσουλίνη' @@ -4655,7 +4805,7 @@ function init() { ,'Carb Correction' : { cs: 'Přídavek sacharidů' ,de: 'Kohlenhydrate Korrektur' - ,es: 'Hidratos de carbono de corrección' + ,es: 'Carbohidratos de corrección' ,fr: 'Correction glucide' ,el: 'Διόρθωση με Υδατάνθρακεςς' ,pt: 'Correção com carboidrato' @@ -4725,7 +4875,7 @@ function init() { cs: 'Cvičení' ,de: 'Bewegung' ,es: 'Ejercicio' - ,fr: 'Exercice' + ,fr: 'Exercice physique' ,el: 'Άσκηση' ,pt: 'Exercício' ,sv: 'Aktivitet' @@ -4884,7 +5034,7 @@ function init() { } ,'D.A.D. Alert' : { cs: 'D.A.D. Alert' - ,de: 'Diabeteswarnhund Alarm' + ,de: 'Diabeteswarnhund-Alarm' ,es: 'Alerta de perro de alerta diabética' ,fr: 'Wouf! Wouf! Chien d\'alerte diabète' ,el: 'Προειδοποίηση σκύλου υποστήριξης (Diabetes Alert Dog)' @@ -4907,7 +5057,7 @@ function init() { } ,'Glucose Reading' : { cs: 'Hodnota glykémie' - ,de: 'Glukose Messwert' + ,de: 'Glukosemesswert' ,es: 'Valor de glucemia' ,fr: 'Valeur de glycémie' ,el: 'Τιμή Γλυκόζης' @@ -4917,7 +5067,7 @@ function init() { ,bg: 'Кръвна захар' ,hr: 'Vrijednost GUK-a' ,it: 'Lettura glicemie' - ,dk: 'Glukose aflæsning' + ,dk: 'Blodsukker aflæsning' ,fi: 'Verensokeri' ,nb: 'Blodsukkermåling' ,he: 'מדידת סוכר' @@ -5090,6 +5240,30 @@ function init() { ,zh_cn: '启用报警' ,zh_tw: '啟用報警' } + ,'Pump Battery Change' : { + nl: 'Pompbatterij vervangen' + ,sv: 'Byte av pumpbatteri' + ,de: 'Pumpenbatterie wechseln' + ,fi: 'Pumpun patterin vaihto' + ,bg: 'Смяна на батерия на помпата' + ,pl: 'Zmiana baterii w pompie' + } + ,'Pump Battery Low Alarm' : { + nl: 'Pompbatterij bijna leeg Alarm' + ,sv: 'Pumpbatteri lågt Alarm' + ,de: 'Pumpenbatterie niedrig Alarm' + ,fi: 'Varoitus! Pumpun patteri loppumassa' + ,bg: 'Аларма за слаба батерия на помпата' + ,pl: 'Alarm! Niski poziom baterii w pompie' + } + ,'Pump Battery change overdue!' : { // batteryage.js + nl: 'Pompbatterij moet vervangen worden!' + ,sv: 'Pumpbatteriet måste bytas!' + ,de: 'Pumpenbatterie Wechsel überfällig!' + ,fi: 'Pumpun patterin vaihto myöhässä!' + ,bg: 'Смяната на батерията на помпата - наложителна' + , pl: 'Bateria pompy musi być wymieniona!' + } ,'When enabled an alarm may sound.' : { cs: 'Při povoleném alarmu zní zvuk' ,de: 'Sofern eingeschaltet ertönt ein Alarm' @@ -5118,7 +5292,7 @@ function init() { cs: 'Urgentní vysoká glykémie' ,de: 'Achtung Hoch Alarm' ,es: 'Alarma de glucemia alta urgente' - ,fr: 'Alarme haute urgente' + ,fr: 'Alarme hyperglycémie urgente' ,el: 'Ειδοποίηση επικίνδυνα υψηλής γλυκόζης' ,pt: 'URGENTE: Alarme de glicemia alta' ,sv: 'Brådskande högt larmvärde' @@ -5126,7 +5300,7 @@ function init() { ,bg: 'Много висока КЗ' ,hr: 'Hitni alarm za hiper' ,it: 'Urgente:Glicemia Alta' - ,dk: 'Høj grænse overskredet' + ,dk: 'Kritisk grænse overskredet' ,fi: 'Kriittinen korkea' ,nb: 'Kritisk høy alarm' ,he: 'התראת גבוה דחופה' @@ -5142,7 +5316,7 @@ function init() { cs: 'Vysoká glykémie' ,de: 'Hoch Alarm' ,es: 'Alarma de glucemia alta' - ,fr: 'Alarme haute' + ,fr: 'Alarme hyperglycémie' ,el: 'Ειδοποίηση υψηλής γλυκόζης' ,pt: 'Alarme de glicemia alta' ,sv: 'Högt larmvärde' @@ -5164,9 +5338,9 @@ function init() { } ,'Low Alarm' : { cs: 'Nízká glykémie' - ,de: 'Tief Alarm' + ,de: 'Niedrig Alarm' ,es: 'Alarma de glucemia baja' - ,fr: 'Alarme basse' + ,fr: 'Alarme hypoglycémie' ,el: 'Ειδοποίηση χαμηλής γλυκόζης' ,pt: 'Alarme de glicemia baixa' ,sv: 'Lågt larmvärde' @@ -5188,9 +5362,9 @@ function init() { } ,'Urgent Low Alarm' : { cs: 'Urgentní nízká glykémie' - ,de: 'Achtung Tief Alarm' + ,de: 'Achtung Niedrig Alarm' ,es: 'Alarma de glucemia baja urgente' - ,fr: 'Alarme basse urgente' + ,fr: 'Alarme hypoglycémie urgente' ,el: 'Ειδοποίηση επικίνδυνα χαμηλής γλυκόζης' ,pt: 'URGENTE: Alarme de glicemia baixa' ,sv: 'Brådskande lågt larmvärde' @@ -5205,16 +5379,17 @@ function init() { ,pl: 'Uwaga: Alarm hipoglikemii' ,ru: 'Внимание: низкая гликемия' ,sk: 'Naliehavý alarm nízkej glykémie' - ,nl: 'Urgent alarm lage BG' + ,nl: 'Urgent Alarm lage BG' ,ko: '긴급 저혈당 알람' ,zh_cn: '血糖过低报警' ,zh_tw: '血糖過低報警' } ,'Stale Data: Warn' : { cs: 'Zastaralá data' + ,he: 'אזהרה-נתונים ישנים' ,de: 'Warnung: Daten nicht mehr gültig' ,es: 'Datos obsoletos: aviso' - ,fr: 'Données dépassées: avis' + ,fr: 'Données échues: avertissement' ,el: 'Έλλειψη πρόσφατων δεδομένων: Προειδοποίηση' ,pt: 'Dados antigos: alerta' ,sv: 'Förfluten data: Varning!' @@ -5228,16 +5403,17 @@ function init() { ,pl: 'Ostrzeżenie: brak odczytów' ,ru: 'Предупреждение: старые данные' ,sk: 'Varovanie: Zastaralé dáta' - ,nl: 'Gegevens verouderd: Waarschuwing' + ,nl: 'Waarschuwing Oude gegevens na' ,ko: '손실 데이터 : 경고' ,zh_cn: '数据过期:提醒' ,zh_tw: '數據過期:提醒' } ,'Stale Data: Urgent' : { cs: 'Zastaralá data urgentní' + ,he: 'דחוף-נתונים ישנים' ,de: 'Achtung: Daten nicht mehr gültig' ,es: 'Datos obsoletos: Urgente' - ,fr: 'Données dépassées urgentes' + ,fr: 'Données échues: avertissement urgent' ,el: 'Έλλειψη πρόσφατων δεδομένων: ΕΠΕΙΓΟΝ' ,pt: 'Dados antigos: Urgente' ,sv: 'Brådskande varning, inaktuell data' @@ -5245,19 +5421,20 @@ function init() { ,bg: 'Много стари данни' ,hr: 'Hitno: Stari podaci' ,it: 'Notifica:Urgente' - ,dk: 'Advarsel: Gamle data' + ,dk: 'Kritisk: Gamle data' ,fi: 'Vanhat tiedot: hälytys' ,nb: 'Advarsel: Veldig gamle data' ,pl: 'Uwaga: brak odczytów' ,ru: 'Внимание: старые данные' ,sk: 'Naliehavé: Zastaralé dáta' - ,nl: 'URGENT Gegevens verouderd' + ,nl: 'Urgente Waarschuwing Oude gegevens na' ,ko: '손실 데이터 : 긴급' ,zh_cn: '数据过期:警告' ,zh_tw: '數據過期:警告' } ,'mins' : { cs: 'min' + ,he: 'דקות' ,de: 'min' ,es: 'min' ,fr: 'mins' @@ -5281,6 +5458,7 @@ function init() { } ,'Night Mode' : { cs: 'Noční mód' + ,he: 'מצב לילה' ,de: 'Nacht Modus' ,es: 'Modo nocturno' ,fr: 'Mode nocturne' @@ -5304,9 +5482,10 @@ function init() { } ,'When enabled the page will be dimmed from 10pm - 6am.' : { cs: 'Když je povoleno, obrazovka je ztlumena 22:00 - 6:00' + ,he: 'במצב זה המסך יעומעם בין השעות עשר בלילה לשש בבוקר' ,de: 'Sofern aktiviert wird die Anzeige von 22h - 6h gedimmt' ,es: 'Cuando esté activo, el brillo de la página bajará de 10pm a 6am.' - ,fr: 'Si activé, la page sera assombire de 22:00 à 6:00' + ,fr: 'Si activé, la page sera assombrie de 22:00 à 6:00' ,el: 'Όταν ενεργοποιηθεί, η φωτεινότητα της οθόνης θα μειωθεί μεταξύ 22.00 - 6.00' ,pt: 'Se ativado, a página será escurecida entre 22h e 6h' ,sv: 'När aktiverad dimmas sidan mellan 22:00 - 06:00' @@ -5327,6 +5506,7 @@ function init() { } ,'Enable' : { cs: 'Povoleno' + ,he: 'אפשר' ,de: 'Aktivieren' ,es: 'Activar' ,fr: 'Activer' @@ -5350,6 +5530,7 @@ function init() { } ,'Show Raw BG Data' : { cs: 'Zobraz RAW data' + ,he: 'הראה את רמת הסוכר ללא עיבוד' ,de: 'Zeige Roh-BG Daten' ,es: 'Mostrat datos en glucemia en crudo' ,fr: 'Montrer les données BG brutes' @@ -5373,6 +5554,7 @@ function init() { } ,'Never' : { cs: 'Nikdy' + ,he: 'אף פעם' ,de: 'Nie' ,es: 'Nunca' ,fr: 'Jamais' @@ -5396,6 +5578,7 @@ function init() { } ,'Always' : { cs: 'Vždy' + ,he: 'תמיד' ,de: 'Immer' ,es: 'Siempre' ,fr: 'Toujours' @@ -5419,6 +5602,7 @@ function init() { } ,'When there is noise' : { cs: 'Při šumu' + ,he: 'בנוכחות רעש' ,de: 'Sofern Rauschen vorhanden' ,es: 'Cuando hay ruido' ,fr: 'Quand il y a du bruit' @@ -5442,6 +5626,7 @@ function init() { } ,'When enabled small white dots will be displayed for raw BG data' : { cs: 'Když je povoleno, malé tečky budou zobrazeny pro RAW data' + ,he: 'במצב זה,רמות סוכר לפני עיבוד יוצגו כנקודות לבנות קטנות' ,de: 'Bei Aktivierung erscheinen kleine weiße Punkte für Roh-BG Daten' ,es: 'Cuando esté activo, pequeños puntos blancos mostrarán los datos en crudo' ,el: 'Όταν εργοποιηθεί, μικρές λευκές κουκίδες θα αναπαριστούν τα αυτούσια δεδομένα του αισθητήρα' @@ -5458,16 +5643,17 @@ function init() { ,pl: 'Gdy funkcja jest włączona, małe białe kropki pojawią się na surowych danych BG' ,ru: 'При активации данные RAW будут видны как мелкие белые точки' ,sk: 'Keď je povolené, malé bodky budú zobrazovať RAW dáta.' - ,nl: 'Indien geactiveerd is ruwe data zichtbaar als witte punten ' + ,nl: 'Indien geactiveerd is ruwe data zichtbaar als witte punten' ,ko: '활성화 하면 작은 흰점들이 raw 혈당 데이터를 표시하게 될 것이다.' ,zh_cn: '启用后将使用小白点标注原始血糖数据' ,zh_tw: '啟用後將使用小白點標註原始血糖數據' } ,'Custom Title' : { cs: 'Vlastní název stránky' + ,he: 'כותרת מותאמת אישית' ,de: 'Benutzerdefinierter Titel' ,es: 'Título personalizado' - ,fr: 'Titre sur mesure' + ,fr: 'Titre personalisé' ,el: 'Επιθυμητός τίτλος σελίδας' ,pt: 'Customizar Título' ,sv: 'Egen titel' @@ -5475,7 +5661,7 @@ function init() { ,bg: 'Име на страницата' ,hr: 'Vlastiti naziv' ,it: 'Titolo personalizzato' - ,dk: 'Egen titel' + ,dk: 'Valgfri titel' ,fi: 'Omavalintainen otsikko' ,nb: 'Egen tittel' ,pl: 'Własny tytuł strony' @@ -5488,6 +5674,7 @@ function init() { } ,'Theme' : { cs: 'Téma' + ,he: 'נושא' ,de: 'Thema' ,es: 'Tema' ,fr: 'Thème' @@ -5511,6 +5698,7 @@ function init() { } ,'Default' : { cs: 'Výchozí' + ,he: 'בְּרִירַת מֶחדָל' ,de: 'Standard' ,es: 'Por defecto' ,fr: 'Par défaut' @@ -5534,6 +5722,7 @@ function init() { } ,'Colors' : { cs: 'Barevné' + ,he: 'צבעים' ,de: 'Farben' ,es: 'Colores' ,fr: 'Couleurs' @@ -5557,7 +5746,11 @@ function init() { } ,'Colorblind-friendly colors' : { cs: 'Pro barvoslepé' + ,he: 'צבעים ידידותיים לעוורי צבעים' ,de: 'Farbenblind-freundliche Darstellung' + ,es: 'Colores para Daltónicos' + ,fr: 'Couleurs pour daltoniens' + ,dk: 'Farveblindvenlige farver' ,nb: 'Fargeblindvennlige farger' ,el: 'Χρώματα συμβατά για αχρωματοψία' ,pt: 'Cores para daltônicos' @@ -5571,12 +5764,14 @@ function init() { ,fi: 'Värisokeille sopivat värit' ,zh_cn: '色盲患者可辨识的颜色' ,zh_tw: '色盲患者可辨識的顏色' + ,pl: 'Kolory dla niedowidzących' } ,'Reset, and use defaults' : { cs: 'Vymaž a nastav výchozí hodnoty' + ,he: 'איפוס ושימוש ברירות מחדל' ,de: 'Zurücksetzen und Voreinstellungen verwenden' ,es: 'Inicializar y utilizar los valores por defecto' - ,fr: 'Remise à zéro et utiliser des valeurs par défaut' + ,fr: 'Remettre à zéro et utiliser les valeurs par défaut' ,el: 'Αρχικοποίηση και χρήση των προκαθορισμένων ρυθμίσεων' ,pt: 'Zerar e usar padrões' ,sv: 'Återställ standardvärden' @@ -5597,6 +5792,7 @@ function init() { } ,'Calibrations' : { cs: 'Kalibrace' + ,he: 'כיולים' ,de: 'Kalibrierung' ,es: 'Calibraciones' ,fr: 'Calibration' @@ -5619,6 +5815,7 @@ function init() { } ,'Alarm Test / Smartphone Enable' : { cs: 'Test alarmu' + ,he: 'אזעקה מבחן / הפעל טלפון' ,de: 'Alarm Test / Smartphone aktivieren' ,es: 'Test de Alarma / Activar teléfono' ,fr: 'Test alarme / Activer Smartphone' @@ -5642,8 +5839,9 @@ function init() { } ,'Bolus Wizard' : { cs: 'Bolusový kalkulátor' + ,he: 'אשף בולוס' ,de: 'Bolus-Kalkulator' - ,es: 'Bolus Wizard' + ,es: 'Calculo Bolos sugeridos' ,fr: 'Calculateur de bolus' ,el: 'Εργαλείο υπολογισμού ινσουλίνης' ,pt: 'Ajuda de bolus' @@ -5665,7 +5863,8 @@ function init() { } ,'in the future' : { cs: 'v budoucnosti' - ,de: 'in der Zuknft' + ,he: 'בעתיד' + ,de: 'in der Zukunft' ,es: 'en el futuro' ,fr: 'dans le futur' ,el: 'στο μέλλον' @@ -5675,7 +5874,7 @@ function init() { ,bg: 'в бъдещето' ,hr: 'U budućnosti' ,it: 'nel futuro' - ,dk: 'fremtiden' + ,dk: 'i fremtiden' ,fi: 'tulevaisuudessa' ,nb: 'fremtiden' ,pl: 'w przyszłości' @@ -5688,6 +5887,7 @@ function init() { } ,'time ago' : { cs: 'min zpět' + ,he: 'פעם' ,de: 'seit Kurzem' ,es: 'tiempo atrás' ,fr: 'temps avant' @@ -5711,6 +5911,7 @@ function init() { } ,'hr ago' : { cs: 'hod zpět' + ,he: 'לפני שעה' ,de: 'Stunde her' ,es: 'hr atrás' ,fr: 'hr avant' @@ -5721,7 +5922,7 @@ function init() { ,bg: 'час по-рано' ,hr: 'sat unazad' ,it: 'ora fa' - ,dk: 'Time siden' + ,dk: 'time siden' ,fi: 'tunti sitten' ,nb: 'Time siden' ,pl: 'godzina temu' @@ -5734,8 +5935,9 @@ function init() { } ,'hrs ago' : { cs: 'hod zpět' + ,he: 'לפני שעות' ,de: 'Stunden her' - ,es: 'hr atrás' + ,es: 'hrs atrás' ,fr: 'hrs avant' ,el: 'ώρες πριν' ,pt: 'h atrás' @@ -5744,7 +5946,7 @@ function init() { ,bg: 'часа по-рано' ,hr: 'sati unazad' ,it: 'ore fa' - ,dk: 'Timer siden' + ,dk: 'timer siden' ,fi: 'tuntia sitten' ,nb: 'Timer siden' ,pl: 'godzin temu' @@ -5757,6 +5959,7 @@ function init() { } ,'min ago' : { cs: 'min zpět' + ,he: 'לפני דקה' ,de: 'Minute her' ,es: 'min atrás' ,fr: 'min avant' @@ -5767,8 +5970,8 @@ function init() { ,bg: 'мин. по-рано' ,hr: 'minuta unazad' ,it: 'minuto fa' - ,dk: 'minutter siden' - ,fi: 'm sitten' + ,dk: 'minut siden' + ,fi: 'minuutti sitten' ,nb: 'minutter siden' ,pl: 'minuta temu' ,ru: 'мин. назад' @@ -5780,8 +5983,9 @@ function init() { } ,'mins ago' : { cs: 'min zpět' + ,he: 'לפני דקות' ,de: 'Minuten her' - ,es: 'min atrás' + ,es: 'mins atrás' ,fr: 'mins avant' ,el: 'λεπτά πριν' ,pt: 'min atrás' @@ -5791,7 +5995,7 @@ function init() { ,hr: 'minuta unazad' ,it: 'minuti fa' ,dk: 'minutter siden' - ,fi: 'm sitten' + ,fi: 'minuuttia sitten' ,nb: 'minutter siden' ,pl: 'minut temu' ,ru: 'минут назад' @@ -5803,6 +6007,7 @@ function init() { } ,'day ago' : { cs: 'den zpět' + ,he: 'לפני יום' ,de: 'Tag her' ,es: 'día atrás' ,fr: 'jour avant' @@ -5826,6 +6031,7 @@ function init() { } ,'days ago' : { cs: 'dnů zpět' + ,he: 'לפני ימים' ,de: 'Tage her' ,es: 'días atrás' ,fr: 'jours avant' @@ -5849,6 +6055,7 @@ function init() { } ,'long ago' : { cs: 'dlouho zpět' + ,he: 'לפני הרבה זמן' ,de: 'lange her' ,es: 'Hace mucho tiempo' ,fr: 'il y a longtemps' @@ -5872,6 +6079,7 @@ function init() { } ,'Clean' : { cs: 'Čistý' + ,he: 'נקה' ,de: 'Rein' ,es: 'Limpio' ,fr: 'Propre' @@ -5895,6 +6103,7 @@ function init() { } ,'Light' : { cs: 'Lehký' + ,he: 'אוֹר' ,de: 'Leicht' ,es: 'Ligero' ,fr: 'Léger' @@ -5918,6 +6127,7 @@ function init() { } ,'Medium' : { cs: 'Střední' + ,he: 'בינוני' ,de: 'Mittel' ,es: 'Medio' ,fr: 'Moyen' @@ -5951,7 +6161,7 @@ function init() { ,bg: 'Висок' ,hr: 'Teško' ,it: 'Pesante' - ,dk: 'Voldsom' + ,dk: 'Meget' ,fi: 'Raskas' ,nb: 'Mye' ,pl: 'Wysoki' @@ -5988,7 +6198,7 @@ function init() { cs: 'Glykémie z RAW dat' ,de: 'Roh-BG' ,es: 'Glucemia en crudo' - ,fr: 'Glycémie brut' + ,fr: 'Glycémie brute' ,el: 'Αυτούσιες τιμές γλυκόζης' ,pt: 'Glicemia sem processamento' ,sv: 'RAW-BS' @@ -6030,6 +6240,7 @@ function init() { } ,'Noise' : { cs: 'Šum' + ,he: 'רַעַשׁ' ,de: 'Rauschen' ,es: 'Ruido' ,fr: 'Bruit' @@ -6052,6 +6263,7 @@ function init() { } ,'Calibration' : { cs: 'Kalibrace' + ,he: 'כִּיוּל' ,de: 'Kalibrierung' ,es: 'Calibración' ,fr: 'Calibration' @@ -6074,11 +6286,12 @@ function init() { } ,'Show Plugins' : { cs: 'Zobrazuj pluginy' + ,he: 'הצג תוספים' ,de: 'Zeige Plugins' ,es: 'Mostrar Plugins' ,fr: 'Montrer Plugins' ,el: 'Πρόσθετα Συστήματος' - ,pt: 'Mostrar Plugins' + ,pt: 'Mostrar les Plugins' ,ro: 'Arată plugin-urile' ,bg: 'Покажи добавките' ,hr: 'Prikaži plugine' @@ -6097,6 +6310,7 @@ function init() { } ,'About' : { cs: 'O aplikaci' + ,he: 'על אודות' ,de: 'Über' ,es: 'Sobre' ,fr: 'À propos de' @@ -6120,6 +6334,7 @@ function init() { } ,'Value in' : { cs: 'Hodnota v' + ,he: 'ערך' ,de: 'Wert in' ,es: 'Valor en' ,fr: 'Valeur en' @@ -6142,9 +6357,9 @@ function init() { } ,'Carb Time' : { cs: 'Čas jídla' - ,de: 'Kohlenhydrat Zeit' + ,de: 'Kohlenhydrat-Zeit' ,es: 'Momento de la ingesta' - ,fr: 'Moment de Glucide' + ,fr: 'Moment de l\'ingestion de Glucides' ,el: 'Στιγμή χορηγησης υδ/κων' ,pt: 'Hora do carboidrato' ,ro: 'Ora carbohidrați' @@ -6165,7 +6380,11 @@ function init() { } ,'Language' : { cs: 'Jazyk' + ,he: 'שפה' ,de: 'Sprache' + ,es: 'Lenguaje' + ,fr: 'Langue' + ,dk: 'Sprog' ,sv: 'Språk' ,nb: 'Språk' ,el: 'Γλώσσα' @@ -6184,7 +6403,11 @@ function init() { } ,'Add new' : { cs: 'Přidat nový' + ,he: 'הוסף חדש' ,de: 'Neu hinzufügen' + ,es: 'Añadir nuevo' + ,fr: 'Ajouter nouveau' + ,dk: 'Tilføj ny' ,sv: 'Lägg till ny' ,ro: 'Adaugă nou' ,el: 'Προσθήκη' @@ -6202,7 +6425,11 @@ function init() { } ,'g' : { // grams shortcut cs: 'g' + ,he: 'גרמים' ,de: 'g' + ,es: 'gr' + ,fr: 'g' + ,dk: 'g' ,sv: 'g' ,ro: 'g' ,bg: 'гр' @@ -6220,7 +6447,11 @@ function init() { } ,'ml' : { // milliliters shortcut cs: 'ml' + ,he: 'מיליטרים' ,de: 'ml' + ,es: 'ml' + ,fr: 'ml' + ,dk: 'ml' ,sv: 'ml' ,ro: 'ml' ,bg: 'мл' @@ -6238,7 +6469,11 @@ function init() { } ,'pcs' : { // pieces shortcut cs: 'ks' + ,he: 'יחידות' ,de: 'Stk.' + ,es: 'pcs' + ,fr: 'pcs' + ,dk: 'stk' ,sv: 'st' ,ro: 'buc' ,bg: 'бр' @@ -6256,7 +6491,11 @@ function init() { } ,'Drag&drop food here' : { cs: 'Sem táhni & pusť jídlo' + ,he: 'גרור ושחרר אוכל כאן' ,de: 'Mahlzeit hierher verschieben' + ,es: 'Arrastre y suelte aquí alimentos' + ,fr: 'Glisser et déposer repas ici ' + ,dk: 'Hiv og slip mad her' ,sv: 'Dra&Släpp mat här' ,ro: 'Drag&drop aliment aici' ,el: 'Σύρετε εδώ φαγητό' @@ -6274,9 +6513,13 @@ function init() { } ,'Care Portal' : { cs: 'Portál ošetření' + ,he: 'פורטל טיפולים' ,sv: 'Care Portal' + ,fr: 'Care Portal' ,it: 'Somministrazioni' ,de: 'Behandlungs-Portal' + ,es: 'Portal cuidador' + ,dk: 'Omsorgsportal' ,ro: 'Care Portal' ,bg: 'Въвеждане на данни' ,nb: 'Omsorgsportal' @@ -6292,8 +6535,12 @@ function init() { } ,'Medium/Unknown' : { // GI of food cs: 'Střední/Neznámá' + ,he: 'בינוני/לא ידוע' ,sv: 'Medium/Okänt' ,de: 'Mittel/Unbekannt' + ,es: 'Medio/Desconocido' + ,fr: 'Moyen/Inconnu' + ,dk: 'Medium/Ukendt' ,ro: 'Mediu/Necunoscut' ,el: 'Μέσος/Άγνωστος' ,bg: 'Среден/неизвестен' @@ -6310,9 +6557,13 @@ function init() { } ,'IN THE FUTURE' : { cs: 'V BUDOUCNOSTI' + ,he: 'בעתיד' + ,fr: 'dans le futur' ,sv: 'Framtida' ,ro: 'ÎN VIITOR' ,de: 'IN DER ZUKUNFT' + ,es: 'EN EL FUTURO' + ,dk: 'I fremtiden' ,el: 'ΣΤΟ ΜΕΛΛΟΝ' ,bg: 'В БЪДЕШЕТО' ,nb: 'I fremtiden' @@ -6328,8 +6579,12 @@ function init() { } ,'Update' : { // Update button cs: 'Aktualizovat' + ,he: 'עדכן' ,de: 'Aktualisieren' + ,es: 'Actualizar' + ,dk: 'Opdater' ,sv: 'Uppdatera' + ,fr: 'Mise à jour' ,nb: 'Oppdater' ,pt: 'Atualizar' ,el: 'Ενημέρωση' @@ -6347,7 +6602,11 @@ function init() { } ,'Order' : { cs: 'Pořadí' + ,he: 'סֵדֶר' ,de: 'Reihenfolge' + ,es: 'Ordenar' + ,fr: 'Mise en ordre' + ,dk: 'Sorter' ,sv: 'Sortering' ,nb: 'Sortering' ,el: 'Σειρά κατάταξης' @@ -6365,7 +6624,11 @@ function init() { } ,'oldest on top' : { cs: 'nejstarší nahoře' + ,he: 'העתיק ביותר למעלה' ,de: 'älteste oben' + ,es: 'Más antiguo arriba' + ,fr: 'Plus vieux en tête de liste' + ,dk: 'ældste øverst' ,sv: 'Äldst först' ,nb: 'Eldste først' ,el: 'τα παλαιότερα πρώτα' @@ -6383,8 +6646,12 @@ function init() { } ,'newest on top' : { cs: 'nejnovější nahoře' + ,he: 'החדש ביותר למעלה' ,sv: 'Nyast först' ,de: 'neueste oben' + ,es: 'Más nuevo arriba' + ,fr: 'Nouveaux en tête de liste' + ,dk: 'nyeste øverst' ,nb: 'Nyeste først' ,el: 'τα νεότερα πρώτα' ,ro: 'mai noi primele' @@ -6401,9 +6668,13 @@ function init() { } ,'All sensor events' : { cs: 'Všechny události sensoru' + ,he: 'כל האירועים חיישן' ,sv: 'Alla sensorhändelser' ,nb: 'Alle sensorhendelser' ,de: 'Alle Sensor-Ereignisse' + ,es: 'Todos los eventos del sensor' + ,fr: 'Tous les événement senseur' + ,dl: 'Alle sensor begivenheder' ,el: 'Όλα τα συμβάντα του αισθητήρα' ,ro: 'Evenimente legate de senzor' ,bg: 'Всички събития от сензора' @@ -6419,9 +6690,13 @@ function init() { } ,'Remove future items from mongo database' : { cs: 'Odebrání položek v budoucnosti z Mongo databáze' + ,he: 'הסרת פריטים עתידיים ממסד הנתונים מונגו' ,nb: 'Fjern fremtidige elementer fra mongo database' + ,fr: 'Effacer les éléments futurs de la base de données mongo' ,el: 'Αφαίρεση μελλοντικών εγγραφών από τη βάση δεδομένων' ,de: 'Entferne zukünftige Objekte aus Mongo-Datenbank' + ,es: 'Remover elementos futuros desde basedatos Mongo' + ,dk: 'Fjern fremtidige værdier fra mongo databasen' ,ro: 'Șterge date din viitor din baza de date mongo' ,sv: 'Ta bort framtida händelser från mongodatabasen' ,bg: 'Премахни бъдещите точки от Монго базата с данни' @@ -6438,9 +6713,13 @@ function init() { } ,'Find and remove treatments in the future' : { cs: 'Najít a odstranit záznamy ošetření v budoucnosti' + ,he:'מצא ולהסיר טיפולים בעתיד' ,nb: 'Finn og fjern fremtidige behandlinger' + ,fr: 'Chercher et effacer les élément dont la date est dans le futur' ,el: 'Εύρεση και αφαίρεση μελλοντικών ενεργειών από τη βάση δεδομένων' ,de: 'Finde und entferne zukünftige Behandlungen' + ,es: 'Encontrar y eliminar tratamientos futuros' + ,dk: 'Find og fjern fremtidige behandlinger' ,ro: 'Caută și elimină tratamente din viitor' ,sv: 'Hitta och ta bort framtida behandlingar' ,bg: 'Намери и премахни събития в бъдещето' @@ -6457,8 +6736,12 @@ function init() { } ,'This task find and remove treatments in the future.' : { cs: 'Tento úkol najde a odstraní ošetření v budoucnosti.' + ,he: 'משימה זו למצוא ולהסיר טיפולים בעתיד' ,nb: 'Finn og fjern fremtidige behandlinger' ,de: 'Finde und entferne Behandlungen in der Zukunft.' + ,es: 'Este comando encuentra y elimina tratamientos futuros.' + ,fr: 'Cette tâche cherche et efface les éléments dont la date est dans le futur' + ,dk: 'Denne handling finder og fjerner fremtidige behandlinger.' ,el: 'Αυτή η ενέργεια αφαιρεί μελλοντικές ενέργειες από τη βάση δεδομένων' ,ro: 'Acest instrument curăță tratamentele din viitor.' ,sv: 'Denna uppgift hittar och rensar framtida händelser' @@ -6476,8 +6759,12 @@ function init() { } ,'Remove treatments in the future' : { cs: 'Odstraň ošetření v budoucnosti' + ,he: 'הסר טיפולים בעתיד' ,nb: 'Fjern fremtidige behandlinger' ,de: 'Entferne Behandlungen in der Zukunft' + ,es: 'Elimina tratamientos futuros' + ,fr: 'Efface les traitements ayant un date dans le futur' + ,dk: 'Fjern behandlinger i fremtiden' ,el: 'Αφαίρεση μελλοντικών ενεργειών' ,ro: 'Șterge tratamentele din viitor' ,sv: 'Ta bort framtida händelser' @@ -6495,7 +6782,11 @@ function init() { } ,'Find and remove entries in the future' : { cs: 'Najít a odstranit CGM data v budoucnosti' + ,he: 'מצא והסר רשומות בעתיד' ,de: 'Finde und entferne Einträge in der Zukunft' + ,es: 'Encuentra y elimina entradas futuras' + ,fr: 'Cherche et efface les événements dans le futur' + ,dk: 'Find og fjern indgange i fremtiden' ,nb: 'Finn og fjern fremtidige hendelser' ,el: 'Εύρεση και αφαίρεση μελλοντικών εγγραφών από τη βάση δεδομένων' ,bg: 'Намери и премахни данни от сензора в бъдещето' @@ -6514,9 +6805,13 @@ function init() { } ,'This task find and remove CGM data in the future created by uploader with wrong date/time.' : { cs: 'Tento úkol najde a odstraní CGM data v budoucnosti vzniklé špatně nastaveným datem v uploaderu.' + ,he: 'משימה זו מוצאת נתונים של סנסור סוכר ומסירה אותם בעתיד, שנוצרו על ידי העלאת נתונים עם תאריך / שעה שגויים' ,nb: 'Finn og fjern fremtidige cgm data lastet opp med feil dato/tid' + ,fr: 'Cet outil cherche et efface les valeurs CGM dont la date est dans le futur' ,el: 'Αυτή η ενέργεια αφαιρεί δεδομένα αιθητήρα τα οποία εισήχθησαν με λάθος ημερομηνία και ώρα, από τη βάση δεδομένων' - ,de: 'Finde und entferne CGM Daten in der Zukunft, die vom Uploader mit falschem Datum/Uhrzeit erstellt wurden.' + ,de: 'Finde und entferne CGM-Daten in der Zukunft, die vom Uploader mit falschem Datum/Uhrzeit erstellt wurden.' + ,es: 'Este comando encuentra y elimina datos del sensor futuros creados por actualizaciones con errores en fecha/hora' + ,dk: 'Denne handling finder og fjerner CGM data i fremtiden forårsaget af indlæsning med forkert dato/tid.' ,bg: 'Тази опция ще намери и премахне данни от сензора в бъдещето, създадени поради грешна дата/време.' ,ro: 'Instrument de căutare și eliminare a datelor din viitor, create de uploader cu ora setată greșit' ,sv: 'Denna uppgift hittar och tar bort framtida CGM-data skapad vid felaktig tidsinställning' @@ -6533,8 +6828,12 @@ function init() { } ,'Remove entries in the future' : { cs: 'Odstraň CGM data v budoucnosti' + ,he: 'הסר רשומות בעתיד' ,nb: 'Fjern fremtidige hendelser' ,de: 'Entferne Einträge in der Zukunft' + ,es: 'Elimina entradas futuras' + ,fr: 'Efface les événement dans le futur' + ,dk: 'Fjern indgange i fremtiden' ,el: 'Αφαίρεση μελλοντικών ενεργειών' ,bg: 'Премахни данните от сензора в бъдещето' ,ro: 'Elimină înregistrările din viitor' @@ -6552,8 +6851,12 @@ function init() { } ,'Loading database ...' : { cs: 'Nahrávám databázi ...' + ,he: 'טוען מסד נתונים ... ' ,nb: 'Leser database ...' - ,de: 'Lade Datenbank' + ,de: 'Lade Datenbank ...' + ,es: 'Cargando base de datos ...' + ,fr: 'Charge la base de données...' + ,dk: 'Indlæser database ...' ,el: 'Φόρτωση Βάσης Δεδομένων' ,bg: 'Зареждане на базата с данни ...' ,ro: 'Încarc baza de date' @@ -6571,11 +6874,15 @@ function init() { } ,'Database contains %1 future records' : { cs: 'Databáze obsahuje %1 záznamů v budoucnosti' + ,he: ' מסד הנתונים מכיל% 1 רשומות עתידיות ' ,nb: 'Databasen inneholder %1 fremtidige hendelser' + ,fr: 'La base de données contient %1 valeurs futures' ,el: 'Η Βάση Δεδομένων περιέχει 1% μελλοντικές εγγραφές' ,ro: 'Baza de date conține %1 înregistrări din viitor' ,sv: 'Databas innehåller %1 framtida händelser' ,de: 'Datenbank enthält %1 zukünftige Einträge' + ,es: 'Base de datos contiene %1 registros futuros' + ,dk: 'Databasen indeholder %1 fremtidige indgange' ,bg: 'Базата с дани съдържа %1 бъдещи записи' ,it: 'Contiene Database %1 record futuri' ,fi: 'Tietokanta sisältää %1 merkintää tulevaisuudessa' @@ -6590,9 +6897,13 @@ function init() { } ,'Remove %1 selected records?' : { cs: 'Odstranit %1 vybraných záznamů' + ,he: 'האם להסיר% 1 רשומות שנבחרו? ' ,nb: 'Fjern %1 valgte elementer?' + ,fr: 'Effacer %1 valeurs choisies?' ,el: 'Αφαίρεση των επιλεγμένων εγγραφών?' ,de: 'Lösche ausgewählten %1 Eintrag?' + ,es: 'Eliminar %1 registros seleccionados?' + ,dk: 'Fjern %1 valgte indgange?' ,ro: 'Șterg %1 înregistrări selectate?' ,sv: 'Ta bort %1 valda händelser' ,bg: 'Премахване на %1 от избраните записи?' @@ -6609,8 +6920,12 @@ function init() { } ,'Error loading database' : { cs: 'Chyba při nahrávání databáze' + ,he: 'שגיאה בטעינת מסד הנתונים ' ,nb: 'Feil udner lasting av database' + ,fr: 'Erreur chargement de la base de données' ,de: 'Fehler beim Laden der Datenbank' + ,es: 'Error al cargar base de datos' + ,dk: 'Fejl ved indlæsning af database' ,el: 'Σφάλμα στη φόρτωση της βάσης δεδομένων' ,ro: 'Eroare la încărcarea bazei de date' ,sv: 'Fel vid laddning av databas' @@ -6628,8 +6943,12 @@ function init() { } ,'Record %1 removed ...' : { cs: 'Záznam %1 odstraněn ...' + ,he: 'רשומה% 1 הוסרה ... ' ,nb: 'Element %1 fjernet' ,de: 'Eintrag %1 entfernt' + ,es: 'Registro %1 eliminado ...' + ,fr: 'Événement %1 effacé' + ,dk: 'Indgang %1 fjernet ...' ,el: 'Οι εγγραφές αφαιρέθηκαν' ,ro: 'Înregistrarea %1 a fost ștearsă...' ,sv: 'Händelse %1 borttagen ...' @@ -6647,8 +6966,12 @@ function init() { } ,'Error removing record %1' : { cs: 'Chyba při odstaňování záznamu %1' + ,he: 'שגיאה בהסרת הרשומה% 1 ' ,nb: 'Feil under fjerning av element %1' ,de: 'Fehler beim Entfernen des Eintrags %1' + ,es: 'Error al eliminar registro %1' + ,fr: 'Echec d\'effacement de l\'événement %1' + ,dk: 'Fejl ved fjernelse af indgang %1' ,el: 'Σφάλμα αφαίρεσης εγγραφών' ,ro: 'Eroare la ștergerea înregistrării %1' ,sv: 'Fel vid borttagning av %1' @@ -6666,10 +6989,14 @@ function init() { } ,'Deleting records ...' : { cs: 'Odstraňování záznamů ...' + ,he: 'מוחק רשומות ... ' ,nb: 'Fjerner elementer...' + ,fr: 'Effacement d\événements...' ,ro: 'Se șterg înregistrările...' ,el: 'Αφαίρεση Εγγραφών' ,de: 'Entferne Einträge ...' + ,es: 'Eliminando registros ...' + ,dk: 'Sletter indgange ...' ,sv: 'Tar bort händelser ...' ,bg: 'Изтриване на записите...' ,it: 'Elimino dei record ...' @@ -6685,10 +7012,14 @@ function init() { } ,'Clean Mongo status database' : { cs: 'Vyčištění Mongo databáze statusů' + ,he: 'נקי מסד הנתונים מצב מונגו ' ,nb: 'Slett Mongo status database' ,ro: 'Curăță tabela despre status din Mongo' ,el: 'Καθαρισμός βάσης δεδομένων Mongo' + ,fr: 'Nettoyage de la base de donées Mongo' ,de: 'Bereinige Mongo Status-Datenbank' + ,es: 'Limpiar estado de la base de datos Mongo' + ,dk: 'Slet Mongo status database' ,sv: 'Rensa Mongo status databas' ,bg: 'Изчисти статуса на Монго базата с данни' ,it: 'Pulisci database di Mongo' @@ -6703,8 +7034,12 @@ function init() { } ,'Delete all documents from devicestatus collection' : { cs: 'Odstranění všech záznamů z kolekce devicestatus' + ,he: 'מחק את כל המסמכים מאוסף סטטוס המכשיר ' ,nb: 'Fjern alle dokumenter fra device status tabell' ,de: 'Lösche alle Dokumente der Gerätestatus-Sammlung' + ,es: 'Borrar todos los documentos desde colección devicesatatus' + ,fr: 'Effacer tous les documents de la collection devicestatus' + ,dk: 'Fjerne alle dokumenter fra device status tabellen' ,el: 'Διαγραφή όλων των δεδομένων σχετικών με κατάσταση της συσκευής ανάγνωσης του αισθητήρα' ,ro: 'Șterge toate documentele din colecția de status dispozitiv' ,sv: 'Ta bort alla dokument i devicestatus collektionen' @@ -6722,8 +7057,11 @@ function init() { ,'This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.' : { cs: 'Tento úkol odstraní všechny dokumenty z kolekce devicestatus. Je to vhodné udělat, pokud se ukazatel stavu baterie neobnovuje správně.' ,nb: 'Denne funksjonen fjerner alle dokumenter fra device status tabellen. Nyttig når status for opplaster batteri ikke blir opppdatert' + ,fr: 'Efface tous les documents de la collection devicestatus. Utile lorsque l\'indicateur de chargement de la batterie du Smartphone n\'est pas affichée correctement' ,el: 'Αυτή η ενέργεια διαγράφει όλα τα δεδομένα της κατάστασης της συσκευής ανάγνωσης. Χρήσιμη όταν η κατάσταση της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.' ,de: 'Diese Aufgabe entfernt alle Dokumente aus der Gerätestatus-Sammlung. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.' + ,es: 'Este comando elimina todos los documentos desde la colección devicestatus. Útil cuando el estado de la batería cargadora no se actualiza correctamente' + ,dk: 'Denne handling fjerner alle dokumenter fra device status tabellen. Brugbart når uploader betteri status ikke er korrekt opdateret.' ,ro: 'Acest instrument șterge toate documentele din colecția devicestatus. Se folosește când încărcarea bateriei nu se afișează corect.' ,sv: 'Denna uppgift tar bort alla dokument från devicestatuskollektionen. Användbart när batteristatus ej uppdateras' ,bg: 'Тази опция премахва всички документи от папката статус-устройство. Полезно е, когато статусът на батерията не се обновява.' @@ -6739,10 +7077,14 @@ function init() { } ,'Delete all documents' : { cs: 'Odstranit všechny dokumenty' + ,he: 'מחק את כל המסמכים ' + ,fr: 'Effacer toutes les données' ,nb: 'Fjern alle dokumenter' ,ro: 'Șterge toate documentele' ,el: 'Διαγραφή όλων των δεδομένων' ,de: 'Lösche alle Dokumente' + ,es: 'Borra todos los documentos' + ,dk: 'Slet alle dokumenter' ,sv: 'Ta bort alla dokument' ,bg: 'Изтрий всички документи' ,it: 'Eliminare tutti i documenti' @@ -6757,9 +7099,13 @@ function init() { } ,'Delete all documents from devicestatus collection devicestatus?' : { cs: 'Odstranit všechny dokumenty z kolekce devicestatus?' + ,he: 'מחק את כל המסמכים מרשימת סטטוס ההתקנים ' ,nb: 'Fjern alle dokumenter fra device status tabellen?' + ,fr: 'Effacer toutes les données de la collection devicestatus ?' ,el: 'Διαγραφή όλων των δεδομένων της κατάστασης της συσκευής ανάγνωσης?' ,de: 'Löschen aller Dokumente der Gerätestatus-Sammlung?' + ,es: 'Borrar todos los documentos desde la colección devicestatus?' + ,dk: 'Fjern alle dokumenter fra device status tabellen' ,ro: 'Șterg toate documentele din colecția devicestatus?' ,sv: 'Ta bort alla dokument från devicestatuscollektionen' ,bg: 'Изтриване на всички документи от папката статус-устройство?' @@ -6775,8 +7121,12 @@ function init() { } ,'Database contains %1 records' : { cs: 'Databáze obsahuje %1 záznamů' + ,he: 'מסד נתונים מכיל %1 רשומות ' ,nb: 'Databasen inneholder %1 elementer' ,de: 'Datenbank enthält %1 Einträge' + ,es: 'La Base de datos contiene %1 registros' + ,fr: 'La base de donées contient %1 événements' + ,dk: 'Databasen indeholder %1 indgange' ,el: 'Η βάση δεδομένων περιέχει 1% εγγραφές' ,ro: 'Baza de date conține %1 înregistrări' ,sv: 'Databasen innehåller %1 händelser' @@ -6793,8 +7143,12 @@ function init() { } ,'All records removed ...' : { cs: 'Všechny záznamy odstraněny ...' + ,he: 'כל הרשומות נמחקו ' ,nb: 'Alle elementer fjernet ...' ,de: 'Alle Einträge entfernt...' + ,es: 'Todos los registros eliminados ...' + ,fr: 'Toutes les valeurs ont été effacées' + ,dk: 'Alle indgange fjernet ...' ,el: 'Έγινε διαγραφή όλων των δεδομένων' ,ro: 'Toate înregistrările au fost șterse.' ,sv: 'Alla händelser raderade ...' @@ -6811,9 +7165,13 @@ function init() { } ,'Admin Tools' : { cs: 'Nástroje pro správu' + ,he: 'כלי אדמיניסטרציה ' ,nb: 'Administrasjonsoppgaver' ,ro: 'Instrumente de administrare' - ,de: 'Administrator Werkzeuge' + ,de: 'Administrator-Werkzeuge' + ,es: 'Herramientas Administrativas' + ,fr: 'Outils d\'administration' + ,dl: 'Administrator opgaver' ,el: 'Εργαλεία Διαχειριστή' ,sv: 'Adminverktyg' ,bg: 'Настройки на администратора' @@ -6830,10 +7188,14 @@ function init() { } ,'Nightscout reporting' : { cs: 'Nightscout - Výkazy' + ,he: 'דוחות נייססקאוט' ,nb: 'Nightscout - rapporter' ,ro: 'Rapoarte Nightscout' + ,fr: 'Rapports Nightscout' ,el: 'Αναφορές' ,de: 'Nightscout-Berichte' + ,es: 'Informes - Nightscout' + ,dk: 'Nightscout - rapporter' ,sv: 'Nightscout - Statistik' ,bg: 'Найтскаут статистика' ,it: 'Nightscout - Statistiche' @@ -6848,7 +7210,11 @@ function init() { } ,'Cancel' : { cs: 'Zrušit' + ,he: 'בטל ' ,de: 'Abbruch' + ,es: 'Cancelar' + ,fr: 'Interrompre' + ,dk: 'Annuller' ,nb: 'Avbryt' ,el: 'Ακύρωση' ,ro: 'Renunță' @@ -6866,9 +7232,13 @@ function init() { } ,'Edit treatment' : { cs: 'Upravit ošetření' + ,he: 'ערוך טיפול ' ,nb: 'Editer behandling' ,ro: 'Modifică înregistrarea' ,de: 'Bearbeite Behandlung' + ,es: 'Editar tratamiento' + ,fr: 'Modifier un traitement' + ,dk: 'Rediger indgang' ,el: 'Επεξεργασία Εγγραφής' ,sv: 'Redigera behandling' ,bg: 'Редакция на събитие' @@ -6884,8 +7254,12 @@ function init() { } ,'Duration' : { cs: 'Doba trvání' + ,he: 'משך ' ,ro: 'Durata' ,de: 'Dauer' + ,es: 'Duración' + ,fr: 'Durée' + ,dk: 'Varighed' ,el: 'Διάρκεια' ,sv: 'Varaktighet' ,bg: 'Времетраене' @@ -6902,7 +7276,11 @@ function init() { } ,'Duration in minutes' : { cs: 'Doba trvání v minutách' + ,he: 'משך בדקות ' ,de: 'Dauer in Minuten' + ,es: 'Duración en minutos' + ,fr: 'Durée en minutes' + ,dk: 'Varighed i minutter' ,ro: 'Durata în minute' ,el: 'Διάρκεια σε λεπτά' ,sv: 'Varaktighet i minuter' @@ -6920,7 +7298,11 @@ function init() { } ,'Temp Basal' : { cs: 'Dočasný bazál' + ,he: 'רמה בזלית זמנית' ,de: 'Temporäre Basalrate' + ,es: 'Tasa basal temporal' + ,fr: 'Débit basal temporaire' + ,dk: 'Midlertidig basal' ,ro: 'Bazală temporară' ,sv: 'Temporär basal' ,bg: 'Временен базал' @@ -6937,9 +7319,13 @@ function init() { } ,'Temp Basal Start' : { cs: 'Dočasný bazál začátek' + ,he: 'התחלת רמה בזלית זמנית ' ,ro: 'Start bazală temporară' ,sv: 'Temporär basalstart' ,de: 'Start Temporäre Basalrate' + ,es: 'Inicio Tasa Basal temporal' + ,fr: 'Début du débit basal temporaire' + ,dk: 'Midlertidig basal start' ,bg: 'Начало на временен базал' ,it: 'Inizio Basale Temp' ,nb: 'Midlertidig basal start' @@ -6954,11 +7340,15 @@ function init() { } ,'Temp Basal End' : { cs: 'Dočasný bazál konec' + ,he: 'סיום רמה בזלית זמנית' ,ro: 'Sfârșit bazală temporară' + ,fr: 'Fin du débit basal temporaire' ,sv: 'Temporär basalavslut' ,bg: 'Край на временен базал' ,it: 'Fine Basale Temp' ,de: 'Ende Temporäre Basalrate' + ,es: 'Fin Tasa Basal temporal' + ,dk: 'Midlertidig basal slut' ,nb: 'Midlertidig basal stopp' ,fi: 'Tilapäinen basaali loppu' ,pl: 'Koniec tymczasowej dawki podstawowej' @@ -6971,8 +7361,12 @@ function init() { } ,'Percent' : { // value in % for temp basal cs: 'Procenta' + ,he: 'אחוז ' ,ro: 'Procent' ,de: 'Prozent' + ,es: 'Porcentaje' + ,fr: 'Pourcent' + ,dk: 'Procent' ,el: 'Επι τοις εκατό' ,sv: 'Procent' ,bg: 'Процент' @@ -6989,10 +7383,14 @@ function init() { } ,'Basal change in %' : { cs: 'Změna bazálu v %' + ,he: 'שינוי קצב בזלי באחוזים ' ,ro: 'Bazală schimbată în %' + ,fr: 'Changement du débit basal en %' ,sv: 'Basaländring i %' ,bg: 'Промяна на базала с %' ,de: 'Basalratenänderung in %' + ,es: 'Basal modificado en %' + ,dk: 'Basal ændring i %' ,it: 'Variazione basale in %' ,nb: 'Basal endring i %' ,fi: 'Basaalimuutos prosenteissa' @@ -7006,9 +7404,13 @@ function init() { } ,'Basal value' : { // absolute value for temp basal cs: 'Hodnota bazálu' + ,he: 'ערך בזלי' ,ro: 'Valoare bazală' + ,fr: 'Valeur du débit basal' ,sv: 'Basalvärde' ,de: 'Basalrate' + ,es: 'Valor basal' + ,dk: 'Basalværdi' ,bg: 'Временен базал' ,it: 'Valore Basale' ,nb: 'Basalverdi' @@ -7023,9 +7425,13 @@ function init() { } ,'Absolute basal value' : { cs: 'Hodnota bazálu' + ,he: 'ערך בזלי מוחלט ' ,bg: 'Базална стойност' ,it: 'Valore Basale Assoluto' + ,fr: 'Débit basal absolu' ,de: 'Absoluter Basalratenwert' + ,es: 'Valor basal absoluto' + ,dk: 'Absolut basalværdi' ,nb: 'Absolutt basalverdi' ,ro: 'Valoare absolută bazală' ,sv: 'Absolut basalvärde' @@ -7042,13 +7448,16 @@ function init() { cs: 'Oznámení' ,bg: 'Известяване' ,de: 'Ankündigung' + ,es: 'Aviso' + ,fr: 'Annonce' + ,dk: 'Meddelelse' ,ro: 'Anunț' ,el: 'Ανακοίνωση' ,sv: 'Avisering' ,he: 'הודעה' ,it: 'Annuncio' ,nb: 'Kunngjøring' - ,fi: 'Tiedoite' + ,fi: 'Tiedote' ,pl: 'Powiadomienie' ,pt: 'Aviso' ,ru: 'Оповещение' @@ -7059,10 +7468,14 @@ function init() { } ,'Loading temp basal data' : { cs: 'Nahrávám dočasné bazály' + ,he: 'טוען ערך בזלי זמני ' ,it: 'Caricamento basale temp' + ,fr: 'Chargement des données de débit basal' ,ro: 'Se încarcă date bazală temporară' ,sv: 'Laddar temporär basaldata' ,de: 'Lade temporäre Basaldaten' + ,es: 'Cargando datos tasa basal temporal' + ,dk: 'Indlæser midlertidig basal data' ,nb: 'Laster verdier for midlertidig basal' ,fi: 'Lataan tilapäisten basaalien tietoja' ,bg: 'Зареждане на данни за временния базал' @@ -7076,11 +7489,15 @@ function init() { } ,'Save current record before changing to new?' : { cs: 'Uložit současný záznam před změnou na nový?' + ,he: 'שמור רשומה נוכחית לפני שעוברים לרשומה חדשה? ' ,ro: 'Salvez înregistrarea curentă înainte de a trece mai departe?' ,sv: 'Spara aktuell data innan skifte till ny?' + ,fr: 'Sauvegarder l\'événement actuel avant d\'avancer au suivant ?' ,nb: 'Lagre før bytte til ny?' ,el: 'Αποθήκευση τρεχουσας εγγραφής πριν δημιουργήσουμε νέα?' ,de: 'Aktuelle Einträge speichern?' + ,es: 'Grabar datos actuales antes de cambiar por nuevos?' + ,dk: 'Gem aktuelle indgang før der skiftes til ny?' ,fi: 'Tallenna nykyinen merkintä ennen vaihtoa uuteen?' ,bg: 'Запази текущият запис преди да промениш новия ' ,pl: 'Zapisać bieżący rekord przed zamianą na nowy?' @@ -7094,10 +7511,14 @@ function init() { } ,'Profile Switch' : { cs: 'Přepnutí profilu' + ,he: 'החלף פרופיל ' ,ro: 'Schimbă profilul' ,sv: 'Ny profil' + ,fr: 'Changement de profil' ,el: 'Εναλλαγή προφίλ' ,de: 'Profil wechseln' + ,es: 'Cambiar Perfil' + ,dk: 'Byt profil' ,nb: 'Bytt profil' ,fi: 'Vaihda profiilia' ,bg: 'Смяна на профил' @@ -7112,8 +7533,12 @@ function init() { } ,'Profile' : { cs: 'Profil' + ,he: 'פרופיל ' ,de: 'Profil' + ,es: 'Perfil' + ,dk: 'Profil' ,el: 'Προφίλ' + ,fr: 'Profil' ,it: 'Profilo' ,ro: 'Profil' ,sv: 'Profil' @@ -7130,7 +7555,11 @@ function init() { } ,'General profile settings' : { cs: 'Obecná nastavení profilu' + ,he: 'הגדרות פרופיל כלליות' ,de: 'Allgemeine Profileinstellungen' + ,es: 'Configuración perfil genérico' + ,fr: 'Réglages principaus du profil' + ,dk: 'Generelle profil indstillinger' ,el: 'Γενικές Ρυθμίσεις Προφίλ' ,ro: 'Setări generale profil' ,sv: 'Allmän profilinställning' @@ -7148,10 +7577,14 @@ function init() { } ,'Title' : { cs: 'Název' + ,he: 'כותרת ' ,ro: 'Titlu' ,sv: 'Titel' + ,fr: 'Titre' ,el: 'Τίτλος' ,de: 'Überschrift' + ,es: 'Titulo' + ,dk: 'Overskrift' ,nb: 'Tittel' ,fi: 'Otsikko' ,bg: 'Заглавие' @@ -7166,11 +7599,15 @@ function init() { } ,'Database records' : { cs: 'Záznamy v databázi' + ,he: 'רשומות ' ,ro: 'Înregistrări' + ,fr: 'Entrées de la base de données' ,sv: 'Databashändelser' ,el: 'Εγραφές Βάσης Δεδομένων' ,nb: 'Databaseverdier' ,de: 'Datenbankeinträge' + ,es: 'Registros grabados en base datos' + ,dk: 'Database indgange' ,fi: 'Tietokantamerkintöjä' ,bg: 'Записи в базата с данни' ,pl: 'Rekordy bazy danych' @@ -7184,11 +7621,15 @@ function init() { } ,'Add new record' : { cs: 'Přidat nový záznam' + ,he: 'הוסף רשומה חדשה ' ,ro: 'Adaugă înregistrare nouă' + ,fr: 'Ajouter une nouvelle entrée' ,sv: 'Lägg till ny händelse' ,el: 'Προσθήκη νέας εγγραφής' ,nb: 'Legg til ny rad' ,de: 'Neuen Eintrag hinzufügen' + ,es: 'Añadir nuevo registro' + ,dk: 'Tilføj ny indgang' ,fi: 'Lisää uusi merkintä' ,bg: 'Добави нов запис' ,pl: 'Dodaj nowy rekord' @@ -7202,11 +7643,15 @@ function init() { } ,'Remove this record' : { cs: 'Vymazat tento záznam' + ,he: 'מחק רשומה זו ' ,ro: 'Șterge această înregistrare' + ,fr: 'Supprimer cette entrée' ,sv: 'Ta bort denna händelse' ,el: 'Αφαίρεση εγγραφής' ,nb: 'Fjern denne raden' ,de: 'Diesen Eintrag löschen' + ,es: 'Eliminar este registro' + ,fk: 'Fjern denne indgang' ,fi: 'Poista tämä merkintä' ,bg: 'Премахни този запис' ,pl: 'Usuń ten rekord' @@ -7220,11 +7665,15 @@ function init() { } ,'Clone this record to new' : { cs: 'Zkopíruj tento záznam do nového' + ,he: 'שכפל רשומה זו לרשומה חדשה ' ,ro: 'Duplică această înregistrare' + ,fr: 'Dupliquer cette entrée' ,el: 'Αντιγραφή σε νέα' ,sv: 'Kopiera denna händelse till ny' + ,es: 'Duplicar este registro como nuevo' ,nb: 'Kopier til ny rad' ,de: 'Diesen Eintrag duplizieren' + ,dk: 'Dupliker denne indgang' ,fi: 'Kopioi tämä merkintä uudeksi' ,bg: 'Копирай този запис като нов' ,pl: 'Powiel ten rekord na nowy' @@ -7238,10 +7687,14 @@ function init() { } ,'Record valid from' : { cs: 'Záznam platný od' + ,he: 'רשומה תקפה מ ' ,ro: 'Înregistare validă de la' + ,fr: 'Entrée valide à partir de' ,sv: 'Händelse giltig från' ,el: 'Ισχύει από' ,de: 'Eintrag gültig ab' + ,es: 'Registro válido desde' + ,dk: 'Indgang gyldig fra' ,nb: 'Rad gyldig fra' ,fi: 'Merkintä voimassa alkaen' ,bg: 'Записът е валиден от ' @@ -7256,10 +7709,14 @@ function init() { } ,'Stored profiles' : { cs: 'Uložené profily' + ,he: 'פרופילים מאוכסנים ' + ,fr: 'Profils sauvegardés' ,ro: 'Profile salvate' ,sv: 'Lagrad profil' ,el: 'Αποθηκευμένα προφίλ' ,de: 'Gesicherte Profile' + ,es: 'Perfiles guardados' + ,dk: 'Gemte profiler' ,nb: 'Lagrede profiler' ,fi: 'Tallennetut profiilit' ,bg: 'Запаметени профили' @@ -7274,7 +7731,11 @@ function init() { } ,'Timezone' : { cs: 'Časová zóna' + ,he: 'אזור זמן ' ,de: 'Zeitzone' + ,es: 'Zona horaria' + ,fr: 'Zone horaire' + ,dk: 'Tidszone' ,ro: 'Fus orar' ,el: 'Ζώνη Ώρας' ,sv: 'Tidszon' @@ -7292,11 +7753,15 @@ function init() { } ,'Duration of Insulin Activity (DIA)' : { cs: 'Doba působnosti inzulínu (DIA)' + ,he: 'משך פעילות האינסולין ' ,ro: 'Durata de acțiune a insulinei' + ,fr: 'Durée d\'action de l\'insuline' ,el: 'Διάρκεια Δράσης Ινσουλίνης(DIA)' - ,sv: 'verkningstid för insulin (DIA)' + ,sv: 'Verkningstid för insulin (DIA)' ,nb: 'Insulin varighet' ,de: 'Dauer der Insulinaktivität (DIA)' + ,es: 'Duración Insulina Activa (DIA)' + ,dk: 'Varighed af insulin aktivitet (DIA)' ,fi: 'Insuliinin vaikutusaika (DIA)' ,bg: 'Продължителност на инсулиновата активност DIA' ,pl: 'Czas trwania aktywnej insuliny (DIA)' @@ -7310,9 +7775,13 @@ function init() { } ,'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.' : { cs: 'Představuje typickou dobu, po kterou inzulín působí. Bývá různá podle pacienta a inzulínu. Typicky 3-4 hodiny pro pacienty s pumpou.' + ,he: 'מייצג את משך הטיפוסי שבו האינסולין נכנס לתוקף. משתנה לכל חולה וסוג האינסולין. בדרך כלל 3-4 שעות עבור רוב אינסולין שאיבה רוב המטופלים. לפעמים נקרא גם אורך חיי אינסולין. ' ,ro: 'Reprezintă durata tipică pentru care insulina are efect. Este diferită la fiecare pacient și pentru fiecare tip de insulină' ,el: 'Αντιπροσωπευει την τυπική διάρκεια δράσης της χορηγηθείσας ινσουλίνης.' - ,de: 'Entspricht der typischen Dauer in der das Insulin wirkt. Variiert je Patient und Insulintyp. Häufig 3-4 Stunden für die meisten Pumpeninsuline und die meisten Patienten. Manchmal auch Insulin-Wirkungsdauer genannt.' + ,es: 'Representa la duración típica durante la cual la insulina tiene efecto. Varía por paciente y por tipo de insulina. Típicamente 3-4 horas para la mayoría de la insulina bombeada y la mayoría de los pacientes. A veces también se llama insulina de por vida ' + ,fr: 'Représente la durée d\'action typique de l\'insuline. Varie individuellement et selon le type d\'insuline. Typiquement 3-4 heures pour les insulines utilisées dans les pompes.' + ,de: 'Entspricht der typischen Dauer in der das Insulin wirkt. Variiert je nach Patient und Insulintyp. Häufig 3-4 Stunden für die meisten Pumpeninsuline und die meisten Patienten. Manchmal auch Insulin-Wirkungsdauer genannt.' + ,dk: 'Representerer den typiske tid hvor insulinen virker. Varierer per patient og per insulin type. Typisk 3-4 timer for de fleste pumpe insulin og for de fleste patienter. Nogle gange kaldes dette også insulin-livs-tid.' ,sv: 'Beskriver under hur lång tid insulinet verkar. Varierar mellan patienter. Typisk varaktighet 3-4 timmar.' ,nb: 'Representerer typisk insulinvarighet. Varierer per pasient og per insulin type. Vanligvis 3-4 timer for de fleste typer insulin og de fleste pasientene. Noen ganger også kalt insulinlevetid.' ,fi: 'Kertoo insuliinin tyypillisen vaikutusajan. Vaihtelee potilaan ja insuliinin tyypin mukaan. Tyypillisesti 3-4 tuntia pumpuissa käytettävällä insuliinilla.' @@ -7328,11 +7797,15 @@ function init() { } ,'Insulin to carb ratio (I:C)' : { cs: 'Inzulíno-sacharidový poměr (I:C).' + ,he: 'יחס אינסולין פחמימות ' ,ro: 'Rată insulină la carbohidrați (ICR)' ,sv: 'Insulin-Kolhydratskvot' + ,fr: 'Rapport Insuline-Glucides (I:C)' ,el: 'Αναλογία Ινσουλίνης/Υδατάνθρακα (I:C)' ,nb: 'IKH forhold' ,de: 'Insulin/Kohlenhydrate-Verhältnis (I:KH)' + ,es: 'Relación Insulina/Carbohidratos (I:C)' + ,dk: 'Insulin til kulhydrat forhold (I:C)' ,fi: 'Insuliiniannoksen hiilihydraattisuhde (I:HH)' ,bg: 'Съотношение инсулин/въглехидратите ICR I:C И:ВХ' ,pl: 'Współczynnik insulina/węglowodany (I:C)' @@ -7346,9 +7819,13 @@ function init() { } ,'hours' : { cs: 'hodin' + ,he: 'שעות ' ,ro: 'ore' ,el: 'ώρες' + ,fr: 'heures' ,de: 'Stunden' + ,es: 'horas' + ,dk: 'timer' ,sv: 'timmar' ,nb: 'timer' ,fi: 'tuntia' @@ -7364,10 +7841,14 @@ function init() { } ,'g/hour' : { cs: 'g/hod' + ,he: 'גרם לשעה ' ,ro: 'g/oră' + ,fr: 'g/heure' ,sv: 'g/timme' ,nb: 'g/t' ,de: 'g/Std' + ,es: 'gr/hora' + ,dk: 'g/time' ,fi: 'g/tunti' ,bg: 'гр/час' ,pl: 'g/godzine' @@ -7381,9 +7862,12 @@ function init() { } ,'g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.' : { cs: 'gramy na jednotku inzulínu. Poměr, jaké množství sacharidů pokryje jednotku inzulínu.' + ,he: 'היחס בין כמה גרם של פחמימות מקוזז על ידי כל יחידת אינסולין ' ,ro: 'g carbohidrați pentru o unitate de insulină. Câte grame de carbohidrați sunt acoperite de 1U insulină.' + ,fr: 'g de glucides par Uninté d\'insuline. Le rapport représentant la quantité de glucides compensée par une unité d\'insuline.' ,el: 'Γραμμάρια (g) υδατάνθρακα ανά μονάδα (U) ινσουλίνης. Πόσα γραμμάρια υδατάνθρακα αντιστοιχούν σε μία μονάδα ινσουλίνης' ,sv: 'gram kolhydrater per enhet insulin. Antal gram kolhydrater varje enhet insulin sänker' + ,es: 'gr. de carbohidratos por unidad de insulina. La proporción de cuántos gramos de carbohidratos se consumen por unidad de insulina.' ,de: 'g Kohlenhydrate pro Einheit Insulin. Das Verhältnis wie viele Gramm Kohlenhydrate je Einheit Insulin verbraucht werden.' ,nb: 'g karbohydrater per enhet insulin. Beskriver hvor mange gram karbohydrater som hånderes av en enhet insulin.' ,fi: 'g hiilihydraattia / yksikkö insuliinia. Suhde, joka kertoo montako grammaa hiilihydraattia vastaa yhtä yksikköä insuliinia.' @@ -7399,8 +7883,11 @@ function init() { } ,'Insulin Sensitivity Factor (ISF)' : { cs: 'Citlivost inzulínu (ISF)' + ,he: 'גורם רגישות לאינסולין ' ,ro: 'Factor de sensilibtate la insulină (ISF)' ,de: 'Insulinsensibilitätsfaktor (ISF)' + ,es: 'Factor Sensibilidad a la Insulina (ISF)' + ,fr: 'Facteur de sensibilité à l\'insuline (ISF)' ,el: 'Ευαισθησία στην Ινοσυλίνη (ISF)' ,sv: 'Insulinkänslighetsfaktor (ISF)' ,nb: 'Insulinfølsomhetsfaktor' @@ -7417,9 +7904,12 @@ function init() { } ,'mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.' : { cs: 'mg/dL nebo mmol/L na jednotku inzulínu. Poměr, jak se změní glykémie po podaní jednotky inzulínu' + ,he: 'כמה סוכר בדם משתנה עם כל יחידת אינסולין ' ,ro: 'mg/dL sau mmol/L pentru 1U insulină. Cât de mult influențează glicemia o corecție de o unitate de insulină.' + ,fr: 'mg/dL ou mmol/l par unité d\'insuline. Le rapport représentant la modification de la glycémie résultant de l\'administration d\'une unité d\'insuline.' ,el: 'mg/dl ή mmol/L ανά μονάδα U ινσουλίνης. Το πόσες μονάδες ρίχνει τη γλυκόζη αίματος μία μονάδα U ινσουλίνης' ,de: 'mg/dL oder mmol/L pro Einheit Insulin. Verhältnis von BG-Veränderung je Einheit Korrekturinsulin.' + ,es: 'mg/dl o mmol/L por unidad Insulina. La relación de la caída de glucosa y cada unidad de insulina de corrección administrada.' ,sv: 'mg/dl eller mmol per enhet insulin. Hur varje enhet insulin sänker blodsockret' ,nb: 'mg/dl eller mmol/l per enhet insulin. Beskriver hvor mye blodsukkeret senkes per enhet insulin.' ,fi: 'mg/dL tai mmol/L / 1 yksikkö insuliinia. Suhde, joka kertoo montako yksikköä verensokeria yksi yksikkö insuliinia laskee.' @@ -7435,9 +7925,12 @@ function init() { } ,'Carbs activity / absorption rate' : { cs: 'Rychlost absorbce sacharidů' + ,he: 'פעילות פחמימות / קצב קליטה ' ,ro: 'Rata de absorbție' ,el: 'Ρυθμός απορρόφησης υδατανθράκων' + ,fr: 'Activité glucidique / vitesse d\'absorption' ,de: 'Kohlenhydrataktivität / Aufnahme Kohlenhydrate' + ,es: 'Actividad de carbohidratos / tasa de absorción' ,sv: 'Kolhydratstid' ,nb: 'Karbohydrattid' ,fi: 'Hiilihydraattiaktiivisuus / imeytymisnopeus' @@ -7451,12 +7944,15 @@ function init() { ,it: 'Attività carboidrati / Velocità di assorbimento' ,zh_cn: '碳水化合物活性/吸收率' } - ,'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 peUr 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).' : { cs: 'gramy za jednotku času. Reprezentuje jak změnu COB za jednoku času, tak množství sacharidů, které se za tu dobu projevily. Křivka absorbce sacharidů je mnohem méně pochopitelná než IOB, ale může být aproximována počáteční pauzou následovanou konstantní hodnotou absorbce (g/hod).' + ,he: 'גרם ליחידת זמן. מייצג הן את השינוי בפחמימות ליחידת זמן והן את כמות הפחמימות אשר אמורות להיכנס לתוקף במהלך אותה תקופה. ספיגת הפחמימות / פעילות הם פחות מובן מאשר פעילות האינסולין, אך ניתן להתקרב באמצעות עיכוב ראשוני ואחריו שיעור קבוע של קליטה (g / hr) ' ,el: 'Γραμμάρια ανά μονάδα χρόνου. Αναπαριστά τόσο την μεταβολή του COB στη μονάδα του χρόνου. Οι καμπύλες της απορρόφησης υδατανθράκων και της άσκησης δεν έχουν κατανοηθεί πλήρως από την επιστημονική κοινότητα, αλλά μπορούν να προσεγγιστούν βάζοντας μία αρχική καθυστέρηση ακολουθούμενη από έναν σταθερό ρυθμό απορρόφησης (g/hr).' + ,fr: 'grammes par unité de temps. Représente l\'augmentation de COB par unité de temps et la quantité de glucides agissant durant cette période. L\'absorption des glucides est imprécise et est évaluée en moyenne. L\'unité est grammes par heure (g/h).' ,ro: 'grame pe unitatea de timp. Reprezintă atât schimbarea COB pe unitatea de timp, cât și cantitatea de carbohidrați care ar influența în perioada de timp. Graficele ratei de absorbție sunt mai puțin înțelese decât senzitivitatea la insulină, dar se poate aproxima folosind o întârziere implicită și apoi o rată constantă de aborbție (g/h).' ,sv: 'gram per tidsenhet. Representerar både ändring i aktiva kolhydrater per tidsenhet som mängden kolhydrater som tas upp under denna tid. Kolhydratsupptag / aktivitetskurvor är svårare att förutspå än aktivt insulin men kan beräknas genom att använda en startfördröjning följd av en konstant absorbtionsgrad (g/timme) ' ,de: 'Gramm pro Zeiteinheit. Bedeutet sowohl die Änderung in COB je Zeiteinheit, als auch die Menge an Kohlenhydraten die über diese Zeit wirken sollten. Kohlenhydrat-Absorption / Aktivitätskurven werden weniger genau verstanden als Insulinaktivität, aber sie können angenähert werden indem eine Anfangsverzögerung mit konstanter Aufnahme (g/Std.) verwendet wird.' + ,es: 'gramos por unidad de tiempo. Representa tanto el cambio en carbohidratos activos por unidad de tiempo como la cantidad de carbohidratos absorbidos durante este tiempo. Las curvas de captación / actividad de carbohidratos son más difíciles de predecir que la insulina activa, pero se pueden calcular utilizando un retraso de inicio seguido de una tasa de absorción constante (gr/h)' ,nb: 'gram per tidsenhet. Representerer både endringen i COB per tidsenhet, såvel som mengden av karbohydrater som blir tatt opp i løpet av den tiden. Carb absorpsjon / virkningskurver er mindre forstått enn insulinaktivitet, men kan tilnærmes ved hjelp av en forsinkelse fulgt av en konstant hastighet av absorpsjon ( g / time ) .' ,fi: 'grammaa / aika. Kertoo tyypillisen nopeuden, jolla hiilihydraatit imeytyvät syömisen jälkeen. Imeytyminen tunnetaan jokseenkin huonosti, mutta voidaan arvioida keskimääräisesti. Yksikkönä grammaa tunnissa (g/h).' ,bg: 'грам за единица време. Представлява както промяната в COB за единица време, така и количеството ВХ които биха се усвоили за това време.' @@ -7471,9 +7967,13 @@ function init() { } ,'Basal rates [unit/hour]' : { cs: 'Bazály [U/hod].' + ,he: 'קצב בסיסי (יחידה לשעה) ' ,ro: 'Rata bazală [unitate/oră]' ,el: 'Ρυθμός Βασικ΄ς ινσουλίνης [U/hour]' ,de: 'Basalraten [Einheit/h]' + ,dk: 'Basal [enhed/t]' + ,es: 'Tasas basales [Unidad/hora]' + ,fr: 'Débit basal (Unités/ heure)' ,sv: 'Basal [enhet/t]' ,nb: 'Basal [enhet/t]' ,fi: 'Basaali [yksikköä/tunti]' @@ -7489,9 +7989,13 @@ function init() { } ,'Target BG range [mg/dL,mmol/L]' : { cs: 'Cílový rozsah glykémií [mg/dL,mmol/L]' + ,he: 'יעד טווח גלוקוז בדם ' ,ro: 'Intervalul țintă al glicemiei [mg/dL, mmol/L]' ,el: 'Στόχος Γλυκόζης Αίματος [mg/dl , mmol/l]' ,de: 'Blutzucker-Zielbereich [mg/dL, mmol/L]' + ,dk: 'Ønskbart blodsukkerinterval [mg/dl,mmol]' + ,es: 'Intervalo glucemia dentro del objetivo [mg/dL,mmol/L]' + ,fr: 'Cible d\'intervalle de glycémie' ,sv: 'Önskvärt blodsockerintervall [mg/dl,mmol]' ,nb: 'Ønsket blodsukkerintervall [mg/dl,mmmol/l]' ,fi: 'Tavoitealue [mg/dL tai mmol/L]' @@ -7507,10 +8011,14 @@ function init() { } ,'Start of record validity' : { cs: 'Začátek platnosti záznamu' + ,he: 'תחילת תוקף הרשומה ' ,ro: 'De când este valabilă înregistrarea' + ,fr: 'Début de validité des données' ,el: 'Ισχύει από' ,sv: 'Starttid för händelse' ,de: 'Beginn der Aufzeichnungsgültigkeit' + ,dk: 'Starttid for hændelse' + ,es: 'Inicio de validez de datos' ,nb: 'Starttidspunkt for gyldighet' ,fi: 'Merkinnän alkupäivämäärä' ,bg: 'Начало на записа' @@ -7525,8 +8033,12 @@ function init() { } ,'Icicle' : { cs: 'Rampouch' + ,he: 'קרחון ' ,it: 'Inverso' + ,fr: 'Stalactite' ,de: 'Eiszapfen' + ,dk: 'Istap' + ,es: 'Inverso' ,ro: 'Țurțure' ,sv: 'Istapp' ,nb: 'Isfjell' @@ -7534,6 +8046,7 @@ function init() { ,bg: 'Висящ' ,pl: 'Odwrotność' ,pt: 'Inverso' + ,nl: 'Ijspegel' ,ru: 'Силуэт сосульки' ,sk: 'Inverzne' ,ko: '고드름 방향' @@ -7542,11 +8055,15 @@ function init() { } ,'Render Basal' : { cs: 'Zobrazení bazálu' + ,he: 'הראה רמה בזלית ' ,it: 'Grafico Basale' + ,fr: 'Afficher le débit basal' ,el: 'Απεικόνιση Βασικής Ινσουλίνης' ,ro: 'Afișează bazala' ,sv: 'Generera Basal' ,de: 'Basalraten-Darstellung' + ,dk: 'Generer Basal' + ,es: 'Representación Basal' ,nb: 'Basalgraf' ,fi: 'Näytä basaali' ,bg: 'Базал' @@ -7561,8 +8078,12 @@ function init() { } ,'Profile used' : { cs: 'Použitý profil' + ,he: 'פרופיל בשימוש ' ,ro: 'Profil folosit' ,de: 'Verwendetes Profil' + ,dk: 'Profil brugt' + ,es: 'Perfil utilizado' + ,fr: 'Profil utilisé' ,el: 'Προφίλ σε χρήση' ,sv: 'Vald profil' ,nb: 'Brukt profil' @@ -7579,9 +8100,13 @@ function init() { } ,'Calculation is in target range.' : { cs: 'Kalkulace je v cílovém rozsahu.' + ,he: 'חישוב הוא בטווח היעד ' ,ro: 'Calculul dă o valoare în intervalul țintă.' + ,fr: 'La valeur calculée est dans l\'intervalle cible' ,el: 'Ο υπολογισμός είναι εντός στόχου' ,de: 'Berechnung ist innerhalb des Zielbereichs' + ,dk: 'Inden i intervalområde' + ,es: 'El cálculo está dentro del rango objetivo' ,sv: 'Inom intervallområde' ,nb: 'Innenfor målområde' ,fi: 'Laskettu arvo on tavoitealueella' @@ -7597,9 +8122,13 @@ function init() { } ,'Loading profile records ...' : { cs: 'Nahrávám profily ...' + ,he: 'טוען רשומות פרופיל ' ,nb: 'Leser profiler' + ,fr: 'Chargement des profils...' ,el: 'Φόρτωση δεδομένων προφίλ' ,de: 'Lade Profilaufzeichnungen ...' + ,dk: 'Henter profildata ...' + ,es: 'Cargando datos perfil ....' ,ro: 'Se încarcă datele profilului...' ,sv: 'Laddar profildata ...' ,fi: 'Ladataan profiileja ...' @@ -7615,11 +8144,15 @@ function init() { } ,'Values loaded.' : { cs: 'Data nahrána.' + ,he: 'ערכים נטענו ' ,nb: 'Verdier lastet' + ,fr: 'Valeurs chargées' ,el: 'Δεδομένα φορτώθηκαν' ,de: 'Werte geladen.' + ,dk: 'Værdier hentes' + ,es: 'Valores cargados' ,ro: 'Valorile au fost încărcate.' - ,sv: 'Värden laddadr' + ,sv: 'Värden laddas' ,fi: 'Arvot ladattu' ,bg: 'Стойностите за заредени.' ,pl: 'Wartości wczytane.' @@ -7633,9 +8166,13 @@ function init() { } ,'Default values used.' : { cs: 'Použity výchozí hodnoty.' + ,he: 'משתמשים בערכי בררת המחדל ' ,nb: 'Standardverdier brukt' ,el: 'Χρήση προκαθορισμένων τιμών' + ,fr: 'Valeurs par défault utilisées' ,de: 'Standardwerte werden verwendet.' + ,dk: 'Standardværdier brugt' + ,es: 'Se usan valores predeterminados' ,ro: 'Se folosesc valorile implicite.' ,sv: 'Standardvärden valda' ,fi: 'Oletusarvot ladattu' @@ -7651,9 +8188,13 @@ function init() { } ,'Error. Default values used.' : { cs: 'CHYBA: Použity výchozí hodnoty.' + ,he: 'משתמשים בערכי בררת המחדל שגיאה - ' ,nb: 'Feil. Standardverdier brukt.' + ,fr: 'Erreur! Valeurs par défault utilisées.' ,el: 'Σφάλμα: Χρήση προκαθορισμένων τιμών' ,de: 'Fehler. Standardwerte werden verwendet.' + ,dk: 'Fejl. Standardværdier brugt.' + ,es: 'Error. Se usan valores predeterminados.' ,ro: 'Eroare. Se folosesc valorile implicite.' ,sv: 'Error. Standardvärden valda.' ,fi: 'Virhe! Käytetään oletusarvoja.' @@ -7669,9 +8210,13 @@ function init() { } ,'Time ranges of target_low and target_high don\'t match. Values are restored to defaults.' : { cs: 'Rozsahy časů pro limity glykémií si neodpovídají. Budou nastaveny výchozí hodnoty.' + ,he: 'טווחי יעד נמוכים ויעדים גבוהים אינם תואמים. הערכים משוחזרים לברירות המחדל ' ,nb: 'Tidsintervall for målområde lav og høy stemmer ikke. Standardverdier er brukt.' + ,fr: 'Les intervalles de temps pour la cible glycémique supérieure et inférieure diffèrent. Les valeurs par défault sont restaurées.' ,el: 'Το χρονικό διάστημα του χαμηλού ορίου/στόχου και του υψηλού, δεν συμπίπτουν. Γίνεται επαναφορά στις προκαθορισμένες τιμές.' ,de: 'Zeitspanne vom untersten und obersten Wert wird nicht berücksichtigt. Werte auf Standard zurückgesetzt.' + ,dk: 'Tidsinterval for målområde for lav og høj stemmer ikke overens' + ,es: 'Los marcos temporales para objetivo inferior y objetivo superior no coinciden. Los valores predeterminados son usados.' ,ro: 'Intervalele temporale pentru țintă_inferioară și țintă_superioară nu se potrivesc. Se folosesc valorile implicite.' ,sv: 'Tidsintervall för målområde låg och hög stämmer ej' ,fi: 'Matalan ja korkean tavoitteen aikarajat eivät täsmää. Arvot on vaihdettu oletuksiin.' @@ -7687,7 +8232,11 @@ function init() { } ,'Valid from:' : { cs: 'Platné od:' + ,he: 'בתוקף מ: ' ,de: 'Gültig ab:' + ,dk: 'Gyldig fra:' + ,es: 'Válido desde:' + ,fr: 'Valide à partir de:' ,nb: 'Gyldig fra:' ,el: 'Ισχύει από:' ,ro: 'Valid de la:' @@ -7705,9 +8254,13 @@ function init() { } ,'Save current record before switching to new?' : { cs: 'Uložit současný záznam před přepnutím na nový?' + ,he: 'שמור את הרשומה הנוכחית לפני המעבר ל חדש? ' ,nb: 'Lagre før nytte til ny?' + ,fr: 'Sauvegarder cetter entrée avant de procéder à l\'entrée suivante?' ,el: 'Αποθήκευση αλλαγών πριν γίνει εναλλαγή στο νέο προφίλ? ' ,de: 'Aktuellen Datensatz speichern?' + ,dk: 'Gem nuværende data inden der skiftes til nyt?' + ,es: 'Grabar datos actuales antes cambiar a uno nuevo?' ,ro: 'Salvez valoarea curentă înainte de a trece la una nouă?' ,sv: 'Spara före byte till nytt?' ,fi: 'Tallenna nykyinen merkintä ennen vaihtamista uuteen?' @@ -7723,9 +8276,13 @@ function init() { } ,'Add new interval before' : { cs: 'Přidat nový interval před' + ,he: 'הוסף מרווח חדש לפני ' ,nb: 'Legg til nytt intervall før' + ,fr: 'Ajouter un intervalle de temps avant' ,el: 'Προσθήκη νέου διαστήματος, πριν' ,de: 'Neues Intervall vorher hinzufügen' + ,dk: 'Tilføj nyt interval før' + ,es: 'Agregar nuevo intervalo antes' ,ro: 'Adaugă un nou interval înainte' ,sv: 'Lägg till nytt intervall före' ,fi: 'Lisää uusi aikaväli ennen' @@ -7741,9 +8298,13 @@ function init() { } ,'Delete interval' : { cs: 'Smazat interval' + ,he: 'בטל מרווח ' ,nb: 'Slett intervall' + ,fr: 'Effacer l\'intervalle' ,el: 'Διαγραφή διαστήματος' ,de: 'Intervall löschen' + ,dk: 'Fjern interval' + ,es: 'Borrar intervalo' ,ro: 'Șterge interval' ,sv: 'Ta bort intervall' ,fi: 'Poista aikaväli' @@ -7759,9 +8320,13 @@ function init() { } ,'I:C' : { cs: 'I:C' + ,he: 'יחס אינסולין לפחמימות ' ,nb: 'IKH' + ,fr: 'I:C' ,ro: 'ICR' ,de: 'I:KH' + ,dk: 'I:C' + ,es: 'I:C' ,sv: 'I:C' ,fi: 'I:HH' ,bg: 'И:ВХ' @@ -7769,20 +8334,26 @@ function init() { ,pt: 'I:C' ,ru: 'Инс:Углев' ,sk: 'I:C' + ,nl: 'I:C' ,ko: 'I:C' ,it: 'I:C' ,zh_cn: 'ICR' } ,'ISF' : { cs: 'ISF' + ,he: 'ISF ' ,nb: 'ISF' ,ro: 'ISF' ,de: 'ISF' + ,dk: 'ISF' + ,es: 'ISF' + ,fr: 'ISF' ,sv: 'ISF' ,fi: 'ISF' ,bg: 'Инсулинова чувствителност' ,pl: 'ISF' ,pt: 'ISF' + ,nl: 'ISF' ,ru: 'Чувствительность к инсулину' ,sk: 'ISF' ,ko: 'ISF' @@ -7791,8 +8362,12 @@ function init() { } ,'Combo Bolus' : { cs: 'Kombinovaný bolus' + ,he: 'בולוס קומבו ' ,pl: 'Bolus złożony' ,de: 'Verzögerter Bolus' + ,dk: 'Kombo-bolus' + ,es: 'Combo-Bolo' + ,fr: 'Bolus Duo/Combo' ,el: '' ,ro: 'Bolus extins' ,sv: 'Combo-bolus' @@ -7809,7 +8384,11 @@ function init() { } ,'Difference' : { cs: 'Rozdíl' + ,he: 'הבדל ' ,de: 'Unterschied' + ,dk: 'Forskel' + ,es: 'Diferencia' + ,fr: 'Différence' ,ro: 'Diferență' ,el: 'Διαφορά' ,sv: 'Skillnad' @@ -7827,7 +8406,11 @@ function init() { } ,'New time' : { cs: 'Nový čas' + ,he: 'זמן חדש ' ,de: 'Neue Zeit' + ,dk: 'Ny tid' + ,es: 'Nueva hora' + ,fr: 'Nouveau temps' ,ro: 'Oră nouă' ,el: 'Νέα ώρα' ,sv: 'Ny tid' @@ -7845,8 +8428,12 @@ function init() { } ,'Edit Mode' : { cs: 'Editační mód' + ,he: 'מצב עריכה ' ,ro: 'Mod editare' + ,fr: 'Mode Édition' ,de: 'Bearbeitungsmodus' + ,dk: 'Redigerings mode' + ,es: 'Modo edición' ,sv: 'Editeringsläge' ,el: 'Λειτουργία Επεξεργασίας' ,nb: 'Editeringsmodus' @@ -7864,9 +8451,13 @@ function init() { } ,'When enabled icon to start edit mode is visible' : { cs: 'Pokud je povoleno, ikona pro vstup do editačního módu je zobrazena' + ,he: 'כאשר הסמל מופעל כדי להתחיל במצב עריכה גלוי ' ,ro: 'La activare, butonul de editare este vizibil' + ,fr: 'Lorsqu\'activé, l\'icône du Mode Édition devient visible' ,el: 'Όταν ενεργοποιηθεί, το εικονίδιο της λειτουργίας επεξεργασίας είναι ορατό' ,de: 'Wenn aktiviert wird das Icons zum Start des Bearbeitungsmodus sichtbar' + ,dk: 'Ikon vises når redigering er aktivt' + ,es: 'Si está activado, el icono estará visible al inicio del modo de edición' ,sv: 'Ikon visas när editeringsläge är aktivt' ,nb: 'Ikon vises når editeringsmodus er aktivert' ,bg: 'Когато е активно ,иконката за редактиране ще се вижда' @@ -7883,8 +8474,12 @@ function init() { } ,'Operation' : { cs: 'Operace' + ,he: 'פעולה ' ,ro: 'Operațiune' + ,fr: 'Opération' ,de: 'Operation' + ,dk: 'Operation' + ,es: 'Operación' ,el: 'Λειτουργία' ,sv: 'Operation' ,nb: 'Operasjon' @@ -7894,14 +8489,19 @@ function init() { ,sk: 'Operácia' ,pl: 'Operacja' ,pt: 'Operação' + ,nl: 'Operatie' ,ko: '동작' ,it: 'Operazione' ,zh_cn: '操作' } ,'Move' : { cs: 'Přesunout' + ,he: 'הזז ' ,ro: 'Mutați' + ,fr: 'Déplacer' ,de: 'Verschieben' + ,dk: 'Flyt' + ,es: 'Mover' ,el: 'Μετακίνηση' ,sv: 'Flytta' ,nb: 'Flytt' @@ -7918,7 +8518,11 @@ function init() { } ,'Delete' : { cs: 'Odstranit' + ,he: 'בטל ' ,de: 'Löschen' + ,dk: 'Slet' + ,es: 'Borrar' + ,fr: 'Effacer' ,el: 'Διαγραφή' ,ro: 'Ștergeți' ,sv: 'Ta bort' @@ -7936,8 +8540,12 @@ function init() { } ,'Move insulin' : { cs: 'Přesunout inzulín' + ,he: 'הזז אינסולין ' ,ro: 'Mutați insulina' + ,fr: 'Déplacer l\'insuline' ,de: 'Insulin verschieben' + ,dk: 'Flyt insulin' + ,es: 'Mover insulina' ,el: 'Μετακίνηση ινσουλίνης' ,sv: 'Flytta insulin' ,nb: 'Flytt insulin' @@ -7954,8 +8562,12 @@ function init() { } ,'Move carbs' : { cs: 'Přesunout sacharidy' + ,he: 'הזז פחמימות ' ,ro: 'Mutați carbohidrații' ,de: 'Kohlenhydrate verschieben' + ,dk: 'Flyt kulhydrater' + ,es: 'Mover carbohidratos' + ,fr: 'Déplacer les glucides' ,el: 'Μετακίνηση υδατανθράκων' ,sv: 'Flytta kolhydrater' ,nb: 'Flytt karbohydrater' @@ -7972,8 +8584,12 @@ function init() { } ,'Remove insulin' : { cs: 'Odstranit inzulín' + ,he: 'בטל אינסולין ' ,ro: 'Ștergeți insulina' ,de: 'Insulin löschen' + ,dk: 'Fjern insulin' + ,es: 'Eliminar insulina' + ,fr: 'Effacer l\'insuline' ,el: 'Αφαίρεση ινσουλίνης' ,sv: 'Ta bort insulin' ,nb: 'Fjern insulin' @@ -7990,8 +8606,12 @@ function init() { } ,'Remove carbs' : { cs: 'Odstranit sacharidy' + ,he: 'בטל פחמימות ' ,ro: 'Ștergeți carbohidrații' + ,fr: 'Effacer les glucides' ,de: 'Kohlenhydrate löschen' + ,dk: 'Fjern kulhydrater' + ,es: 'Eliminar carbohidratos' ,el: 'Αφαίρεση υδατανθράκων' ,sv: 'Ta bort kolhydrater' ,nb: 'Fjern karbohydrater' @@ -8008,8 +8628,12 @@ function init() { } ,'Change treatment time to %1 ?' : { cs: 'Změnit čas ošetření na %1 ?' + ,he: 'שנה זמן לטיפול ל %1 ' ,ro: 'Schimbați ora acțiunii cu %1 ?' + ,fr: 'Modifier l\'horaire du traitment? Nouveau: %1' ,de: 'Behandlungsdauer ändern in %1 ?' + ,dk: 'Ændre behandlingstid til %1 ?' + ,es: 'Cambiar horario tratamiento a %1 ?' ,el: 'Αλλαγή του χρόνου της ενέργειας σε %1?' ,sv: 'Ändra behandlingstid till %1 ?' ,nb: 'Endre behandlingstid til %1 ?' @@ -8026,8 +8650,12 @@ function init() { } ,'Change carbs time to %1 ?' : { cs: 'Změnit čas sacharidů na %1 ?' + ,he: 'שנה זמן פחמימות ל %1 ' ,ro: 'Schimbați ora carbohidraților cu %1 ?' ,de: 'Kohlenhydrat-Zeit ändern zu %1 ?' + ,dk: 'Ændre kulhydratstid til %1 ?' + ,es: 'Cambiar horario carbohidratos a %1 ?' + ,fr: 'Modifier l\'horaire des glucides? Nouveau: %1' ,el: 'Αλλαγή του χρόνου πρόσληψης υδατανθράκων σε %1?' ,sv: 'Ändra kolhydratstid till %1 ?' ,nb: 'Endre Karbohydrattid til %1 ?' @@ -8044,9 +8672,13 @@ function init() { } ,'Change insulin time to %1 ?' : { cs: 'Změnit čas inzulínu na %1 ?' + ,he: 'שנה זמן אינסולין ל %1 ' ,ro: 'Schimbați ora insulinei cu %1 ?' ,el: 'Αλλαγή του χρόνου χορήγησης ινσουλίνης σε %1 ?' + ,es: 'Cambiar horario insulina a %1 ?' + ,fr: 'Modifier l\'horaire de l\'insuline? Nouveau: %1' ,de: 'Insulinzeit ändern zu %1 ?' + ,dk: 'Ændre insulintid til %1 ?' ,sv: 'Ändra insulintid till %1 ?' ,nb: 'Endre insulintid til %1 ?' ,bg: 'Да променя ли времето на инсулина с %1?' @@ -8062,8 +8694,12 @@ function init() { } ,'Remove treatment ?' : { cs: 'Odstranit ošetření ?' + ,he: 'בטל טיפול ' ,ro: 'Ștergeți acțiunea?' ,de: 'Behandlung löschen?' + ,dk: 'Fjern behandling ?' + ,es: 'Eliminar tratamiento?' + ,fr: 'Effacer le traitment?' ,el: 'Διαγραφή ενέργειας ?' ,sv: 'Ta bort behandling ?' ,nb: 'Fjern behandling ?' @@ -8080,7 +8716,11 @@ function init() { } ,'Remove insulin from treatment ?' : { cs: 'Odstranit inzulín z ošetření ?' + ,he: 'הסר אינסולין מהטיפול? ' ,de: 'Insulin der Behandlung löschen?' + ,dk: 'Fjern insulin fra behandling ?' + ,es: 'Eliminar insulina del tratamiento?' + ,fr: 'Effacer l\'insuline du traitement?' ,ro: 'Ștergeți insulina din acțiune?' ,el: 'Διαγραφή ινσουλίνης από την ενέργεια?' ,sv: 'Ta bort insulin från behandling ?' @@ -8098,8 +8738,12 @@ function init() { } ,'Remove carbs from treatment ?' : { cs: 'Odstranit sacharidy z ošetření ?' + ,he: 'הסר פחמימות מהטיפול? ' ,ro: 'Ștergeți carbohidrații din acțiune?' ,de: 'Kohlenhydrate der Behandlung löschen?' + ,dk: 'Fjern kulhydrater fra behandling ?' + ,es: 'Eliminar carbohidratos del tratamiento?' + ,fr: 'Effacer les glucides du traitement?' ,el: 'Διαγραφή των υδατανθράκων από την ενέργεια?' ,sv: 'Ta bort kolhydrater från behandling ?' ,nb: 'Fjern karbohydrater fra behandling ?' @@ -8116,8 +8760,12 @@ function init() { } ,'Rendering' : { cs: 'Vykresluji' + ,he: 'מציג... ' ,ro: 'Se desenează' + ,fr: 'Représentation graphique' ,de: 'Darstellung' + ,dk: 'Rendering' + ,es: 'Gráfica' ,el: 'Απεικόνιση' ,sv: 'Rendering' ,nb: 'Rendering' @@ -8134,7 +8782,11 @@ function init() { } ,'Loading OpenAPS data of' : { cs: 'Nahrávám OpenAPS data z' - ,de: 'Lade OpenAPS Daten von' + ,he: 'טוען מידע מ ' + ,de: 'Lade OpenAPS-Daten von' + ,dk: 'Henter OpenAPS data for' + ,es: 'Cargando datos OpenAPS de' + ,fr: 'Chargement des données OpenAPS de' ,ro: 'Se încarcă datele OpenAPS pentru' ,el: 'Φόρτωση δεδομένων OpenAPS' ,sv: 'Laddar OpenAPS data för' @@ -8152,7 +8804,11 @@ function init() { } ,'Loading profile switch data' : { cs: 'Nahrávám data přepnutí profilu' + ,he: 'טוען מידע החלפת פרופיל ' ,de: 'Lade Daten Profil-Wechsel' + ,dk: 'Henter ny profildata' + ,es: 'Cargando el cambio de perfil de datos' + ,fr: 'Chargement de données de changement de profil' ,el: 'Φόρτωση δεδομένων νέου προφίλ σε ισχύ' ,ro: 'Se încarcă datele de schimbare profil' ,sv: 'Laddar ny profildata' @@ -8170,9 +8826,13 @@ function init() { } ,'Profile is going to be saved in newer format used in Nightscout 0.9.0 and above and will not be usable in older versions anymore.\nAre you sure?' : { cs: 'Profil bude uložen v novějším formátu používaném v Nightscoutu 0.9.0 a novějších. Již nebude použitelný se starší verzí.\nJste si jistý?' + ,he: 'הפרופיל עומד להישמר בתבנית חדשה יותר בשימוש ב- Nightscout 0.9.0 ומעלה ולא יהיה ניתן להשתמש בו בגרסאות ישנות יותר. \ האם אתה בטוח? ' ,el: 'Το προφίλ πρόκειται να αποθηκευτεί με τη νέα του μορφή (έκδοση Nighscout 0.9.0 και πάνω) και δεν πρόκειται να μπορεί να χρησιμοποιηθεί σε παλαιότερες εκδόσεις. \nΕίστε σίγουροι?' + ,fr: 'Le profil va être sauvegardé dans un nouveau format utilisé par Nightscout 0.9.0 et suivants, et il ne pourra plus être utilisé par les versions antérieures. \nÊtes-vous sûr?' ,ro: 'Profilul va fi salvat într-un format nou, folosit în Nightscout 0.9.0 și superior și nu va mai fi posibilă folosirea pentru versiunile mai vechi.\nSunteți de acord?' ,de: 'Profil wird in einem neuem Format für Nightscout 0.9.0 und höher gespeichert und ist in älteren Versionen nicht mehr nutzbar. Sind Sie sicher?' + ,dk: 'Profilen gemmes i et nyere format som ikke kommer til at virke med tidligere versioner af Nightscout (<0.9.0). \nEr du sikker?' + ,es: 'El perfil se guarda en un nuevo formato para Nightscout 0.9.0 y superior y ya no se puede usar en versiones anteriores. Estas seguro?' ,sv: 'Profilen sparas i ett nyare format som ej kommer fungera i tidigare versioner av Nightscout (<0.9.0). \nÄr du säker?' ,nb: 'Profilen lagres i ett nyere format som ikke kommer til å fungera i tidigere versioner av Nightscout (<0.9.0). \nEr du sikker?' ,bg: 'Профилът ще бъде запаметен в нов формат, който се ползва от Nightscout 0.9.0 и нагоре и няма да бъде съвместим с по-стари версии. \nСигурен ли си ?' @@ -8188,8 +8848,12 @@ function init() { } ,'Wrong profile setting.\nNo profile defined to displayed time.\nRedirecting to profile editor to create new profile.' : { cs: 'Chybě nastavený profil.\nNení definovaný žádný platný profil k času zobrazení.\nProvádím přesměrování na editor profilu.' + ,he: 'הגדרת פרופיל שגוי. \ N פרופיל מוגדר לזמן המוצג. מפנה מחדש לעורך פרופיל כדי ליצור פרופיל חדש. ' ,el: 'Λάθος προφίλ. Παρακαλώ δημιουργήστε ένα νέο προφίλ' - ,de: 'Falsche Profileinstellung.\nKein Profil festgelegt zur angezeigten Zeit.\n Weiter zum Profileditor um ein neues Profil zu erstellen.' + ,fr: 'Erreur de réglage de profil. \nAucun profil défini pour indiquer l\'heure. \nRedirection vers la création d\'un nouveau profil. ' + ,de: 'Falsche Profileinstellung.\nKein Profil festgelegt zur angezeigten Zeit.\n Weiter zum Profileditor, um ein neues Profil zu erstellen.' + ,dk: 'Forkert profilindstilling.\nIngen profil defineret til at vise tid.\nOmdirigerar til profil editoren for at lave en ny profil.' + ,es: 'Configuración incorrecta del perfil. \n No establecido ningún perfil en el tiempo mostrado. \n Continuar en editor de perfil para crear perfil nuevo.' ,bg: 'Грешни настройки на профила. \nНяма определен профил към избраното време. \nПрепращане към редактора на профила, за създаване на нов профил.' ,ro: 'Setare de profil eronată.\nNu este definit niciun profil pentru perioada afișată.\nMergeți la editorul de profiluri pentru a defini unul nou.' ,sv: 'Fel profilinställning.\nIngen profil vald för vald tid.\nOmdirigerar för att skapa ny profil.' @@ -8206,11 +8870,15 @@ function init() { } ,'Pump' : { cs: 'Pumpa' + ,he: 'משאבה ' ,sk: 'Pumpa' + ,fr: 'Pompe' ,sv: 'Pump' ,el: 'Αντλία' ,nb: 'Pumpe' ,de: 'Pumpe' + ,dk: 'Pumpe' + ,es: 'Bomba' ,bg: 'Помпа' ,ro: 'Pompă' ,ru: 'Помпа' @@ -8220,14 +8888,19 @@ function init() { ,pt: 'Bomba' ,it: 'Pompa' ,zh_cn: '胰岛素泵' + ,pl: 'Pompa' } ,'Sensor Age' : { cs: 'Stáří senzoru (SAGE)' + ,he: 'גיל סנסור סוכר ' ,sk: 'Zavedenie senzoru (SAGE)' ,sv: 'Sensorålder (SAGE)' + ,fr: 'Âge du senseur (SAGE)' ,el: 'Ημέρες χρήσης αισθητήρα (SAGE)' ,nb: 'Sensoralder (SAGE)' ,de: 'Sensor-Alter' + ,dk: 'Sensoralder (SAGE)' + ,es: 'Días uso del sensor' ,bg: 'Възраст на сензора (ВС)' ,ro: 'Vechimea senzorului' ,ru: 'Возраст сенсора' @@ -8238,14 +8911,19 @@ function init() { ,it: 'SAGE - Durata Sensore' ,zh_cn: '探头使用时间(SAGE)' ,zh_tw: '探頭使用時間(SAGE)' + ,pl: 'Wiek sensora' } ,'Insulin Age' : { cs: 'Stáří inzulínu (IAGE)' + ,he: 'גיל אינסולין ' ,sk: 'Výmena inzulínu (IAGE)' + ,fr: 'Âge de l\'insuline (IAGE)' ,el: 'Ημέρες χρήσης αμπούλας ινσουλίνης (IAGE)' ,sv: 'Insulinålder (IAGE)' ,nb: 'Insulinalder (IAGE)' ,de: 'Insulin-Alter' + ,dk: 'Insulinalder (IAGE)' + ,es: 'Días uso cartucho insulina' ,bg: 'Възраст на инсулина (ВИ)' ,ro: 'Vechimea insulinei' ,ru: 'инсулин проработал' @@ -8256,10 +8934,15 @@ function init() { ,nl: 'Insuline ouderdom (IAGE)' ,zh_cn: '胰岛素使用时间(IAGE)' ,zh_tw: '胰島素使用時間(IAGE)' + ,pj: 'Wiek insuliny' } ,'Temporary target' : { cs: 'Dočasný cíl' + ,he: 'מטרה זמנית ' ,de: 'Temporäres Ziel' + ,dk: 'Midlertidig mål' + ,es: 'Objetivo temporal' + ,fr: 'Cible temporaire' ,sk: 'Dočasný cieľ' ,el: 'Προσωρινός στόχος' ,sv: 'Tillfälligt mål' @@ -8276,11 +8959,15 @@ function init() { } ,'Reason' : { cs: 'Důvod' + ,he: 'סיבה ' ,sk: 'Dôvod' + ,fr: 'Raison' ,sv: 'Orsak' ,el: 'Αιτία' ,nb: 'Årsak' ,de: 'Begründung' + ,dk: 'Årsag' + ,es: 'Razonamiento' ,bg: 'Причина' ,nl: 'Reden' ,ro: 'Motiv' @@ -8290,13 +8977,18 @@ function init() { ,pt: 'Razão' ,it: 'Ragionare' ,zh_cn: '原因' + ,pl: 'Powód' } ,'Eating soon' : { cs: 'Následuje jídlo' + ,he: 'אוכל בקרוב ' ,sk: 'Jesť čoskoro' + ,fr: 'Repas sous peu' ,sv: 'Snart matdags' ,nb: 'Snart tid for mat' ,de: 'Bald essend' + ,dk: 'Spiser snart' + ,es: 'Comer pronto' ,bg: 'Ядене скоро' ,ro: 'Mâncare în curând' ,ru: 'Скоро еда' @@ -8306,14 +8998,19 @@ function init() { ,pt: 'Refeição em breve' ,it: 'Mangiare prossimamente' ,zh_cn: '接近用餐时间' + ,pl: 'Zjedz wkrótce' } ,'Top' : { cs: 'Horní' + ,he: 'למעלה ' ,sk: 'Vrchná' + ,fr: 'Haut' ,sv: 'Toppen' ,el: 'Πάνω' ,nb: 'Øverst' ,de: 'Oben' + ,dk: 'Toppen' + ,es: 'Superior' ,bg: 'Горе' ,ro: 'Deasupra' ,ru: 'Верх' @@ -8323,14 +9020,19 @@ function init() { ,pt: 'Superior' ,it: 'Superiore' ,zh_cn: '顶部' + ,pl: 'Góra' } ,'Bottom' : { cs: 'Dolní' + ,he: 'למטה ' ,sk: 'Spodná' ,sv: 'Botten' + ,fr: 'Bas' ,el: 'Κάτω' ,nb: 'Nederst' ,de: 'Unten' + ,dk: 'Bunden' + ,es: 'Inferior' ,bg: 'Долу' ,ro: 'Sub' ,ru: 'Низ' @@ -8340,14 +9042,19 @@ function init() { ,pt: 'Inferior' ,it: 'Inferiore' ,zh_cn: '底部' + ,pl: "Dół" } ,'Activity' : { cs: 'Aktivita' + ,he: 'פעילות ' ,sk: 'Aktivita' + ,fr: 'Activité' ,sv: 'Aktivitet' ,el: 'Δραστηριότητα' ,nb: 'Aktivitet' ,de: 'Aktivität' + ,dk: 'Aktivitet' + ,es: 'Actividad' ,bg: 'Активност' ,ro: 'Activitate' ,ru: 'Активность' @@ -8357,12 +9064,17 @@ function init() { ,pt: 'Atividade' ,it: 'Attività' ,zh_cn: '有效的' + ,pl: 'Aktywność' } ,'Targets' : { cs: 'Cíl' + ,he: 'מטרות ' ,sk: 'Ciele' + ,fr: 'Cibles' ,el: 'Στόχοι' ,de: 'Ziele' + ,dk: 'Mål' + ,es: 'Objetivos' ,sv: 'Mål' ,nb: 'Mål' ,bg: 'Граници' @@ -8374,45 +9086,59 @@ function init() { ,pt: 'Metas' ,it: 'Obiettivi' ,zh_cn: '目标' + ,pl: 'Cele' } ,'Bolus insulin:' : { cs: 'Bolusový inzulín:' + ,he: 'אינסולין בולוס ' ,bg: 'Болус инсулин' + ,fr: 'Bolus d\'Insuline' ,ro: 'Insulină bolusată:' ,el: 'Ινσουλίνη' + ,es: 'Bolo de Insulina' ,ru: 'Болюс инсулин' ,sv: 'Bolusinsulin:' ,nb: 'Bolusinsulin:' ,ko: 'Bolus 인슐린' ,fi: 'Bolusinsuliini:' ,de: 'Bolus Insulin:' + ,dk: 'Bolusinsulin:' ,pt: 'Insulina de bolus' ,sk: 'Bolusový inzulín:' ,it: 'Insulina Bolo' ,nl: 'Bolus insuline' ,zh_cn: '大剂量胰岛素' + ,pl: 'Bolus insuliny' } ,'Base basal insulin:' : { cs: 'Základní bazální inzulín:' + ,he: 'אינסולין בזלי בסיס ' ,bg: 'Основен базален инсулин' + ,fr: 'Débit basal de base' ,ro: 'Bazala obișnuită:' ,el: 'Βασική Ινσουλίνη' + ,es: 'Insulina basal básica' ,ru: 'Основной базал инсулин' ,sv: 'Basalinsulin:' ,nb: 'Basalinsulin:' ,ko: '기본 basal 인슐린' ,fi: 'Basaalin perusannos:' ,de: 'Basis Basal Insulin:' + ,dk: 'Basalinsulin:' ,pt: 'Insulina basal programada:' ,sk: 'Základný bazálny inzulín:' ,it: 'Insulina Basale:' ,nl: 'Basis basaal insuline' ,zh_cn: '基础率胰岛素' + ,pl: 'Bazowa dawka insuliny' } ,'Positive temp basal insulin:' : { cs: 'Pozitivní dočasný bazální inzulín:' + ,he: 'אינסולין בזלי זמני חיובי ' ,bg: 'Положителен временен базален инсулин' - ,ro: 'Bazala temporară crescută:' + ,fr: 'Débit basal temporaire positif' + ,ro: 'Bazala temporară marită:' + ,es: 'Insulina Basal temporal positiva:' ,el: 'Θετική βασική ινσουλίνη' ,ru: 'Положит знач временн базал инс ' ,sv: 'Positiv tempbasal insulin:' @@ -8420,49 +9146,63 @@ function init() { ,ko: '초과된 임시 basal 인슐린' ,fi: 'Positiivinen tilapäisbasaali:' ,de: 'Positives temporäres Basal Insulin:' + ,dk: 'Positiv tempbasal insulin:' ,pt: 'Insulina basal temporária positiva:' ,sk: 'Pozitívny dočasný bazálny inzulín:' ,it: 'Insulina basale temp positiva:' ,nl: 'Extra tijdelijke basaal insuline' ,zh_cn: '实际临时基础率胰岛素' + , pl: 'Zwiększona bazowa dawka insuliny' } ,'Negative temp basal insulin:' : { cs:'Negativní dočasný bazální inzulín:' + ,he: 'אינסולין בזלי זמני שלילי ' ,bg: 'Отрицателен временен базален инсулин' - ,ro: 'Bazala temporară scăzută:' + ,fr: 'Débit basal temporaire négatif' + ,ro: 'Bazala temporară micșorată:' ,el: 'Αρνητική βασική ινσουλίνη' ,ru: 'Отриц знач временн базал инс' ,sv: 'Negativ tempbasal för insulin:' + ,es: 'Insulina basal temporal negativa:' ,nb: 'Negativ midlertidig basalinsulin:' ,ko: '남은 임시 basal 인슐린' ,fi: 'Negatiivinen tilapäisbasaali:' ,de: 'Negatives temporäres Basal Insulin:' + ,dk: 'Negativ tempbasal insulin:' ,pt: 'Insulina basal temporária negativa:' ,sk: 'Negatívny dočasný bazálny inzulín:' ,it: 'Insulina basale Temp negativa:' ,nl: 'Negatieve tijdelijke basaal insuline' ,zh_cn: '其余临时基础率胰岛素' + , pl: 'Zmniejszona bazowa dawka insuliny' } ,'Total basal insulin:' : { cs: 'Celkový bazální inzulín:' + ,he: 'סך אינסולין בזלי ' ,bg: 'Общо базален инсулин' + ,fr: 'Insuline basale au total:' ,ro: 'Bazala totală:' + ,es: 'Total Insulina basal:' ,el: 'Συνολική Βασική Ινσουλίνη (BASAL)' ,ru: 'Всего базал инсулина' - ,sv: 'Total dagsdos basinsulin:' + ,sv: 'Total dagsdos basalinsulin:' ,nb: 'Total daglig basalinsulin:' ,ko: '전체 basal 인슐린' ,fi: 'Basaali yhteensä:' ,de: 'Gesamt Basal Insulin:' + ,dk: 'Total basalinsulin:' ,pt: 'Insulina basal total:' ,sk: 'Celkový bazálny inzulín:' ,it: 'Insulina Basale Totale:' ,nl: 'Totaal basaal insuline' ,zh_cn: '基础率胰岛素合计' + , pl: 'Całkowita ilość bazowej dawki insuliny' } ,'Total daily insulin:' : { cs:'Celkový denní inzulín:' + ,he: 'סך אינסולין ביום ' ,bg: 'Общо инсулин за деня' + ,fr: 'Insuline totale journalière' ,ro: 'Insulina totală zilnică:' ,el: 'Συνολική Ημερήσια Ινσουλίνη' ,ru: 'Всего ежедн базал инсулина' @@ -8471,197 +9211,258 @@ function init() { ,ko: '하루 인슐린 총량' ,fi: 'Päivän kokonaisinsuliiniannos' ,de: 'Gesamtes tägliches Insulin:' + ,dk: 'Total dagsdosis insulin' + ,es: 'Total Insulina diaria:' ,pt: 'Insulina diária total:' ,sk: 'Celkový denný inzulín:' ,it: 'Totale giornaliero d\'insulina:' ,nl: 'Totaal dagelijkse insuline' ,zh_cn: '每日胰岛素合计' + ,pl: 'Całkowita dzienna ilość insuliny' } ,'Unable to %1 Role' : { // PUT or POST cs: 'Chyba volání %1 Role:' + ,he: 'לא יכול תפקיד %1' ,bg: 'Невъзможно да %1 Роля' + ,fr: 'Incapable de %1 rôle' ,ro: 'Imposibil de %1 Rolul' + ,es: 'Incapaz de %1 Rol' ,ru: 'Невозможно %1 Роль' ,sv: 'Kan inte ta bort roll %1' ,nb: 'Kan ikke %1 rolle' ,fi: '%1 operaatio roolille opäonnistui' ,de: 'Unpassend zu %1 Rolle' + ,dk: 'Kan ikke fjerne %1 rolle' ,pt: 'Função %1 não foi possível' ,sk: 'Chyba volania %1 Role' ,ko: '%1로 비활성' ,it: 'Incapace di %1 Ruolo' ,nl: 'Kan %1 rol niet verwijderen' ,zh_cn: '%1角色不可用' + ,pl: 'Nie można %1 roli' } ,'Unable to delete Role' : { cs: 'Nelze odstranit Roli:' + ,he: 'לא יכול לבטל תפקיד ' ,bg: 'Невъзможно изтриването на Роля' ,ro: 'Imposibil de șters Rolul' + ,fr: 'Effacement de rôle impossible' ,ru: 'Невозможно удалить Роль' ,sv: 'Kan ej ta bort roll' + ,es: 'Imposible elimar Rol' ,nb: 'Kan ikke ta bort rolle' ,fi: 'Roolin poistaminen epäonnistui' ,de: 'Rolle nicht löschbar' + ,dk: 'Kan ikke fjerne rolle' ,pt: 'Não foi possível apagar a Função' ,sk: 'Rola sa nedá zmazať' ,ko: '삭제로 비활성' ,it: 'Incapace di eliminare Ruolo' ,nl: 'Niet mogelijk rol te verwijderen' ,zh_cn: '无法删除角色' + ,pl: 'Nie można usunąć roli' } ,'Database contains %1 roles' : { cs: 'Databáze obsahuje %1 rolí' + ,he: 'בסיס הנתונים מכיל %1 תפקידים ' ,bg: 'Базата данни съдържа %1 роли' ,ro: 'Baza de date conține %1 rol(uri)' + ,fr: 'La base de données contient %1 rôles' ,ru: 'База данных содержит %1 Ролей' ,sv: 'Databasen innehåller %1 roller' + ,es: 'Base de datos contiene %1 Roles' ,nb: 'Databasen inneholder %1 roller' ,fi: 'Tietokanta sisältää %1 roolia' ,de: 'Datenbank enthält %1 Rollen' + ,dk: 'Databasen indeholder %1 roller' ,pt: 'Banco de dados contém %1 Funções' ,sk: 'Databáza obsahuje %1 rolí' ,ko: '데이터베이스가 %1 포함' ,it: 'Database contiene %1 ruolo' ,nl: 'Database bevat %1 rollen' ,zh_cn: '数据库包含%1个角色' + , pl: 'Baza danych zawiera %1 ról' } ,'Edit Role' : { cs:'Editovat roli' + ,he: 'ערוך תפקיד ' ,bg: 'Промени Роля' ,ro: 'Editează Rolul' + ,fr: 'Éditer le rôle' ,ru: 'Редактировать Роль' ,sv: 'Editera roll' ,nb: 'Editer rolle' ,fi: 'Muokkaa roolia' ,de: 'Rolle editieren' + ,dk: 'Rediger rolle' + ,es: 'Editar Rol' ,pt: 'Editar Função' ,sk: 'Editovať rolu' ,ko: '편집 모드' ,it: 'Modifica ruolo' ,nl: 'Pas rol aan' ,zh_cn: '编辑角色' + ,pl: 'Edycja roli' } ,'admin, school, family, etc' : { cs: 'administrátor, škola, rodina atd...' + ,he: 'מנהל, בית ספר, משפחה, וכו ' ,bg: 'администратор,училище,семейство и т.н.' + ,fr: 'Administrateur, école, famille, etc' ,ro: 'administrator, școală, familie, etc' ,ru: 'админ, школа, семья и т д' + ,es: 'Adminitrador, escuela, família, etc' ,sv: 'Administratör, skola, familj, etc' ,nb: 'Administrator, skole, familie osv' ,fi: 'ylläpitäjä, koulu, perhe jne' ,de: 'Administrator, Schule, Familie, etc' + ,dk: 'Administrator, skole, familie, etc' ,pt: 'Administrador, escola, família, etc' ,sk: 'administrátor, škola, rodina atď...' ,ko: '관리자, 학교, 가족 등' ,it: 'amministrazione, scuola, famiglia, etc' ,nl: 'admin, school, familie, etc' ,zh_cn: '政府、学校、家庭等' + ,pl: 'administrator, szkoła, rodzina, itp' } ,'Permissions' : { cs: 'Oprávnění' + ,he: 'הרשאות ' ,bg: 'Права' ,ro: 'Permisiuni' + ,fr: 'Permissions' ,ru: 'Разрешения' ,sv: 'Rättigheter' ,nb: 'Rettigheter' ,fi: 'Oikeudet' ,de: 'Berechtigungen' + ,dk: 'Rettigheder' + ,es: 'Permisos' ,pt: 'Permissões' ,sk: 'Oprávnenia' ,ko: '허가' ,it: 'Permessi' ,nl: 'Rechten' ,zh_cn: '权限' + ,pl: 'Uprawnienia' } ,'Are you sure you want to delete: ' : { cs: 'Opravdu vymazat: ' + ,he: 'אתה בטוח שאתה רוצה למחוק' ,bg: 'Потвърдете изтриването' ,ro: 'Confirmați ștergerea: ' + ,fr: 'Êtes-vous sûr de vouloir effacer:' ,ru: 'Вы уверены, что хотите удалить' ,sv: 'Är du säker att du vill ta bort:' ,nb: 'Er du sikker på at du vil slette:' ,fi: 'Oletko varmat että haluat tuhota: ' ,de: ' Sind sie sicher, das Sie löschen wollen:' + ,dk: 'Er du sikker på at du vil slette:' + ,es: 'Seguro que quieres eliminarlo:' ,pt: 'Tem certeza de que deseja apagar:' ,sk: 'Naozaj zmazať:' ,ko: '정말로 삭제하시겠습니까: ' ,it: 'Sei sicuro di voler eliminare:' ,nl: 'Weet u het zeker dat u wilt verwijderen?' ,zh_cn: '你确定要删除:' + ,pl: 'Jesteś pewien, że chcesz usunąć:' } ,'Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.' : { cs: 'Každá role má 1 nebo více oprávnění. Oprávnění * je zástupný znak, oprávnění jsou hiearchie používající : jako oddělovač.' ,bg: 'Всяка роля ще има 1 или повече права. В * правото е маска, правата са йерархия използвайки : като разделител' + ,fr: 'Chaque rôle aura une ou plusieurs permissions. La permission * est un joker (permission universelle), les permissions sont une hierarchie utilisant : comme séparatuer' ,ro: 'Fiecare rol va avea cel puțin o permisiune. Permisiunea * este totală, permisiunile sunt ierarhice utilizând : pe post de separator.' ,ru: 'Каждая роль имеет 1 или более разрешений. Разрешение * это подстановочный символ, разрешения это иерархия, использующая : как разделитель.' ,sv: 'Varje roll kommer få en eller flera rättigheter. * är en wildcard, rättigheter sätts hirarkiskt med : som avgränsare.' ,nb: 'Hver enkelt rolle vil ha en eller flere rettigheter. *-rettigheten er wildcard. Rettigheter settes hierarkisk med : som separator.' - ,fi: 'Jokaisella roolilla on yksi tai useampia oikeuksia. + on jokeri (tunnistuu kaikkina oikeuksina), oikeudet ovat hierarkia joka käyttää : merkkiä erottimena.' + ,fi: 'Jokaisella roolilla on yksi tai useampia oikeuksia. * on jokeri (tunnistuu kaikkina oikeuksina), oikeudet ovat hierarkia joka käyttää : merkkiä erottimena.' ,de: 'Jede Rolle hat eine oder mehrere Berechtigungen. Die * Berechtigung ist ein Platzhalter, Berechtigungen sind hierachrchisch mit : als Separator.' + ,sv: 'Hver rolle vil have en eller flere rettigheder. * er en joker, rettigheder sættes hierakisk med : som skilletegn.' + ,es: 'Cada Rol tiene uno o más permisos. El permiso * es un marcador de posición y los permisos son jerárquicos con : como separador.' ,pt: 'Cada função terá uma ou mais permissões. A permissão * é um wildcard, permissões são uma hierarquia utilizando * como um separador.' ,sk: 'Každá rola má 1 alebo viac oprávnení. Oprávnenie * je zástupný znak, oprávnenia sú hierarchie používajúce : ako oddelovač.' ,ko: '각각은 1 또는 그 이상의 허가를 가지고 있습니다. 허가는 예측이 안되고 구분자로 : 사용한 계층이 있습니다' ,it: 'Ogni ruolo avrà un 1 o più autorizzazioni. Il * il permesso è un jolly, i permessi sono una gerarchia utilizzando : come separatore.' ,nl: 'Elke rol heeft mintens 1 machtiging. De * machtiging is een wildcard, machtigingen hebben een hyrarchie door gebruik te maken van : als scheidingsteken.' ,zh_cn: '每个角色都具有一个或多个权限。权限设置时使用*作为通配符,层次结构使用:作为分隔符。' + , pl: 'Każda rola będzie mieć 1 lub więcej uprawnień. Symbol * uprawnia do wszystkiego. Uprawnienia są hierarchiczne, używając : jako separatora.' } ,'Add new Role' : { cs: 'Přidat novou roli' + ,he: 'הוסף תפקיד חדש ' ,bg: 'Добавете нова роля' + ,fr: 'Ajouter un nouveau rôle' ,ro: 'Adaugă un Rol nou' ,ru: 'Добавить новую Роль' + ,es: 'Añadir nuevo Rol' ,sv: 'Lägg till roll' ,nb: 'Legg til ny rolle' ,fi: 'Lisää uusi rooli' - ,de: 'Eine neue Rolle Hinzufügen' + ,de: 'Eine neue Rolle hinzufügen' + ,dk: 'Tilføj en ny rolle' ,pt: 'Adicionar novo Papel' ,sk: 'Pridať novú rolu' ,ko: '새 역할 추가' ,it: 'Aggiungere un nuovo ruolo' ,nl: 'Voeg rol toe' ,zh_cn: '添加新角色' + ,pl: 'Dodaj nową rolę' } ,'Roles - Groups of People, Devices, etc' : { cs: 'Role - Skupiny lidí, zařízení atd.' + ,he: 'תפקידים - קבוצות של אנשים, התקנים, וכו ' ,bg: 'Роли - Група хора,устройства,т.н.' + ,fr: 'Rôles - Groupe de Personnes ou d\'appareils' ,ro: 'Roluri - Grupuri de persoane, dispozitive, etc' + ,es: 'Roles - Grupos de Gente, Dispositivos, etc.' ,ru: 'Роли- группы людей, устройств и т п' ,sv: 'Roller - Grupp av användare, Enheter, etc' ,nb: 'Roller - Grupper av brukere, enheter osv' ,fi: 'Roolit - Ihmisten ja laitteiden muodostamia ryhmiä' ,de: 'Rollen - Gruppierungen von Menschen, Geräten, etc.' + ,dk: 'Roller - Grupper af brugere, Enheder, etc' ,pt: 'Funções - grupos de pessoas, dispositivos, etc' ,sk: 'Role - skupiny ľudí, zariadení atď...' ,ko: '역할 - 그룹, 기기, 등' ,it: 'Ruoli - gruppi di persone, dispositivi, etc' ,nl: 'Rollen - Groepen mensen apparaten etc' ,zh_cn: '角色 - 一组人或设备等' + ,pl: 'Role - Grupy ludzi, urządzeń, itp' } ,'Edit this role' : { cs: 'Editovat tuto roli' + ,he: 'ערוך תפקיד זה ' ,bg: 'Промени тази роля' + ,fr: 'Editer ce rôle' ,ro: 'Editează acest rol' ,ru: 'Редактировать эту роль' + ,es: 'Editar este Rol' ,sv: 'Editera denna roll' ,nb: 'Editer denne rollen' ,fi: 'Muokkaa tätä roolia' ,de: 'Editiere diese Rolle' + ,dk: 'Rediger denne rolle' ,pt: 'Editar esta Função' ,sk: 'Editovať túto rolu' ,ko: '이 역할 편집' ,it: 'Modifica questo ruolo' ,nl: 'Pas deze rol aan' ,zh_cn: '编辑角色' + ,pl: 'Edytuj rolę' } ,'Admin authorized' : { cs: 'Admin autorizován' + ,he: 'מנהל אושר ' ,bg: 'Оторизиран като администратор' + ,fr: 'Administrateur autorisé' ,ro: 'Autorizat de admin' + ,es: 'Administrador autorizado' ,ru: 'Разрешено администратором' ,sv: 'Administratorgodkänt' ,nb: 'Administratorgodkjent' ,fi: 'Ylläpitäjä valtuutettu' ,de: 'Admin Authorisierung' + ,dk: 'Administratorgodkendt' ,pt: 'Administrador autorizado' ,sk: 'Admin autorizovaný' ,ko: '인증된 관리자' @@ -8669,268 +9470,353 @@ function init() { ,nl: 'Admin geauthoriseerd' ,zh_cn: '已授权' ,zh_tw: '已授權' + ,pl: 'Administrator autoryzowany' } ,'Subjects - People, Devices, etc' : { cs: 'Subjekty - Lidé, zařízení atd.' + ,he: 'נושאים - אנשים, התקנים וכו ' ,bg: 'Субекти - Хора,Устройства,т.н.' + ,fr: 'Utilisateurs - Personnes, Appareils, etc' ,ro: 'Subiecte - Persoane, dispozitive, etc' + ,es: 'Sujetos - Personas, Dispositivos, etc' ,ru: 'Субъекты - Люди, устройства и т п' ,sv: 'Ämnen - Användare, Enheter, etc' ,nb: 'Ressurser - Brukere, enheter osv' ,fi: 'Käyttäjät (Ihmiset, laitteet jne)' ,de: 'Subjekte - Menschen, Geräte, etc' + ,dk: 'Emner - Brugere, Enheder, etc' ,pt: 'Assunto - Pessoas, dispositivos, etc' ,sk: 'Subjekty - ľudia, zariadenia atď...' ,ko: '주제 - 사람, 기기 등' ,it: 'Soggetti - persone, dispositivi, etc' ,nl: 'Onderwerpen - Mensen, apparaten etc' ,zh_cn: '用户 - 人、设备等' + ,pl: 'Obiekty - ludzie, urządzenia itp' } ,'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.' : { cs: 'Každý subjekt má svůj unikátní token a 1 nebo více rolí. Klikem na přístupový token se otevře nové okno pro tento subjekt. Tento link je možné sdílet.' + ,he: 'לכל נושא תהיה אסימון גישה ייחודי ותפקיד אחד או יותר. לחץ על אסימון הגישה כדי לפתוח תצוגה חדשה עם הנושא הנבחר, קישור סודי זה יכול להיות משותף ' ,bg: 'Всеки обект ще има уникален ключ за достъп и 1 или повече роли. Кликнете върху ключа за достъп, за да отворите нов изглед с избрания обект, тази секретна връзка може след това да се споделя' + ,fr: 'Chaque utilisateur aura un identificateur unique et un ou plusieurs rôles. Cliquez sur l\'identificateur pour révéler l\'utilisateur, ce lien secret peut être partagé.' ,ro: 'Fiecare subiect va avea o cheie unică de acces și unul sau mai multe roluri. Apăsați pe cheia de acces pentru a vizualiza subiectul selectat, acest link poate fi distribuit.' ,ru: 'Каждый субъект получает уникальный код доступа и 1 или более ролей. Нажмите на иконку кода доступа чтобы открыть новое окно с выбранным субъектом, эту секретную ссылку можно переслать.' + ,es: 'Cada sujeto tendrá un identificador de acceso único y 1 o más roles. Haga clic en el identificador de acceso para abrir una nueva vista con el tema seleccionado, este enlace secreto puede ser compartido.' ,sv: 'Varje ämne får en unik säkerhetsnyckel och en eller flera roller. Klicka på accessnyckeln för att öppna en ny vy med det valda ämnet, denna hemliga länk kan sedan delas.' ,nb: 'Hver enkelt ressurs får en unik sikkerhetsnøkkel og en eller flere roller. Klikk på sikkerhetsnøkkelen for å åpne valgte ressurs, den hemmelige lenken kan så deles.' ,fi: 'Jokaisella käyttäjällä on uniikki pääsytunniste ja yksi tai useampi rooli. Klikkaa pääsytunnistetta nähdäksesi käyttäjän, jolloin saat jaettavan osoitteen tämän käyttäjän oikeuksilla.' - ,de: 'Jedes Subjekt erhält einen einzigartigen Zugriffsschlüssel und eine oder mehrere Rollen. Klicke auf den Zugriffsschlüssel um eine neue Ansicht mit dem ausgewählten Subjekt zu erhalten, dieser geheime Link kann geteilt werden.' + ,de: 'Jedes Subjekt erhält einen einzigartigen Zugriffsschlüssel und eine oder mehrere Rollen. Klicke auf den Zugriffsschlüssel, um eine neue Ansicht mit dem ausgewählten Subjekt zu erhalten. Dieser geheime Link kann geteilt werden.' + ,dk: 'Hvert emne vil have en unik sikkerhedsnøgle og en eller flere roller. Klik på sikkerhedsnøglen for at åbne et nyt view med det valgte emne, dette hemmelige link kan derefter blive delt.' ,pt: 'Cada assunto terá um único token de acesso e uma ou mais Funções. Clique no token de acesso para abrir uma nova visualização com o assunto selecionado. Este link secreto poderá então ser compartilhado' ,sk: 'Každý objekt má svoj unikátny prístupový token a 1 alebo viac rolí. Klikni na prístupový token pre otvorenie nového okna pre tento subjekt. Tento link je možné zdielať.' ,ko: '각 주제는 유일한 access token을 가지고 1 또는 그 이상의 역할을 가질 것이다. 선택된 주제와 새로운 뷰를 열기 위해 access token을 클릭하세요. 이 비밀 링크는 공유되어질 수 있다.' ,it: '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.' ,nl: 'Elk onderwerp heeft een unieke toegangscode en 1 of meer rollen. Klik op de toegangscode om een nieu venster te openen om het onderwerp te bekijken, deze verborgen link kan gedeeld worden.' ,zh_cn: '每个用户具有唯一的访问令牌和一个或多个角色。在访问令牌上单击打开新窗口查看已选择用户,此时该链接可分享。' + ,pl: 'Każdy obiekt będzie miał unikalny token dostępu i jedną lub więcej ról. Kliknij token dostępu, aby otworzyć nowy widok z wybranym obiektem, ten tajny link może być następnie udostępniony' } ,'Add new Subject' : { cs: 'Přidat nový subjekt' + ,he: 'הוסף נושא חדש ' ,bg: 'Добави нов субект' + ,fr: 'Ajouter un nouvel Utilisateur' ,ro: 'Adaugă un Subiect nou' ,ru: 'Добавить нового субъекта' ,sv: 'Lägg till nytt ämne' ,nb: 'Legg til ny ressurs' ,fi: 'Lisää uusi käyttäjä' ,de: 'Füge ein neues Subjekt hinzu' + ,dk: 'Tilføj nye emner' + ,es: 'Añadir nuevo Sujeto' ,pt: 'Adicionar novo assunto' ,sk: 'Pridať nový subjekt' ,ko: '새 주제 추가' ,it: 'Aggiungere un nuovo Soggetto' ,nl: 'Voeg onderwerp toe' ,zh_cn: '添加新用户' + ,pl: 'Dodaj obiekt' } ,'Unable to %1 Subject' : { // PUT or POST cs: 'Chyba volání %1 Subjektu:' + ,en: 'לא יכול ל %1 נושאי' ,bg: 'Невъзможно %1 субект' ,ro: 'Imposibil de %1 Subiectul' + ,fr: 'Impossible de créer l\'Utilisateur %1' ,ru: 'Невозможно %1 субъекта' ,sv: 'Kan ej %1 ämne' ,nb: 'Kan ikke %1 ressurs' ,fi: '%1 operaatio käyttäjälle epäonnistui' ,de: 'Unpassend zum %1 Subjekt' + ,dk: 'Kan ikke %1 emne' + ,es: 'Imposible poner %1 Sujeto' ,pt: 'Impossível postar %1 assunto' ,sk: 'Chyba volania %1 subjektu' ,ko: '%1 주제 비활성화' ,it: 'Incapace di %1 sottoporre' ,nl: 'Niet in staat %1 Onderwerp' ,zh_cn: '%1用户不可用' + ,pl: 'Nie można %1 obiektu' } ,'Unable to delete Subject' : { cs: 'Nelze odstranit Subjekt:' + ,he: 'לא יכול לבטל נושא ' ,bg: 'Невъзможно изтриването на субекта' ,ro: 'Imposibil de șters Subiectul' + ,fr: 'Impossible d\'effacer l\'Utilisateur' ,ru: 'Невозможно удалить ' ,sv: 'Kan ej ta bort ämne' ,nb: 'Kan ikke slette ressurs' ,fi: 'Käyttäjän poistaminen epäonnistui' ,de: 'Kann Subjekt nicht löschen' + ,dk: 'Kan ikke fjerne emne' + ,es: 'Imposible eliminar sujeto' ,pt: 'Impossível apagar assunto' ,sk: 'Subjekt sa nedá odstrániť' ,ko: '주제를 지우기 위해 비활성화' ,it: 'Impossibile eliminare Soggetto' ,nl: 'Kan onderwerp niet verwijderen' ,zh_cn: '无法删除用户' + ,pl: 'Nie można usunąć obiektu' } ,'Database contains %1 subjects' : { cs: 'Databáze obsahuje %1 subjektů' + ,he: 'מסד נתונים מכיל %1 נושאים ' ,bg: 'Базата данни съдържа %1 субекти' + ,fr: 'La base de données contient %1 utilisateurs' ,fi: 'Tietokanta sisältää %1 käyttäjää' ,ru: 'База данных содержит %1 субъект(а/ов)' ,ro: 'Baza de date are %1 subiecți' ,sv: 'Databasen innehåller %1 ämnen' ,nb: 'Databasen inneholder %1 ressurser' ,de: 'Datenbank enthält %1 Subjekte' + ,dk: 'Databasen indeholder %1 emner' + ,es: 'Base de datos contiene %1 sujetos' ,pt: 'Banco de dados contém %1 assuntos' ,sk: 'Databáza obsahuje %1 subjektov' ,ko: '데이터베이스는 %1 주제를 포함' ,it: 'Database contiene %1 soggetti' ,nl: 'Database bevat %1 onderwerpen' ,zh_cn: '数据库包含%1个用户' + ,pl: 'Baza danych zawiera %1 obiektów' } ,'Edit Subject' : { cs:'Editovat subjekt' + ,he: 'ערוך נושא ' ,bg: 'Промени субект' ,ro: 'Editează Subiectul' + ,es: 'Editar sujeto' + ,fr: 'Éditer l\'Utilisateur' ,ru: 'Редактировать субъекта' ,sv: 'Editera ämne' ,nb: 'Editer ressurs' ,fi: 'Muokkaa käyttäjää' ,de: 'Editiere Subjekt' + ,dk: 'Rediger emne' ,pt: 'Editar assunto' ,sk: 'Editovať subjekt' ,ko: '주제 편집' ,it: 'Modifica Oggetto' ,nl: 'Pas onderwerp aan' ,zh_cn: '编辑用户' + ,pl: 'Edytuj obiekt' } ,'person, device, etc' : { cs:'osoba, zařízeni atd.' + ,he: 'אדם, מכשיר, וכו ' ,bg: 'човек,устройство,т.н.' ,ro: 'persoană, dispozitiv, etc' + ,fr: 'personne, appareil, etc' ,ru: 'лицо, устройство и т п' ,sv: 'person,enhet,etc' ,nb: 'person, enhet osv' ,fi: 'henkilö, laite jne' ,de: 'Person, Gerät, etc' + ,dk: 'person, emne, etc' + ,es: 'Persona, dispositivo, etc' ,pt: 'Pessoa, dispositivo, etc' ,sk: 'osoba, zariadenie atď...' ,ko: '사람, 기기 등' ,it: 'persona, dispositivo, ecc' ,nl: 'persoon, apparaat etc' ,zh_cn: '人、设备等' + ,pl: 'osoba, urządzenie, itp' } ,'role1, role2' : { cs:'role1, role2' + ,he: 'תפקיד1, תפקיד2 ' ,bg: 'Роля1, Роля2' ,ro: 'Rol1, Rol2' + ,fr: 'rôle1, rôle2' ,ru: 'Роль1, Роль2' ,sv: 'Roll1, Roll2' ,nb: 'rolle1, rolle2' ,fi: 'rooli1, rooli2' ,de: 'Rolle1, Rolle2' + ,dk: 'Rolle1, Rolle2' ,pt: 'papel1, papel2' + ,es: 'Rol1, Rol2' ,sk: 'rola1, rola2' ,ko: '역할1, 역할2' ,it: 'ruolo1, ruolo2' ,nl: 'rol1, rol2' ,zh_cn: '角色1、角色2' + ,pl: 'rola1, rola2' } ,'Edit this subject' : { cs:'Editovat tento subjekt' + ,he: 'ערוך נושא זה ' ,bg: 'Промени този субект' ,ro: 'Editează acest subiect' + ,fr: 'Éditer cet utilisateur' ,ru: 'Редактировать этого субъекта' ,sv: 'Editera ämnet' + ,es: 'Editar este sujeto' ,nb: 'Editer ressurs' ,fi: 'Muokkaa tätä käyttäjää' ,de: 'Editiere dieses Subjekt' + ,dk: 'Rediger emne' ,pt: 'Editar esse assunto' ,sk: 'Editovať tento subjekt' ,ko: '이 주제 편집' ,it: 'Modifica questo argomento' ,nl: 'pas dit onderwerp aan' ,zh_cn: '编辑此用户' + ,pl: 'Edytuj ten obiekt' } ,'Delete this subject' : { cs:'Smazat tento subjekt' + ,he: 'בטל נושא זה ' ,bg: 'Изтрий този субект' ,ro: 'Șterge acest subiect' + ,fr: 'Effacer cet utilisateur:' ,ru: 'Удалить этого субъекта' ,sv: 'Ta bort ämnet' ,nb: 'Slett ressurs' ,fi: 'Poista tämä käyttäjä' ,de: 'Lösche dieses Subjekt' + ,dk: 'Fjern emne' + ,es: 'Eliminar este sujeto' ,pt: 'Apagar esse assunto' ,sk: 'Zmazať tento subjekt' ,ko: '이 주제 삭제' ,it: 'Eliminare questo argomento' ,nl: 'verwijder dit onderwerp' ,zh_cn: '删除此用户' + ,pl: 'Usuń ten obiekt' } ,'Roles' : { cs:'Role' + ,he: 'תפקידים ' ,bg: 'Роли' ,ro: 'Roluri' + ,fr: 'Rôles' ,ru: 'Роли' ,sv: 'Roller' ,nb: 'Roller' + ,es: 'Roles' ,fi: 'Rooli' ,de: 'Rollen' + ,dk: 'Roller' ,pt: 'Papéis' ,sk: 'Rola' ,ko: '역할' ,it: 'Ruoli' ,nl: 'Rollen' ,zh_cn: '角色' + ,pl: 'Role' } ,'Access Token' : { cs:'Přístupový token' + ,he: 'אסימון גישה ' ,bg: 'Ключ за достъп' ,ro: 'Cheie de acces' + ,fr: 'Identificateur unique' ,ru: 'Код доступа' ,sv: 'Åtkomstnyckel' ,nb: 'Tilgangsnøkkel' ,fi: 'Pääsytunniste' ,de: 'Zugriffsschlüssel' + ,dk: 'Sikkerhedsnøgle' ,pt: 'Token de acesso' + ,es: 'Acceso Identificador' ,sk: 'Prístupový Token' ,ko: 'Access Token' ,it: 'Gettone d\'accesso' ,nl: 'toegangscode' ,zh_cn: '访问令牌' + ,pl: 'Token dostępu' } ,'hour ago' : { cs:'hodina zpět' + ,he: 'לפני שעה ' ,bg: 'Преди час' - ,ro: 'oră trecut' + ,fr: 'heure avant' + ,ro: 'oră în trecut' ,ru: 'час назад' ,sv: 'timme sedan' ,nb: 'time siden' ,fi: 'tunti sitten' ,de: 'vor einer Stunde' + ,dk: 'time siden' + ,es: 'hora atrás' ,pt: 'hora atrás' ,sk: 'pred hodinou' ,ko: '시간 후' ,it: 'ora fa' ,nl: 'uur geleden' ,zh_cn: '小时前' + ,pl: 'Godzię temu' } ,'hours ago' : { cs:'hodin zpět' + ,he: 'לפני שעות ' ,bg: 'Преди часове' - ,ro: 'ore trecute' + ,fr: 'heures avant' + ,ro: 'ore în trecut' ,ru: 'часов назад' ,sv: 'timmar sedan' ,nb: 'timer siden' ,fi: 'tuntia sitten' ,de: 'vor mehreren Stunden' + ,dk: 'timer sidan' + ,es: 'horas atrás' ,pt: 'horas atrás' ,sk: 'hodín pred' ,ko: '시간 후' ,it: 'ore fa' ,nl: 'uren geleden' ,zh_cn: '小时前' + ,pl: 'Godzin temu' } ,'Silence for %1 minutes' : { cs:'Ztlumit na %1 minut' + ,he: 'שקט ל %1 דקות ' ,bg: 'Заглушаване за %1 минути' ,ro: 'Liniște pentru %1 minute' + ,fr: 'Silence pour %1 minutes' ,ru: 'Молчание %1 минут' ,sv: 'Tyst i %1 minuter' ,nb: 'Stille i %1 minutter' ,fi: 'Hiljennä %1 minuutiksi' ,de: 'Inaktivität für %1 Minuten' + ,dk: 'Stilhed i %1 minutter' ,pt: 'Silencir por %1 minutos' + ,es: 'Silenciado por %1 minutos' ,sk: 'Stíšiť na %1 minút' ,ko: '%1 분 동안 무음' ,it: 'Silenzio per %1 minuti' ,nl: 'Sluimer %1 minuten' ,zh_cn: '静音%1分钟' ,zh_tw: '靜音%1分鐘' + ,pl: 'Wycisz na %1 minut' } ,'Check BG' : { cs:'Zkontrolovat glykémii' + ,he: 'בדוק סוכר בדם ' ,de: 'BZ kontrollieren' + ,dk: 'Kontroler blodglukos' ,ro: 'Verificați glicemia' + ,es: 'Verificar glucemia' + ,fr: 'Vérifier la glycémie' ,ru: 'Проверьте гликемию' ,sv: 'Kontrollera blodglukos' ,nb: 'Sjekk blodsukker' @@ -8942,11 +9828,16 @@ function init() { ,it: 'Controllare BG' ,nl: 'Controleer BG' ,zh_cn: '测量血糖' + ,pl: 'Sprawdź glukozę z krwi' } ,'BASAL' : { - cs:'BAZÁL' + cs: 'BAZÁL' + ,he: 'רמה בזלית ' + ,de: 'BASAL' + ,dk: 'BASAL' ,ro: 'Bazală' ,ru: 'Базал' + ,fr: 'Basale' ,sk: 'BAZÁL' ,sv: 'BASAL' ,nb: 'BASAL' @@ -8954,51 +9845,67 @@ function init() { ,pt: 'BASAL' ,bg: 'Базал' ,ko: 'BASAL' + ,es: 'BASAL' ,it: 'BASALE' ,nl: 'Basaal' ,zh_cn: '基础率' ,zh_tw: '基礎率' + ,pl: 'BAZA' } ,'Current basal' : { cs:'Současný bazál' + ,he: 'רמה בזלית נוכחית ' ,de: 'Aktuelle Basalrate' + ,dk: 'Nuværende basal' ,ro: 'Bazala curentă' + ,fr: 'Débit basal actuel' ,ru: 'Актуальный базал' ,sk: 'Aktuálny bazál' ,sv: 'Nuvarande basal' ,nb: 'Gjeldende basal' ,fi: 'Nykyinen basaali' ,pt: 'Basal atual' + ,es: 'Basal actual' ,bg: 'Актуален базал' ,ko: '현재 basal' ,it: 'Basale corrente' ,nl: 'Huidige basaal' ,zh_cn: '当前基础率' + ,pl: 'Dawka podstawowa' } ,'Sensitivity' : { cs:'Citlivost (ISF)' + ,he: 'רגישות ' ,de: 'Sensitivität' + ,dk: 'Insulinfølsomhed (ISF)' ,ro: 'Sensibilitate la insulină (ISF)' + ,fr: 'Sensibilité à l\'insuline (ISF)' ,ru: 'Чуствительность к инсулину' ,sk: 'Citlivosť (ISF)' ,sv: 'Insulinkönslighet (ISF)' ,nb: 'Insulinsensitivitet (ISF)' ,fi: 'Herkkyys' + ,es: 'Sensibilidad' ,pt: 'Fator de sensibilidade' ,bg: 'Инсулинова чувствителност (ISF)' ,ko: '인슐린 민감도(ISF)' ,it: 'ISF - sensibilità' ,nl: 'Gevoeligheid' ,zh_cn: '胰岛素敏感系数' + ,pl: 'Wrażliwość' } ,'Current Carb Ratio' : { cs:'Sacharidový poměr (I:C)' + ,he: 'וחס פחמימות לאינסולין נוכחי ' ,de: 'Aktuelles KH-Verhältnis' - ,ro: 'Report Insulină:Carbohidrați (ICR)' + ,dk: 'Nuværende kulhydratratio' + ,fr: 'Rapport Insuline-glucides actuel (I:C)' + ,ro: 'Raport Insulină:Carbohidrați (ICR)' ,ru: 'Актуальное соотношение инсулин:углеводы' ,sk: 'Aktuálny sacharidový pomer (I"C)' ,sv: 'Gällande kolhydratkvot' ,nb: 'Gjeldende karbohydratforhold' + ,es: 'Relación actual Insulina:Carbohidratos' ,pt: 'Relação insulina:carboidrato atual' ,fi: 'Nykyinen hiilihydraattiherkkyys' ,bg: 'Актуално Въглехидратно Съотношение' @@ -9006,11 +9913,16 @@ function init() { ,it: 'Attuale rapporto I:C' ,nl: 'Huidige KH ratio' ,zh_cn: '当前碳水化合物系数' + ,pl: 'Obecny przelicznik węglowodanowy' } ,'Basal timezone' : { cs:'Časová zóna' + ,he: 'איזור זמן לרמה הבזלית ' ,de: 'Basal Zeitzone' + ,dk: 'Basal tidszone' ,ro: 'Fus orar pentru bazală' + ,es: 'Zona horaria basal' + ,fr: 'Fuseau horaire' ,ru: 'Временная зона базала' ,sk: 'Časová zóna pre bazál' ,sv: 'Basal tidszon' @@ -9022,92 +9934,123 @@ function init() { ,it: 'fuso orario basale' ,nl: 'Basaal tijdzone' ,zh_cn: '基础率时区' + ,pl: 'Strefa czasowa dawki podstawowej' } ,'Active profile' : { cs:'Aktivní profil' + ,he: 'פרופיל פעיל ' ,de: 'Aktives Profil' + ,dk: 'Aktiv profil' ,ro: 'Profilul activ' + ,fr: 'Profil actif' ,ru: 'Действующий профиль' ,sk: 'Aktívny profil' ,sv: 'Aktiv profil' ,nb: 'Aktiv profil' ,pt: 'Perfil ativo' + ,es: 'Perfil activo' ,fi: 'Aktiivinen profiili' ,bg: 'Активен профил' ,ko: '활성 프로파일' ,it: 'Attiva profilo' ,nl: 'Actief profiel' ,zh_cn: '当前配置文件' + ,pl: 'Profil aktywny' } ,'Active temp basal' : { cs:'Aktivní dočasný bazál' + ,he: 'רמה בזלית זמנית פעילה ' ,de: 'Aktive temp. Basalrate' + ,dk: 'Aktiv tempbasal' ,ro: 'Bazală temporară activă' + ,fr: 'Débit basal temporaire actif' ,ru: 'Активный временный базал' ,sk: 'Aktívny dočasný bazál' ,sv: 'Aktiv tempbasal' ,nb: 'Aktiv midlertidig basal' ,pt: 'Basal temporária ativa' + ,es: 'Basal temporal activa' ,fi: 'Aktiivinen tilapäisbasaali' ,bg: 'Активен временен базал' ,ko: '활성 임시 basal' ,it: 'Attiva Basale Temp' ,nl: 'Actieve tijdelijke basaal' ,zh_cn: '当前临时基础率' + ,pl: 'Aktywa tymczasowa dawka podstawowa' } ,'Active temp basal start' : { cs:'Začátek dočasného bazálu' + ,he: 'התחלה רמה בזלית זמנית ' ,de: 'Start aktive temp. Basalrate' + ,dk: 'Aktiv tempbasal start' ,ro: 'Start bazală temporară activă' + ,fr: 'Début du débit basal temporaire' ,ru: 'Старт активного временного базала' ,sk: 'Štart dočasného bazálu' ,sv: 'Aktiv tempbasal start' ,nb: 'Aktiv midlertidig basal start' ,pt: 'Início da basal temporária ativa' + ,es: 'Inicio Basal temporal activa' ,fi: 'Aktiivisen tilapäisbasaalin aloitus' ,bg: 'Старт на активен временен базал' ,ko: '활성 임시 basal 시작' ,it: 'Attiva Inizio Basale temp' ,nl: 'Actieve tijdelijke basaal start' ,zh_cn: '当前临时基础率开始' + ,pl: 'Start aktywnej tymczasowej dawki podstawowej' } ,'Active temp basal duration' : { cs:'Trvání dočasného bazálu' + ,he: 'משך רמה בזלית זמנית ' ,de: 'Dauer aktive temp. Basalrate' + ,dk: 'Aktiv tempbasal varighed' ,ro: 'Durata bazalei temporare active' + ,fr: 'Durée du débit basal temporaire' ,ru: 'Длительность активного временного базала' ,sk: 'Trvanie dočasného bazálu' ,sv: 'Aktiv tempbasal varaktighetstid' ,nb: 'Aktiv midlertidig basal varighet' ,pt: 'Duração de basal temporária ativa' + ,es: 'Duración Basal Temporal activa' ,fi: 'Aktiivisen tilapäisbasaalin kesto' ,bg: 'Продължителност на Активен временен базал' ,ko: '활성 임시 basal 시간' ,it: 'Attiva durata basale temp' ,nl: 'Actieve tijdelijk basaal duur' ,zh_cn: '当前临时基础率期间' + ,pl: 'Czas trwania aktywnej tymczasowej dawki podstawowej' } ,'Active temp basal remaining' : { cs:'Zbývající dočasný bazál' + ,he: 'זמן שנשאר ברמה בזלית זמנית ' ,de: 'Verbleibene Dauer temp. Basalrate' + ,dk: 'Resterende aktiv tempbasal' ,ro: 'Rest de bazală temporară activă' + ,fr: 'Durée restante de débit basal temporaire' ,ru: 'Остаток акивного временного базала' ,sk: 'Zostatok dočasného bazálu' ,sv: 'Återstående tempbasaltid' ,nb: 'Gjenstående midlertidig basal tid' ,pt: 'Basal temporária ativa restante' + ,es: 'Basal temporal activa restante' ,fi: 'Aktiivista tilapäisbasaalia jäljellä' ,bg: 'Оставащ Активен временен базал' ,ko: '남아 있는 활성 임시 basal' ,it: 'Attiva residuo basale temp' ,nl: 'Actieve tijdelijke basaal resteert' ,zh_cn: '当前临时基础率剩余' + ,pl: 'Pozostała aktywna tymczasowa dawka podstawowa' } ,'Basal profile value' : { - cs:'Základní hodnota bazálu' + cs: 'Základní hodnota bazálu' + ,he: 'רמה בזלית מפרופיל ' + ,de: 'Basal-Profil Wert' + ,dk: 'Basalprofil værdi' ,ro: 'Valoarea profilului bazalei' ,ru: 'Значение профайла базала' + ,fr: 'Valeur du débit basal' ,sv: 'Basalprofil värde' + ,es: 'Valor perfil Basal' ,nb: 'Basalprofil verdi' ,fi: 'Basaaliprofiilin arvo' ,pt: 'Valor do perfil basal' @@ -9117,42 +10060,60 @@ function init() { ,it: 'Valore profilo basale' ,nl: 'Basaal profiel waarde' ,zh_cn: '基础率配置文件值' + ,pl: 'Wartość profilu podstawowego' } ,'Active combo bolus' : { cs:'Aktivní kombinovaný bolus' + ,he: 'בולוס קומבו פעיל ' + ,de: 'Aktiver verzögerter Bolus' + ,dk: 'Aktiv kombobolus' ,ro: 'Bolus combinat activ' + ,fr: 'Bolus Duo/Combo actif' ,ru: 'Активный комбинированный болюс' ,sv: 'Aktiv kombobolus' ,nb: 'Kombinasjonsbolus' ,fi: 'Aktiivinen yhdistelmäbolus' ,pt: 'Bolus duplo em atividade' + ,es: 'Activo combo-bolo' ,sk: 'Aktívny kombinovaný bolus' ,bg: '' ,ko: '활성 콤보 bolus' ,it: 'Attiva Combo bolo' ,nl: 'Actieve combo bolus' ,zh_cn: '当前双波大剂量' + ,pl: 'Aktywny bolus złożony' } ,'Active combo bolus start' : { - cs:'Začátek kombinovaného bolusu' + cs: 'Začátek kombinovaného bolusu' + ,he: 'התחלת בולוס קומבו פעיל ' + ,de: 'Start des aktiven verzögerten Bolus' + ,dk: 'Aktiv kombibolus start' ,ro: 'Start bolus combinat activ' + ,fr: 'Début de Bolus Duo/Combo' ,ru: 'Старт активного комбо болюса' ,sv: 'Aktiv kombobolus start' ,nb: 'Kombinasjonsbolus start' ,fi: 'Aktiivisen yhdistelmäboluksen alku' ,pt: 'Início do bolus duplo em atividade' + ,es: 'Inicio del combo-bolo activo' ,sk: 'Štart kombinovaného bolusu' ,bg: 'Активен комбиниран болус' ,ko: '활성 콤보 bolus 시작' ,it: 'Attivo inizio Combo bolo' ,nl: 'Actieve combo bolus start' ,zh_cn: '当前双波大剂量开始' + ,pl: 'Start aktywnego bolusa złożonego' } ,'Active combo bolus duration' : { - cs:'Trvání kombinovaného bolusu' + cs: 'Trvání kombinovaného bolusu' + ,he: 'משך בולוס קומבו פעיל ' + ,de: 'Dauer des aktiven verzögerten Bolus' + ,dk: 'Aktiv kombibolus varighed' ,ro: 'Durată bolus combinat activ' + ,fr: 'Durée du Bolus Duo/Combo' ,ru: 'Длительность активного комбо болюса' ,sv: 'Aktiv kombibolus varaktighet' + ,es: 'Duración del Combo-Bolo activo' ,nb: 'Kombinasjonsbolus varighet' ,fi: 'Aktiivisen yhdistelmäboluksen kesto' ,pt: 'Duração de bolus duplo em atividade' @@ -9162,12 +10123,18 @@ function init() { ,it: 'Attivo durata Combo bolo' ,nl: 'Actieve combo bolus duur' ,zh_cn: '当前双波大剂量期间' + ,pl: 'Czas trwania aktywnego bolusa złożonego' } ,'Active combo bolus remaining' : { - cs:'Zbývající kombinovaný bolus' + cs: 'Zbývající kombinovaný bolus' + ,he: 'זמן שנשאר בבולוס קומבו פעיל ' + ,de: 'Verbleibender aktiver verzögerter Bolus' + ,dk: 'Resterende aktiv kombibolus' ,ro: 'Rest de bolus combinat activ' + ,fr: 'Activité restante du Bolus Duo/Combo' ,ru: 'Остаток активного комбо болюса' ,sv: 'Återstående aktiv kombibolus' + ,es: 'Restante Combo-Bolo activo' ,nb: 'Gjenstående kombinasjonsbolus' ,fi: 'Aktiivista yhdistelmäbolusta jäljellä' ,pt: 'Restante de bolus duplo em atividade' @@ -9177,16 +10144,21 @@ function init() { ,it: 'Attivo residuo Combo bolo' ,nl: 'Actieve combo bolus resteert' ,zh_cn: '当前双波大剂量剩余' + ,pl: 'Pozostały aktywny bolus złożony' } ,'BG Delta' : { cs:'Změna glykémie' + ,he: 'הפרש רמת סוכר ' ,de: 'BZ Differenz' + ,dk: 'BS deltaværdi' ,ro: 'Diferență glicemie' + ,fr: 'Différence de glycémie' ,ru: 'Изменение гликемии' ,sv: 'BS deltavärde' ,nb: 'BS forskjell' ,fi: 'VS muutos' ,pt: 'Diferença de glicemia' + ,es: 'Diferencia de glucemia' ,sk: 'Zmena glykémie' ,bg: 'Изменение КЗ' ,ko: '혈당 차이' @@ -9194,16 +10166,21 @@ function init() { ,nl: 'BG Delta' ,zh_cn: '血糖增量' ,zh_tw: '血糖增量' + ,pl: 'Zmiana glikemii' } ,'Elapsed Time' : { cs:'Dosažený čas' + ,he: 'זמן שעבר ' ,de: 'Vergangene Zeit' + ,dk: 'Forløbet tid' ,ro: 'Timp scurs' + ,fr: 'Temps écoulé' ,ru: 'Прошло времени' ,sv: 'Förfluten tid' ,nb: 'Forløpt tid' ,fi: 'Kulunut aika' ,pt: 'Tempo transcorrido' + ,es: 'Tiempo transcurrido' ,sk: 'Uplynutý čas' ,bg: 'Изминало време' ,ko: '경과 시간' @@ -9211,16 +10188,21 @@ function init() { ,nl: 'Verstreken tijd' ,zh_cn: '所需时间' ,zh_tw: '所需時間' + ,pl: 'Upłynął czas' } ,'Absolute Delta' : { cs:'Absolutní rozdíl' + ,he: 'הפרש רמת סוכר אבסולוטית ' ,de: 'Absolute Differenz' + ,dk: 'Absolut deltaværdi' ,ro: 'Diferență absolută' + ,fr: 'Différence absolue' ,ru: 'Абсолютное изменение' ,sv: 'Absolut deltavärde' ,nb: 'Absolutt forskjell' ,fi: 'Absoluuttinen muutos' ,pt: 'Diferença absoluta' + ,es: 'Diferencia absoluta' ,sk: 'Absolútny rozdiel' ,bg: 'Абсолютно изменение' ,ko: '절대적인 차이' @@ -9228,16 +10210,21 @@ function init() { ,nl: 'Abslute delta' ,zh_cn: '绝对增量' ,zh_tw: '絕對增量' + ,pl: 'różnica absolutna' } ,'Interpolated' : { cs:'Interpolováno' + ,he: 'אינטרפולציה ' ,de: 'Interpoliert' + ,dk: 'Interpoleret' ,ro: 'Interpolat' + ,fr: 'Interpolé' ,ru: 'Интерполировано' ,sv: 'Interpolerad' ,nb: 'Interpolert' ,fi: 'Laskettu' ,pt: 'Interpolado' + ,es: 'Interpolado' ,sk: 'Interpolované' ,bg: 'Интерполирано' ,ko: '삽입됨' @@ -9245,12 +10232,18 @@ function init() { ,nl: 'Geinterpoleerd' ,zh_cn: '插值' ,zh_tw: '插值' + ,pl: 'Interpolowany' } ,'BWP' : { // Bolus Wizard Preview - cs:'KALK' + cs: 'KALK' + ,he: 'BWP' + ,de: 'BWP' + ,dk: 'Bolusberegner (BWP)' ,ro: 'Ajutor bolusare (BWP)' ,ru: 'Предпросмотр калькулятора болюса' + ,fr: 'Calculateur de bolus (BWP)' ,sv: 'Boluskalkylator' + ,es: 'VistaPreviaCalculoBolo (BWP)' ,nb: 'Boluskalkulator' ,fi: 'Annoslaskuri' ,pt: 'Ajuda de bolus' @@ -9261,12 +10254,17 @@ function init() { ,nl: 'BWP' ,zh_cn: 'BWP' ,zh_tw: 'BWP' + ,pl: 'Kalkulator bolusa' } ,'Urgent' : { cs:'Urgentní' + ,he: 'דחוף ' ,de: 'Akut' + ,dk: 'Akut' ,ro: 'Urgent' + ,fr: 'Urgent' ,ru: 'Срочно' + ,es: 'Urgente' ,sv: 'Akut' ,nb: 'Akutt' ,fi: 'Kiireellinen' @@ -9278,16 +10276,21 @@ function init() { ,nl: 'Urgent' ,zh_cn: '紧急' ,zh_tw: '緊急' + ,pl:'Pilny' } ,'Warning' : { cs:'Varování' + ,he: 'אזהרה ' ,de: 'Warnung' + ,dk: 'Advarsel' ,ro: 'Atenție' + ,fr: 'Attention' ,ru: 'Осторожно' ,sv: 'Varning' ,nb: 'Advarsel' ,fi: 'Varoitus' ,pt: 'Aviso' + ,es: 'Aviso' ,sk: 'Varovanie' ,bg: 'Предупреждение' ,ko: '경고' @@ -9295,15 +10298,21 @@ function init() { ,nl: 'Waarschuwing' ,zh_cn: '警告' ,zh_tw: '警告' + ,pl: 'Ostrzeżenie' } ,'Info' : { - cs:'Informativní' + cs: 'Informativní' + ,he: 'לידיעה ' + ,de: 'Info' + ,dk: 'Info' ,ro: 'Informație' + ,fr: 'Information' ,ru: 'Информация' ,sv: 'Information' ,nb: 'Informasjon' ,fi: 'Info' ,pt: 'Informações' + ,es: 'Información' ,sk: 'Info' ,bg: 'Информация' ,ko: '정보' @@ -9311,13 +10320,19 @@ function init() { ,nl: 'Info' ,zh_cn: '信息' ,zh_tw: '資訊' + ,pl: 'Informacja' } ,'Lowest' : { - cs:'Nejnižší' + cs: 'Nejnižší' + ,he: 'הנמוך ביותר ' + ,de: 'Niedrigster' + ,dk: 'Laveste' ,ro: 'Cea mai mică' ,ru: 'Самое нижнее' + ,fr: 'Valeur la plus basse' ,sv: 'Lägsta' ,nb: 'Laveste' + ,es: 'Más bajo' ,fi: 'Matalin' ,pt: 'Mais baixo' ,sk: 'Najnižsie' @@ -9327,11 +10342,17 @@ function init() { ,nl: 'Laagste' ,zh_cn: '血糖极低' ,zh_tw: '血糖極低' + ,pl: 'Niski' } ,'Snoozing high alarm since there is enough IOB' : { cs:'Vypínání alarmu vyskoké glykémie, protože je dostatek IOB' + ,he: 'נודניק את ההתראה הגבוהה מפני שיש מספיק אינסולין פעיל בגוף' + ,de: 'Ignoriere Alarm hoch, da genügend aktives Bolus-Insulin (IOB) vorhanden' + ,dk: 'Snoozer høj alarm siden der er nok aktiv insulin (IOB)' ,ro: 'Ignoră alarma de hiper deoarece este suficientă insulină activă IOB' + ,fr: 'Alarme haute ignorée car suffisamment d\'insuline à bord (IOB)' ,bg: 'Изключване на аларма за висока КЗ, тъй като има достатъчно IOB' + ,es: 'Ignorar alarma de Hiperglucemia al tener suficiente insulina activa' ,ru: 'Отключение предупреждение о высоком СК ввиду достаточности инсулина в организме' ,sv: 'Snoozar höglarm då aktivt insulin är tillräckligt' ,nb: 'Utsetter høyalarm siden det er nok aktivt insulin' @@ -9341,173 +10362,240 @@ function init() { ,it: 'Addormenta allarme alto poiché non vi è sufficiente IOB' ,nl: 'Snooze hoog alarm, er is genoeg IOB' ,zh_cn: '有足够的IOB(活性胰岛素),暂停高血糖警报' + ,pl: 'Wycisz alarm wysokiej glikemi, jest wystarczająco dużo aktywnej insuliny' } ,'Check BG, time to bolus?' : { cs:'Zkontrolovat glykémii, čas na bolus?' + ,he: 'בדוק רמת סוכר. צריך להוסיף אינסולין? ' ,de: 'BZ kontrollieren, ggf. Bolus abgeben?' + ,dk: 'Kontroler BS, tid til en bolus?' ,ro: 'Verifică glicemia, poate este necesar un bolus?' + ,fr: 'Vérifier la glycémie, bolus nécessaire ?' ,bg: 'Провери КЗ, не е ли време за болус?' ,ru: 'Проверьте СК, не пора ли ввести болюс?' ,sv: 'Kontrollera BS, dags att ge bolus?' ,nb: 'Sjekk blodsukker, på tide med bolus?' ,fi: 'Tarkista VS, aika bolustaa?' ,pt: 'Meça a glicemia, hora de bolus de correção?' + ,es: 'Controle su glucemia, ¿quizás un bolo Insulina?' ,sk: 'Skontrolovať glykémiu, čas na bolus?' ,it: 'Controllare BG, il tempo del bolo?' ,nl: 'Controleer BG, tijd om te bolussen?' ,zh_cn: '测量血糖,该输注大剂量了?' + ,pl: 'Sprawdź glikemię, czas na bolusa ?' } ,'Notice' : { cs:'Poznámka' + ,he: 'הודעה ' + ,de: 'Notiz' + ,dk: 'Note' ,ro: 'Notificare' ,ru: 'Заметка' + ,fr: 'Notification' ,bg: 'Известие' ,sv: 'Notering' + ,es: 'Nota' ,nb: 'NB' ,fi: 'Huomio' + ,nl: 'Notitie' ,pt: 'Nota' ,sk: 'Poznámka' ,it: 'Preavviso' ,zh_cn: '提示' + ,pl: 'Uwaga' } ,'required info missing' : { cs:'chybějící informace' + ,he: 'חסרה אינפורמציה ' ,de: 'Benötigte Information fehlt' + ,dk: 'nødvendig information mangler' ,ro: 'Informații importante lipsă' + ,fr: 'Information nécessaire manquante' ,ru: 'Отсутствует необходимая информация' ,bg: 'Липсва необходима информация' + ,sv: 'Nödvändig information saknas' ,nb: 'Nødvendig informasjon mangler' + ,es: 'Falta información requerida' ,fi: 'tarvittava tieto puuttuu' ,pt: 'Informação essencial faltando' ,sk: 'chýbajúca informácia' ,it: 'richiesta informazioni mancanti' ,nl: 'vereiste gegevens ontbreken' ,zh_cn: '所需信息不全' + ,pl: 'brak wymaganych informacji' } ,'Insulin on Board' : { cs:'Aktivní inzulín' + ,he: 'אינסולין פעיל בגוף ' ,de: 'Aktives Insulin' + ,dk: 'Aktivt insulin (IOB)' ,ro: 'Insulină activă (IOB)' + ,fr: 'Insuline à bord (IOB)' ,ru: 'Активный инсулин (IOB)' ,bg: 'Активен Инсулин (IOB)' ,sv: 'Aktivt insulin (IOB)' ,nb: 'Aktivt insulin (IOB)' ,fi: 'Aktiivinen insuliini' ,pt: 'Insulina ativa' + ,es: 'Insulina activa (IOB)' ,sk: 'Aktívny inzulín (IOB)' ,it: 'IOB - Insulina Attiva' ,nl: 'IOB - Inuline on board' ,zh_cn: '活性胰岛素(IOB)' + ,pl: 'Aktywna insulina' } ,'Current target' : { cs:'Aktuální cílová hodnota' + ,he: 'מטרה נוכחית ' ,de: 'Aktueller Zielbereich' + ,dk: 'Aktuelt mål' ,ro: 'Țintă curentă' + ,fr: 'Cible actuelle' ,ru: 'Актуальное целевое значение' ,bg: 'Настояща целева КЗ' ,sv: 'Aktuellt mål' ,nb: 'Gjeldende mål' ,fi: 'Tämänhetkinen tavoite' + ,es: 'Objetivo actual' ,pt: 'Meta atual' ,sk: 'Aktuálny cieľ' ,it: 'Obiettivo attuale' ,nl: 'huidig doel' ,zh_cn: '当前目标' + ,pl: 'Aktualny cel' } ,'Expected effect' : { cs:'Očekávaný efekt' + ,he: 'אפקט צפוי ' ,de: 'Erwarteter Effekt' + ,dk: 'Forventet effekt' ,ro: 'Efect presupus' + ,fr: 'Effect escompté' ,ru: 'Ожидаемый эффект' ,bg: 'Очакван ефект' ,sv: 'Förväntad effekt' ,nb: 'Forventet effekt' ,fi: 'Oletettu vaikutus' ,pt: 'Efeito esperado' + ,es: 'Efecto previsto' ,sk: 'Očakávaný efekt' ,it: 'Effetto Previsto' ,nl: 'verwacht effect' ,zh_cn: '预期效果' + ,pl: 'Oczekiwany efekt' } ,'Expected outcome' : { cs:'Očekávaný výsledek' + ,he: 'תוצאת צפויה ' ,de: 'Erwartetes Ergebnis' + ,dk: 'Forventet udfald' ,ro: 'Rezultat așteptat' + ,fr: 'Résultat escompté' ,ru: 'Ожидаемый результат' ,bg: 'Очакван резултат' - ,sv: 'Förvöntat resultat' + ,sv: 'Förväntat resultat' ,nb: 'Forventet resultat' ,fi: 'Oletettu lopputulos' ,pt: 'Resultado esperado' + ,es: 'Resultado previsto' ,sk: 'Očakávaný výsledok' ,it: 'Risultato previsto' ,nl: 'Veracht resultaat' ,zh_cn: '预期结果' + ,pl: 'Oczekowany resultat' } ,'Carb Equivalent' : { cs:'Ekvivalent v sacharidech' + ,he: 'מקבילה בפחמימות ' ,de: 'Kohlenhydrat-Äquivalent' + ,dk: 'Kulhydrat ækvivalent' ,ro: 'Echivalență în carbohidrați' + ,fr: 'Equivalent glucidique' ,ru: 'Эквивалент в углеводах' ,bg: 'Равностойност във ВХ' ,sv: 'Kolhydratsinnehåll' ,nb: 'Karbohydratekvivalent' + ,nl: 'Koolhydraat equivalent' ,fi: 'Hiilihydraattivastaavuus' + ,es: 'Equivalencia en Carbohidratos' ,pt: 'Equivalente em carboidratos' ,sk: 'Sacharidový ekvivalent' ,it: 'Carb equivalenti' ,zh_cn: '碳水当量' + ,pl: 'Odpowiednik w węglowodanach' } ,'Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs' : { cs:'Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. Nepočítáno se sacharidy.' + ,he: 'עודף אינסולין שווה ערך ליחידה אחת%1 יותר מאשר הצורך להגיע ליעד נמוך, לא לוקח בחשבון פחמימות ' ,de: 'Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig, Kohlenhydrate sind unberücksichtigt' + ,dk: 'Overskud af insulin modsvarande %1U mere end nødvændigt for at nå lav målværdi, kulhydrater ikke medregnet' + ,es: 'Exceso de insulina en %1U más de lo necesario para alcanzar un objetivo bajo, sin tener en cuenta los carbohidratos' ,ro: 'Insulină în exces: %1U mai mult decât este necesar pentru a atinge ținta inferioară, fără a ține cont de carbohidrați' + ,fr: 'Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, sans prendre en compte les glucides' ,bg: 'Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ВХ не се вземат под внимание' ,ru: 'Избыток инсулина равного %1U, необходимого для достижения нижнего целевого значения, углеводы не будут учтены' ,sv: 'Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, kolhydrater ej medräknade' ,nb: 'Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, karbohydrater ikke medregnet' + ,nl: 'Insulineoverschot van %1U om laag doel te behalen (excl. koolhydraten)' ,fi: 'Liikaa insuliinia: %1U enemmän kuin tarvitaan tavoitteeseen pääsyyn (huomioimatta hiilihydraatteja)' ,pt: 'Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior, sem levar em conta carboidratos' ,sk: 'Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. Neráta sa so sacharidmi.' ,it: 'L\'eccesso d\'insulina equivalente %1U più che necessari per raggiungere l\'obiettivo basso, non rappresentano i carboidrati.' ,nl: 'Overschot insuline %1U meer dan nodig om het laag doel te bereiken, geen rekening gehouden met KH' ,zh_cn: '胰岛素超过至血糖下限目标所需剂量%1单位,不计算碳水化合物' + , pl: 'Nadmiar insuliny, %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy, nie biorąc pod uwagę węglowodanów' } ,'Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS' : { cs:'Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. UJISTĚTE SE, ŽE JE TO POKRYTO SACHARIDY' + ,he: 'עודף אינסולין %1 נדרש כדי להגיע למטרה התחתונה. שים לב כי עליך לכסות אינסולין בגוף על ידי פחמימות ' ,de: 'Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig. SICHERSTELLEN, DASS IOB DURCH KOHLENHYDRATE ABGEDECKT WIRD' + ,dk: 'Overskud af insulin modsvarande %1U mere end nødvændigt for at nå lav målværdi, VÆR SIKKER PÅ AT IOB ER DÆKKET IND AF KULHYDRATER' ,ro: 'Insulină în exces: %1U mai mult decât este necesar pentru a atinge ținta inferioară, ASIGURAȚI-VĂ CĂ INSULINA ESTE ACOPERITĂ DE CARBOHIDRAȚI' + ,fr: 'Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, ASSUREZ UN APPORT SUFFISANT DE GLUCIDES' ,bg: 'Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ПРОВЕРИ ДАЛИ IOB СЕ ПОКРИВА ОТ ВЪГЛЕХИДРАТИТЕ' ,ru: 'Избыток инсулина, равного %1U, необходимого для достижения нижнего целевого значения, ПОКРОЙТЕ IOB ИНСУЛИН В ОРГАНИЗМЕ УГЛЕВОДАМИ' ,sv: 'Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, SÄKERSTÄLL ATT IOB TÄCKS AV KOLHYDRATER' + ,es: 'Exceso de insulina en %1U más de la necesaria para alcanzar objetivo inferior. ASEGÚRESE QUE LA INSULINA ACTIVA IOB ESTA CUBIERTA POR CARBOHIDRATOS' ,nb: 'Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, PASS PÅ AT AKTIVT INSULIN ER DEKKET OPP MED KARBOHYDRATER' + ,nl: 'Insulineoverschot van %1U om laag doel te behalen, ZORG VOOR VOLDOENDE KOOLHYDRATEN VOOR DE ACTIEVE INSULINE' ,fi: 'Liikaa insuliinia: %1U enemmän kuin tarvitaan tavoitteeseen pääsyyn, VARMISTA RIITTÄVÄ HIILIHYDRAATTIEN SAANTI' ,pt: 'Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior. ASSEGURE-SE DE QUE A IOB ESTEJA COBERTA POR CARBOIDRATOS' ,sk: 'Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. UISTITE SA, ŽE JE TO POKRYTÉ SACHARIDMI' ,it: 'L\'eccesso d\'insulina equivalente %1U più che necessario per raggiungere l\'obiettivo basso, ASSICURARSI IOB SIA COPERTO DA CARBOIDRATI' ,zh_cn: '胰岛素超过至血糖下限目标所需剂量%1单位,确认IOB(活性胰岛素)被碳水化合物覆盖' + ,pl: 'Nadmiar insuliny: o %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy. UPEWNIJ SIĘ, ŻE AKTYWNA INSULINA JEST POKRYTA WĘGLOWODANAMI' } ,'%1U reduction needed in active insulin to reach low target, too much basal?' : { cs:'Nutné snížení aktivního inzulínu o %1U k dosažení spodního cíle. Příliž mnoho bazálu?' - ,de: 'Aktives Insulins um %1U reduzieren, um Untergrenze zu erreichen. Basal zu hoch?' + ,he: 'צריך %1 פחות אינסולין כדי להגיע לגבול התחתון. האם הרמה הבזלית גבוהה מדי? ' + ,de: 'Aktives Insulin um %1U reduzieren, um Untergrenze zu erreichen. Basal zu hoch?' + ,dk: '%1U reduktion nødventid i aktiv insulin for at nå lav værdi, for meget basal?' ,ro: '%1U sunt în plus ca insulină activă pentru a atinge ținta inferioară, bazala este prea mare?' + ,fr: 'Réduction d\'insuline active nécessaire pour atteindre la cible inférieure. Débit basal trop élevé ?' ,bg: '%1U намаляне е необходимо в активния инсулин до достигане до долната граница, прекалено висок базал?' ,ru: 'Для достижения нижнего целевого значения необходимо понизить величину активного инсулина на %1U, велика база?' ,sv: '%1U minskning nödvändig i aktivt insulin för att nå lågt målvärde, för hög basal?' ,nb: '%1U reduksjon trengs i aktivt insulin for å nå lavt mål, for høy basal?' ,fi: 'Pääset tavoitteesen vähentämällä %1U aktiivista insuliinia, liikaa basaalia?' + ,es: 'Se necesita una reducción del %1U insulina activa para objetivo inferior, exceso en basal?' ,pt: 'Necessária redução de %1U na insulina ativa para atingir a meta inferior, excesso de basal?' + ,nl: '%1U reductie vereist in actieve insuline om laag doel te bereiken, teveel basaal?' ,sk: 'Nutné zníženie aktívneho inzulínu o %1U pre dosiahnutie spodnej cieľovej hranice. Príliš veľa bazálu?' ,it: 'Riduzione 1U% necessaria d\'insulina attiva per raggiungere l\'obiettivo basso, troppa basale?' ,zh_cn: '活性胰岛素已可至血糖下限目标,需减少%1单位,基础率过高?' + , pl: '%1J potrzebnej redukcji w aktywnej insulinie, aby osiągnąć niski cel dolnej granicy, Za duża dawka podstawowa ?' } ,'basal adjustment out of range, give carbs?' : { cs:'úprava změnou bazálu není možná. Podat sacharidy?' + ,he: 'השינוי ברמה הבזלית גדול מדי. תן פחמימות? ' ,de: 'Basalrate geht außerhalb des Zielbereiches. Kohlenhydrate nehmen?' + ,dk: 'basalændring uden for grænseværdi, gi kulhydrater?' ,ro: 'ajustarea bazalei duce în afara intervalului țintă. Suplimentați carbohirații?' + ,fr: 'ajustement de débit basal hors de limites, prenez des glucides?' ,bg: 'Корекция на базала не е възможна, добавка на въглехидрати? ' ,ru: 'Корректировка базы вне диапазона, добавить углеводов?' ,sv: 'basaländring utanför gräns, ge kolhydrater?' + ,es: 'ajuste basal fuera de rango, dar carbohidratos?' ,nb: 'basaljustering utenfor tillatt område, gi karbohydrater?' ,fi: 'säätö liian suuri, anna hiilihydraatteja?' ,pt: 'ajuste de basal fora da meta, dar carboidrato?' @@ -9515,26 +10603,35 @@ function init() { ,it: 'regolazione basale fuori campo, dare carboidrati?' ,nl: 'basaal aanpassing buiten bereik, geef KH?' ,zh_cn: '基础率调整在范围之外,需要碳水化合物?' + ,pl: 'dawka podstawowa poza zakresem, podać węglowodany?' } ,'basal adjustment out of range, give bolus?' : { cs:'úprava změnou bazálu není možná. Podat bolus?' - ,de: 'Basalrate geht außerhalb des Zielbereiches. Bolus abgeben?' + ,he: 'השינוי ברמה הבזלית גדול מדי. תן אינסולין? ' + ,de: 'Anpassung der Basalrate außerhalb des Zielbereichs. Bolus abgeben?' + ,dk: 'basalændring udenfor grænseværdi, gi bolus?' ,ro: 'ajustarea bazalei duce în afara intervalului țintă. Suplimentați insulina?' + ,fr: 'ajustement de débit basal hors de limites, prenez un bolus?' ,bg: 'Корекция на базала не е възможна, добавка на болус? ' ,ru: 'Корректировка базы вне диапазона, добавить болюс?' ,sv: 'basaländring utanför gräns, ge bolus?' ,nb: 'basaljustering utenfor tillatt område, gi bolus?' ,fi: 'säätö liian suuri, anna bolus?' + ,es: 'Ajuste de basal fuera de rango, corregir con insulina?' ,pt: 'ajuste de basal fora da meta, dar bolus de correção?' ,sk: 'úprava pomocou zmeny bazálu nie je možná. Podať bolus?' ,it: 'regolazione basale fuori campo, dare bolo?' ,nl: 'basaal aanpassing buiten bereik, bolus?' ,zh_cn: '基础率调整在范围之外,需要大剂量?' + ,pl: 'dawka podstawowa poza zakresem, podać insulinę?' } ,'above high' : { cs:'nad horním' + ,he: 'מעל גבוה ' ,de: 'überhalb Obergrenze' + ,dk: 'over højt niveau' ,ro: 'peste ținta superioară' + ,fr: 'plus haut que la limite supérieure' ,ru: 'Выше верхнего' ,bg: 'над горната' ,sv: 'över hög nivå' @@ -9542,31 +10639,41 @@ function init() { ,fi: 'yli korkean' ,pt: 'acima do limite superior' ,sk: 'nad horným' + ,es: 'por encima límite superior' ,it: 'sopra alto' ,nl: 'boven hoog' ,zh_cn: '血糖过高' ,zh_tw: '血糖過高' + ,pl: 'powyżej wysokiego' } ,'below low' : { cs:'pod spodním' + ,he: 'מתחת נמוך ' ,de: 'unterhalb Untergrenze' + ,dk: 'under lavt niveau' ,ro: 'sub ținta inferioară' + ,fr: 'plus bas que la limite inférieure' ,bg: 'под долната' ,ru: 'Ниже нижнего' ,sv: 'under låg nivå' ,nb: 'under lav grense' ,fi: 'alle matalan' + ,es: 'por debajo límite inferior' ,pt: 'abaixo do limite inferior' ,sk: 'pod spodným' ,it: 'sotto bassa' ,nl: 'onder laag' ,zh_cn: '血糖过低' ,zh_tw: '血糖過低' + ,pl: 'poniżej niskiego' } ,'Projected BG %1 target' : { cs:'Předpokládaná glykémie %1 cílem' + ,he: 'תחזית רמת סןכר %1 ' ,de: 'Erwarteter BZ %1' + ,dk: 'Ønsket BS %1 mål' ,ro: 'Glicemie estimată %1 în țintă' + ,fr: 'Glycémie cible projetée %1 ' ,bg: 'Предполагаемата КЗ %1 в граници' ,ru: 'Расчетная гликемия %1' ,sv: 'Önskat BS %1 mål' @@ -9575,147 +10682,198 @@ function init() { ,pt: 'Meta de glicemia estimada %1' ,sk: 'Predpokladaná glykémia %1 cieľ' ,it: 'Proiezione BG %1 obiettivo' + ,es: 'Glucemia estimada %1 en objetivo' ,nl: 'Verwachte BG %1 doel' ,zh_cn: '预计血糖%1目标' + ,pl: 'Oczekiwany poziom glikemii %1' } ,'aiming at' : { cs:'s cílem' + ,he: 'מטרה ' ,de: 'angestrebt werden' - ,ro: 'se țintește la' + ,dk: 'ønsket udfald' + ,fr: 'visant' + ,ro: 'ținta este' ,ru: 'цель на' ,bg: 'цел към' ,sv: 'önskad utgång' ,nb: 'sikter på' ,fi: 'tavoitellaan' + ,es: 'resultado deseado' ,pt: 'meta' ,sk: 'cieľom' ,it: 'puntare a' ,nl: 'doel is' ,zh_cn: '目标在' + ,pl: 'pożądany wynik' } ,'Bolus %1 units' : { cs:'Bolus %1 jednotek' + ,he: 'בולוס %1 יחידות ' ,de: 'Bolus von %1 Einheiten' + ,dk: 'Bolus %1 enheder' ,ro: 'Bolus de %1 unități' + ,fr: 'Bolus %1 unités' ,bg: 'Болус %1 единици' ,ru: 'Болюс %1 единиц' ,sv: 'Bolus %1 enheter' ,nb: 'Bolus %1 enheter' ,fi: 'Bolusta %1 yksikköä' ,pt: 'Bolus %1 unidades' + ,es: 'Bolus %1 unidades' ,sk: 'Bolus %1 jednotiek' ,it: 'Bolo %1 unità' ,nl: 'Bolus %1 eenheden' ,zh_cn: '大剂量%1单位' + ,pl: 'Bolus %1 jednostek' } ,'or adjust basal' : { cs:'nebo úprava bazálu' + ,he: 'או שנה רמה בזלית ' ,de: 'oder Basal anpassen' + ,dk: 'eller juster basal' ,ro: 'sau ajustează bazala' + ,fr: 'ou ajuster le débit basal' ,bg: 'или корекция на базала' ,ru: 'или корректировать базу' ,sv: 'eller justera basal' ,nb: 'eller justere basal' ,fi: 'tai säädä basaalia' ,pt: 'ou ajuste basal' + ,es: 'o ajustar basal' ,sk: 'alebo úprava bazálu' ,it: 'o regolare basale' ,nl: 'of pas basaal aan' ,zh_cn: '或调整基础率' + ,pl: 'lub dostosuj dawkę bazową' } ,'Check BG using glucometer before correcting!' : { cs:'Před korekcí zkontrolujte glukometrem glykémii!' + ,he: 'מדוד רמת סוכר בדם באמצעות מד סוכר לפני תיקון ' ,de: 'Überprüfe deinen BZ mit dem Messgerät, bevor du eine Korrektur vornimmst!' + ,dk: 'Kontrol blodsukker med fingerprikker før der korrigeres!' ,ro: 'Verifică glicemia cu glucometrul înainte de a face o corecție!' + ,fr: 'Vérifier la glycémie avec un glucomètre avant de corriger!' ,bg: 'Провери КЗ с глюкомер, преди кореция!' ,ru: 'Перед корректировкой сверьте СК с глюкометром' - ,sv: 'Kontrollera blodglukos med fingerstick före korrigering!ß' + ,sv: 'Kontrollera blodglukos med fingerstick före korrigering!' ,nb: 'Sjekk blodsukker før korrigering!' ,fi: 'Tarkista VS mittarilla ennen korjaamista!' ,pt: 'Verifique glicemia de ponta de dedo antes de corrigir!' + ,es: 'Verifique glucemia antes de corregir!' ,sk: 'Pred korekciou skontrolujte glykémiu glukometrom!' ,it: 'Controllare BG utilizzando glucometro prima di correggere!' ,nl: 'Controleer BG met bloeddruppel voor correctie!' ,zh_cn: '校正前请使用血糖仪测量血糖!' + ,pl: 'Sprawdź glikemię z krwi przed podaniem korekty!' } ,'Basal reduction to account %1 units:' : { cs:'Úprava bazálu pro náhradu bolusu %1 U ' + ,he: 'משנה רמה בזלית בשביל %1 יחידות ' + ,de: 'Reduktion der Basalrate um %1 Einheiten zu kompensieren' + ,dk: 'Basalsænkning for at nå %1 enheder' ,ro: 'Reducere bazală pentru a compensa %1 unități:' + ,fr: 'Réduction du débit basal pour obtenir l\'effet d\' %1 unité' ,bg: 'Намаляне на базала с %1 единици' ,ru: 'Снижение базы на %1 единиц' ,sv: 'Basalsänkning för att nå %1 enheter' ,nb: 'Basalredusering for å nå %1 enheter' ,fi: 'Basaalin vähennys saadaksesi %1 yksikön vaikutuksen:' ,pt: 'Redução de basal para compensar %1 unidades:' + ,es: 'Reducir basal para compesar %1 unidades:' ,sk: 'Úprava bazálu pre výpočet %1 jednotiek:' ,it: 'Riduzione basale per conto %1 unità:' ,nl: 'Basaal verlaagd voor %1 eenheden' ,zh_cn: '基础率减少到%1单位' + ,pl: 'Dawka bazowa zredukowana do 1% J' } ,'30m temp basal' : { cs:'30ti minutový dočasný bazál' + ,he: 'שלושים דקות רמה בזלית זמנית ' ,de: '30min temporäres Basal' + ,dk: '30 minuters temporer basal' ,ro: 'bazală temporară de 30 minute' + ,fr: 'débit basal temporaire de 30 min' ,bg: '30м временен базал' ,ru: '30 мин врем базал' ,sv: '30 minuters temporär basal' ,nb: '30 minutters midlertidig basal' ,fi: '30m tilapäinen basaali' ,pt: 'Basal temp 30m' + ,es: '30 min. temporal basal' ,sk: '30 minutový dočasný bazál' ,it: '30m basale temp' ,nl: '30 minuten tijdelijke basaal' ,zh_cn: '30分钟临时基础率' + ,pl: '30 minut tymczasowej dawki bazowej' } ,'1h temp basal' : { cs:'hodinový dočasný bazál' + ,he: 'שעה רמה בזלית זמנית ' ,de: '1h temporäres Basal' + ,dk: '1t temporer basal' ,ro: 'bazală temporară de 1 oră' + ,fr: 'débit basal temporaire de 1 heure' ,bg: '1 час временен базал' ,ru: '1 час врем базал' ,sv: '60 minuters temporär basal' ,nb: '60 minutters midlertidig basal' ,fi: '1h tilapäinen basaali' + ,es: '1h temporal Basasl' ,pt: 'Basal temp 1h' ,sk: 'hodinový dočasný bazál' ,it: '1h basale temp' ,nl: '1 uur tijdelijke basaal' ,zh_cn: '1小时临时基础率' + ,pl: '1 godzina tymczasowej dawki bazowej' } ,'Cannula change overdue!' : { cs:'Čas na výměnu set vypršel!' + ,he: 'יש צורך בהחלפת קנולה! ' ,de: 'Kanülenwechsel überfällig!' + ,dk: 'Infusionsset, skift overskredet' ,ro: 'Depășire termen schimbare canulă!' ,bg: 'Времето за смяна на сет просрочено' + ,fr: 'Dépassement de date de changement de canule!' ,ru: 'С' ,sv: 'Infusionsset, bytestid överskriden' ,nb: 'Byttetid for infusjonssett overskredet' ,fi: 'Kanyylin ikä yli määräajan!' ,pt: 'Substituição de catéter vencida!' + ,es: '¡Cambio de agujas vencido!' ,sk: 'Výmena kanyli po lehote!' ,it: 'Cambio Cannula in ritardo!' ,nl: 'Cannule te oud!' ,zh_cn: '超过更换管路的时间' + ,pl: 'Przekroczono czas wymiany wkłucia!' } ,'Time to change cannula' : { cs:'Čas na výměnu setu' + ,he: 'הגיע הזמן להחליף קנולה ' ,de: 'Es ist Zeit, die Kanüle zu wechseln' - ,ro: 'Este momentul să schimbați canula' + ,dk: 'Tid til at skifte infusionsset' + ,fr: 'Le moment est venu de changer de canule' + ,ro: 'Este vremea să schimbați canula' ,bg: 'Време за смяна на сет' ,ru: 'Пора заменить канюлю' ,sv: 'Dags att byta infusionsset' ,nb: 'På tide å bytte infusjonssett' ,fi: 'Aika vaihtaa kanyyli' + ,es:' Hora sustituir cánula' ,pt: 'Hora de subistituir catéter' ,sk: 'Čas na výmenu kanyli' ,it: 'Tempo di cambiare la cannula' ,nl: 'Verwissel canule' ,zh_cn: '已到更换管路的时间' + ,pl: 'Czas do wymiany wkłucia' } ,'Change cannula soon' : { cs:'Blíží se čas na výměnu setu' + ,he: 'החלף קנולה בקרוב ' ,de: 'Kanüle bald wechseln' + ,dk: 'Skift infusionsset snart' ,ro: 'Schimbați canula în curând' + ,fr: 'Changement de canule bientòt' ,bg: 'Смени сета скоро' ,ru: 'Подходит время замены канюли' ,sv: 'Byt infusionsset snart' @@ -9726,145 +10884,198 @@ function init() { ,it: 'Cambio cannula prossimamente' ,nl: 'Verwissel canule binnenkort' ,zh_cn: '接近更换管路的时间' + ,pl: 'Wkrótce wymiana wkłucia' } ,'Cannula age %1 hours' : { cs:'Stáří setu %1 hodin' + ,he: 'כיל הקנולה %1 שעות ' ,de: 'Kanülen Alter %1 Stunden' - ,ro: 'Vechimea canulei %1 ore' + ,dk: 'Infusionsset tid %1 timer' + ,fr: 'âge de la canule %1 heures' + ,ro: 'Vechimea canulei în ore: %1' ,bg: 'Сетът е на %1 часове' ,ru: 'Возраст канюли %1 час' ,sv: 'Infusionsset tid %1 timmar' ,nb: 'infusjonssett alder %1 timer' ,fi: 'Kanyylin ikä %1 tuntia' ,pt: 'Idade do catéter %1 horas' + ,es: 'Cánula usada %1 horas' ,sk: 'Vek kanyli %1 hodín' ,it: 'Durata Cannula %1 ore' ,nl: 'Canule leeftijd %1 uren' ,zh_cn: '管路已使用%1小时' + ,pl: 'Czas od wymiany wkłucia %1 godzin' } ,'Inserted' : { cs:'Nasazený' + ,he: 'הוכנס ' ,de: 'Eingesetzt' + ,dk: 'Indsat' ,ro: 'Inserat' + ,fr: 'Insérée' ,bg: 'Поставен' ,ru: 'Введено' ,sv: 'Applicerad' ,nb: 'Satt inn' ,fi: 'Asetettu' + ,es: 'Insertar' ,pt: 'Inserido' ,sk: 'Zavedený' ,it: 'Inserito' ,nl: 'Ingezet' ,zh_cn: '已植入' ,zh_tw: '已植入' + ,pl: 'Zamontowano' + } ,'CAGE' : { cs:'SET' + ,he: 'גיל הקנולה ' + ,de: 'CAGE' + ,dk: 'CAGE' ,ro: 'VC' ,bg: 'ВС' + ,fr: 'CAGE' ,ru: 'ВКан' ,sv: 'Nål' ,nb: 'Nål alder' ,fi: 'KIKÄ' ,pt: 'ICAT' + ,es: 'Carb.desde' ,sk: 'SET' ,it: 'CAGE' ,nl: 'CAGE' ,zh_cn: '管路' ,zh_tw: '管路' + ,pl: 'Wiek wkłucia' } ,'COB' : { cs:'SACH' + ,he: 'COB ' + ,de: 'COB' + ,dk: 'COB' ,ro: 'COB' - ,bg: 'АВХ' + ,bg: 'АВХ' + ,fr: 'COB' ,ru: 'Активн углеводы' ,sv: 'COB' ,nb: 'Aktive katbohydrater' ,fi: 'AH' ,pt: 'COB' + ,es: 'Carbohidratos activos' ,sk: 'SACH' ,it: 'COB' ,nl: 'COB' ,zh_cn: '活性碳水COB' + ,pl: 'Aktywne węglowodany' } ,'Last Carbs' : { cs:'Poslední sacharidy' + ,he: 'פחמימות אחרונות ' ,de: 'Letzte Kohlenhydrate' + ,dk: 'Seneste kulhydrater' ,ro: 'Ultimii carbohidrați' - ,bg: 'Последни ВХ' + ,fr: 'Derniers glucides' + ,bg: 'Последни ВХ' ,ru: 'Новые углеводы' ,sv: 'Senaste kolhydrater' ,nb: 'Siste karbohydrater' ,fi: 'Viimeisimmät hiilihydraatit' ,pt: 'Último carboidrato' + ,es: 'último carbohidrato' ,sk: 'Posledné sacharidy' ,it: 'Ultimi carboidrati' ,nl: 'Laatse KH' ,zh_cn: '上次碳水' + ,pl: 'Ostatnie węglowodany' } ,'IAGE' : { cs:'INZ' + ,he: 'גיל אינסולין ' + ,de: 'IAGE' + ,dk: 'Insulinalder' ,ro: 'VI' + ,fr: 'IAGE' ,bg: 'ВИнс' ,ru: 'ВозрИнс' ,sv: 'Insulinålder' ,nb: 'Insulinalder' ,fi: 'IIKÄ' ,pt: 'IddI' + ,es: 'Insul.desde' ,sk: 'INZ' ,it: 'IAGE' ,nl: 'IAGE' ,zh_cn: '胰岛素' ,zh_tw: '胰島素' + ,pl: 'Wiek insuliny' } ,'Insulin reservoir change overdue!' : { cs:'Čas na výměnu zásobníku vypršel!' + ,he: 'החלף מאגר אינסולין! ' ,de: 'Ampullenwechsel überfällig!' - ,ro: 'Depășire termen de schimbare a rezervorului de insulină' + ,dk: 'Insulinbyttetid overskredet!' + ,fr: 'Dépassement de date de changement de réservoir d\'insuline!' + ,ro: 'Termenul de schimbare a rezervorului de insulină a fost depășit' ,bg: 'Смянатата на резервоара просрочена' ,ru: 'Срок замены тубы инсулина истек' ,sv: 'Insulinbytestid överskriden' ,nb: 'Insulinbytestid overskrevet' ,fi: 'Insuliinisäiliö vanhempi kuin määräaika!' ,pt: 'Substituição de reservatório vencida!' + ,es: 'Excedido plazo del cambio depósito de insulina!' ,sk: 'Čas na výmenu inzulínu po lehote!' ,it: 'Cambio serbatoio d\'insulina in ritardo!' ,nl: 'Verwissel insulinereservoir nu!' ,zh_cn: '超过更换胰岛素储液器的时间' + ,pl: 'Przekroczono czas wymiany zbiornika na insulinę!' } ,'Time to change insulin reservoir' : { cs:'Čas na výměnu zásobníku' + ,he: 'הגיע הזמן להחליף מאגר אינסולין ' ,de: 'Es ist Zeit, die Ampulle zu wechseln' + ,dk: 'Tid til at skifte insulinreservoir' ,ro: 'Este timpul pentru schimbarea rezervorului de insulină' + ,fr: 'Le moment est venu de changer de réservoir d\'insuline' ,bg: 'Време е за смяна на резервоара' ,ru: 'Наступил срок замены тубы инсулина' ,sv: 'Dags att byta insulinreservoar' ,nb: 'På tide å bytte insulinreservoar' ,fi: 'Aika vaihtaa insuliinisäiliö' ,pt: 'Hora de substituir reservatório' + ,es: 'Hora de sustituir depósito insulina' ,sk: 'Čas na výmenu inzulínu' ,it: 'Momento di cambiare serbatoio d\'insulina' ,nl: 'Verwissel insuline reservoir' ,zh_cn: '已到更换胰岛素储液器的时间' + ,pl: 'Czas do zmiany zbiornika na insulinę!' } ,'Change insulin reservoir soon' : { cs:'Blíží se čas na výměnu zásobníku' + ,he: 'החלף מאגר אינסולין בקרוב ' ,de: 'Ampulle bald wechseln' + ,dk: 'Skift insulinreservoir snart' ,ro: 'Rezervorul de insulină trebuie schimbat în curând' + ,fr: 'Changement de réservoir d\'insuline bientôt' ,bg: 'Смени резервоара скоро' ,ru: 'Наступает срок замены тубы инсулина' ,sv: 'Byt insulinreservoar snart' ,nb: 'Bytt insulinreservoar snart' ,fi: 'Vaihda insuliinisäiliö pian' ,pt: 'Substituir reservatório em brave' + ,es: 'Sustituir depósito insulina en breve' ,sk: 'Čoskoro bude potrebné vymeniť inzulín' ,it: 'Cambiare serbatoio d\'insulina prossimamente' ,nl: 'Verwissel insuline reservoir binnenkort' ,zh_cn: '接近更换胰岛素储液器的时间' + ,pl: 'Wkrótce wymiana zbiornika na insulinę!' } ,'Insulin reservoir age %1 hours' : { cs:'Stáří zásobníku %1 hodin' + ,he: 'גיל מאגר אינסולין %1 שעות ' ,de: 'Ampullen Alter %1 Stunden' + ,dk: 'Insulinreservoiralder %1 timer' + ,fr: 'Âge du réservoir d\'insuline %1 heures' ,ro: 'Vârsta reservorului de insulină %1 ore' ,ru: 'Картридж инсулина отработал %1часов' ,bg: 'Резервоарът е на %1 часа' @@ -9873,13 +11084,18 @@ function init() { ,fi: 'Insuliinisäiliön ikä %1 tuntia' ,pt: 'Idade do reservatório %1 horas' ,sk: 'Vek inzulínu %1 hodín' + ,es: 'Depósito insulina desde %1 horas' ,it: 'IAGE - Durata Serbatoio d\'insulina %1 ore' ,nl: 'Insuline reservoir leeftijd %1 uren' ,zh_cn: '胰岛素储液器已使用%1小时' + ,pl: 'Wiek zbiornika na insulinę %1 godzin' } ,'Changed' : { cs:'Vyměněno' + ,he: 'הוחלף ' ,de: 'Gewechselt' + ,dk: 'Skiftet' + ,fr: 'Changé' ,ro: 'Schimbat' ,ru: 'Замена произведена' ,bg: 'Сменен' @@ -9887,42 +11103,59 @@ function init() { ,nb: 'Byttet' ,fi: 'Vaihdettu' ,pt: 'Substituído' + ,es: 'Cambiado' ,sk: 'Vymenený' ,it: 'Cambiato' ,nl: 'veranderd' ,zh_cn: '已更换' + ,pl: 'Wymieniono' } ,'IOB' : { cs:'IOB' + ,he: 'IOB ' + ,de: 'IOB' + ,dk: 'IOB' ,ro: 'IOB' ,ru: 'Активный Инсулин' + ,fr: 'IOB' ,bg: 'АИ' ,sv: 'IOB' ,nb: 'Aktivt insulin' + ,es: 'Insulina Activa IOB' ,fi: 'IOB' ,pt: 'IOB' ,sk: 'IOB' ,it: 'IOB' ,nl: 'IOB' ,zh_cn: '活性胰岛素IOB' + ,pl: 'Aktywna insulina' } ,'Careportal IOB' : { cs:'IOB z ošetření' + ,he: 'Careportal IOB ' + ,de: 'Careportal IOB' + ,dk: 'IOB i Careportal' ,ro: 'IOB în Careportal' ,ru: 'Активн Инс на портале назначений' + ,fr: 'Careportal IOB' ,bg: 'АИ от Кеърпортал' ,sv: 'IOB i Careportal' ,nb: 'Aktivt insulin i Careportal' ,fi: 'Careportal IOB' + ,es: 'Insulina activa en Careportal' ,pt: 'IOB do Careportal' ,sk: 'IOB z portálu starostlivosti' ,it: 'IOB Somministrazioni' ,nl: 'Careportal IOB' ,zh_cn: '服务面板IOB(活性胰岛素)' + ,pl: 'Aktywna insulina z portalu' } ,'Last Bolus' : { cs:'Poslední bolus' + ,he: 'בולוס אחרון ' ,de: 'Letzter Bolus' + ,dk: 'Seneste Bolus' + ,fr: 'Dernier Bolus' ,ro: 'Ultimul bolus' ,ru: 'Прошлый болюс' ,bg: 'Последен болус' @@ -9930,46 +11163,63 @@ function init() { ,nb: 'Siste Bolus' ,fi: 'Viimeisin bolus' ,pt: 'Último bolus' + ,es: 'Último bolo' ,sk: 'Posledný bolus' ,it: 'Ultimo bolo' ,nl: 'Laatste bolus' ,zh_cn: '上次大剂量' + ,pl: 'Ostatni bolus' } ,'Basal IOB' : { cs:'IOB z bazálů' + ,he: 'IOB בזלי ' + ,de: 'Basal IOB' + ,dk: 'Basal IOB' ,ro: 'IOB bazală' ,ru: 'Активн Базал' + ,fr: 'IOB du débit basal' ,bg: 'Базален АИ' ,sv: 'Basal IOB' ,nb: 'Basal Aktivt Insulin' ,fi: 'Basaalin IOB' ,pt: 'IOB basal' + ,es: 'Basal Insulina activa' ,sk: 'Bazálny IOB' ,it: 'Basale IOB' ,nl: 'Basaal IOB' ,zh_cn: '基础率IOB(活性胰岛素)' + ,pl: 'Aktywna insulina z dawki bazowej' } ,'Source' : { cs:'Zdroj' + ,he: 'מקור ' ,de: 'Quelle' + ,dk: 'Kilde' ,ro: 'Sursă' + ,fr: 'Source' ,ru: 'Источник' ,bg: 'Източник' ,sv: 'Källa' ,nb: 'Kilde' ,fi: 'Lähde' ,pt: 'Fonte' + ,es: 'Fuente' ,sk: 'Zdroj' ,it: 'Fonte' ,nl: 'bron' ,zh_cn: '来源' + ,pl: 'Źródło' } ,'Stale data, check rig?' : { cs:'Zastaralá data, zkontrolovat mobil?' + ,he: 'מידע ישן, בדוק את המערכת? ' ,de: 'Daten sind veraltet, Übertragungsgerät prüfen?' + ,dk: 'Gammel data, kontrol uploader?' ,ro: 'Date învechite, verificați uploaderul!' + ,fr: 'Valeurs trop anciennes, vérifier l\'uploadeur' ,ru: 'Устаревшие данные, проверьте загрузчик' ,bg: 'Стари данни, провери телефона' + ,es: 'Datos desactualizados, controlar la subida?' ,sv: 'Gammal data, kontrollera rigg?' ,nb: 'Gamle data, sjekk rigg?' ,fi: 'Tiedot vanhoja, tarkista lähetin?' @@ -9978,10 +11228,14 @@ function init() { ,it: 'dati non aggiornati, controllare il telefono?' ,nl: 'Geen data, controleer uploader' ,zh_cn: '数据过期,检查一下设备?' + , pl: 'Dane są nieaktualne, sprawdź urządzenie transmisyjne.' } ,'Last received:' : { cs:'Naposledy přijato:' + ,he: 'התקבל לאחרונה: ' ,de: 'Zuletzt empfangen:' + ,dk: 'Senest modtaget:' + ,fr: 'Dernière réception:' ,ro: 'Ultimile date:' ,ru: 'Предыдущий полученный' ,bg: 'Последно получени' @@ -9989,372 +11243,582 @@ function init() { ,nb: 'Sist mottatt:' ,fi: 'Viimeksi vastaanotettu:' ,pt: 'Último recebido:' + ,es: 'Último recibido:' ,sk: 'Naposledy prijaté:' ,it: 'Ultime ricevute:' ,nl: 'laatste ontvangen' ,zh_cn: '上次接收:' + ,pl: 'Ostatnio odebrane:' } ,'%1m ago' : { cs:'%1m zpět' + ,he: 'לפני %1 דקות ' ,de: 'vor %1m' + ,dk: '%1m siden' ,ro: 'acum %1 minute' + ,fr: 'il y a %1 min' ,ru: 'мин назад' ,bg: 'преди %1 мин.' ,sv: '%1m sedan' ,nb: '%1m siden' ,fi: '%1m sitten' + ,es: '%1min. atrás' ,pt: '%1m atrás' ,sk: 'pred %1m' ,it: '%1m fa' ,nl: '%1m geleden' ,zh_cn: '%1分钟前' + ,pl: '%1 minut temu' } ,'%1h ago' : { cs:'%1h zpět' + ,he: 'לפני %1 שעות ' ,de: 'vor %1h' + ,dk: '%1t siden' ,ro: 'acum %1 ore' + ,fr: '%1 heures plus tôt' ,ru: 'час назад' ,bg: 'преди %1 час' ,sv: '%1h sedan' ,nb: '%1h siden' ,fi: '%1h sitten' ,pt: '%1h atrás' + ,es: '%1h. atrás' ,sk: 'pred %1h' ,it: '%1h fa' ,nl: '%1u geleden' ,zh_cn: '%1小时前' + ,pl: '%1 godzin temu' } ,'%1d ago' : { cs:'%1d zpět' + ,he: 'לפני %1 ימים ' ,de: 'vor 1d' + ,dk: '%1d siden' ,ro: 'acum %1 zile' + ,fr: '%1 jours plus tôt' ,ru: 'дн назад' ,bg: 'преди %1 ден' ,sv: '%1d sedan' ,nb: '%1d siden' ,fi: '%1d sitten' ,pt: '%1d atrás' + ,es: '%1d atrás' ,sk: 'pred %1d' ,it: '%1d fa' ,nl: '%1d geleden' ,zh_cn: '%1天前' + ,pl: '%1 dni temu' } ,'RETRO' : { cs:'RETRO' + ,he: 'רטרו ' + ,de: 'RETRO' + ,dk: 'RETRO' ,ro: 'VECHI' ,ru: 'РЕТРО' ,bg: 'РЕТРО' + ,fr: 'RETRO' ,sv: 'RETRO' ,nb: 'GAMMELT' ,fi: 'RETRO' ,pt: 'RETRO' + ,es: 'RETRO' ,sk: 'RETRO' ,it: 'RETRO' ,nl: 'RETRO' ,zh_cn: '历史数据' + ,pl: 'RETRO' } ,'SAGE' : { cs:'SENZ' + ,he: 'גיל הסנסור ' + ,de:'SAGE' + ,dk: 'Sensoralder' ,ro: 'VS' ,ru: 'Сенсор проработал' + ,fr: 'SAGE' ,bg: 'ВС' ,sv: 'Sensor' ,nb: 'Sensoralder' ,fi: 'SIKÄ' ,pt: 'IddS' ,sk: 'SENZ' + ,es: 'Sensor desde' ,it: 'SAGE' ,nl: 'SAGE' ,zh_cn: '探头' ,zh_tw: '探頭' + ,pl: 'Wiek sensora' } ,'Sensor change/restart overdue!' : { cs:'Čas na výměnu senzoru vypršel!' + ,he: 'שנה או אתחל את הסנסור! ' ,de: 'Sensorwechsel/-neustart überfällig!' + ,dk: 'Sensor bytte/genstart overskredet!' ,ro: 'Depășire termen schimbare/restart senzor!' + ,fr: 'Changement/Redémarrage du senseur dépassé!' ,ru: 'Рестарт сенсора просрочен' ,bg: 'Смяната/рестартът на сензора са пресрочени' ,sv: 'Sensor byte/omstart överskriden!' ,nb: 'Sensor bytte/omstart overskredet!' ,fi: 'Sensorin vaihto/uudelleenkäynnistys yli määräajan!' ,pt: 'Substituição/reinício de sensor vencido' + ,es: 'Sustituir/reiniciar, sensor vencido' ,sk: 'Čas na výmenu/reštart sensoru uplynul!' ,it: 'Cambio/riavvio del sensore in ritardo!' ,nl: 'Sensor vevang/hertstart tijd gepasseerd' ,zh_cn: '超过更换/重启探头的时间' + ,pl: 'Przekroczono czas wymiany/restartu sensora!' } ,'Time to change/restart sensor' : { cs:'Čas na výměnu senzoru' + ,he: 'הגיע הזמן לשנות או לאתחל את הסנסור ' ,de: 'Es ist Zeit, den Sensor zu wechseln/neuzustarten' + ,dk: 'Tid til at skifte/genstarte sensor' ,ro: 'Este timpul pentru schimbarea senzorului' ,ru: 'Время замены/рестарта сенсора' + ,fr: 'C\'est le moment de changer/redémarrer le senseur' ,bg: 'Време за смяна/рестарт на сензора' ,sv: 'Dags att byta/starta om sensorn' ,nb: 'På tide å bytte/restarte sensoren' ,fi: 'Aika vaihtaa / käynnistää sensori uudelleen' ,pt: 'Hora de substituir/reiniciar sensor' + ,es: 'Hora de sustituir/reiniciar sensor' ,sk: 'Čas na výmenu/reštart senzoru' ,it: 'Tempo di cambiare/riavvio sensore' ,nl: 'Sensor vervangen of herstarten' ,zh_cn: '已到更换/重启探头的时间' + ,pl: 'Czas do wymiany/restartu sensora' } ,'Change/restart sensor soon' : { cs:'Blíží se čas na výměnu senzoru' + ,he: 'שנה או אתחל את הסנסור בקרוב ' ,de: 'Sensor bald wechseln/neustarten' + ,dk: 'Byt/genstart sensor snart' ,ro: 'Schimbați/restartați senzorul în curând' + ,fr: 'Changement/Redémarrage du senseur bientôt' ,ru: 'Приближается срок замены/рестарта сенсора' ,bg: 'Смени/рестартирай сензора скоро' ,sv: 'Byt/starta om sensorn snart' ,nb: 'Bytt/restarta sensoren snart' ,fi: 'Vaihda/käynnistä sensori uudelleen pian' ,pt: 'Mudar/reiniciar sensor em breve' + ,es: 'Cambiar/Reiniciar sensor en breve' ,sk: 'Čoskoro bude potrebné vymeniť/reštartovať senzor' ,it: 'Modifica/riavvio sensore prossimamente' ,nl: 'Herstart of vervang sensor binnenkort' ,zh_cn: '接近更换/重启探头的时间' + ,pl: 'Wkrótce czas wymiany/restartu sensora' } ,'Sensor age %1 days %2 hours' : { cs:'Stáří senzoru %1 dní %2 hodin' + ,he: 'גיל הסנסור %1 ימים %2 שעות ' ,de: 'Sensor Alter %1 Tage %2 Stunden' + ,dk: 'Sensoralder %1 dage %2 timer' ,ro: 'Senzori vechi de %1 zile și %2 ore' + ,fr: 'Âge su senseur %1 jours et %2 heures' ,ru: 'Сенсор проработал % дн % час' ,bg: 'Сензорът е на %1 дни %2 часа ' ,sv: 'Sensorålder %1 dagar %2 timmar' ,nb: 'Sensoralder %1 dag %2 timer' ,fi: 'Sensorin ikä %1 päivää, %2 tuntia' ,pt: 'Idade do sensor %1 dias %2 horas' + ,es: 'Sensor desde %1 días %2 horas' ,sk: 'Vek senzoru %1 dní %2 hodín' ,it: 'Durata Sensore %1 giorni %2 ore' ,nl: 'Sensor leeftijd %1 dag(en) en %2 uur' ,zh_cn: '探头使用了%1天%2小时' + ,pl: 'Wiek sensora: %1 dni %2 godzin' } ,'Sensor Insert' : { cs: 'Výměna sensoru' + ,he: 'הכנס סנסור ' ,de: 'Sensor eingesetzt' + ,dk: 'Sensor indsæt' ,ro: 'Inserția senzorului' + ,fr: 'Insertion du senseur' ,ru: 'Установка сенсора' ,bg: 'Поставяне на сензора' ,sv: 'Sensor insättning' ,nb: 'Sensor satt inn' ,fi: 'Sensorin Vaihto' + ,es: 'Insertar sensor' ,pt: 'Inserção de sensor' ,sk: 'Výmena senzoru' ,it: 'SAGE - inserimento sensore' ,nl: 'Sensor ingebracht' ,zh_cn: '植入探头' + ,pl: 'Zamontuj sensor' } ,'Sensor Start' : { cs: 'Znovuspuštění sensoru' + ,he: 'סנסור התחיל ' + ,de: 'Sensorstart' + ,dk: 'Sensorstart' ,ro: 'Pornirea senzorului' ,ru: 'Запуск сенсора' + ,fr: 'Démarrage du senseur' ,bg: 'Стартиране на сензора' ,sv: 'Sensorstart' ,nb: 'Sensorstart' ,fi: 'Sensorin Aloitus' ,pt: 'Início de sensor' + ,es: 'Inicio del sensor' ,sk: 'Štart senzoru' ,it: 'SAGE - partenza sensore' ,nl: 'Sensor start' ,zh_cn: '启动探头' + ,pl: 'Uruchom sensor' } ,'days' : { cs: 'dní' + ,he: 'ימים ' ,de: 'Tage' + ,dk: 'dage' ,ro: 'zile' + ,fr: 'jours' ,ru: 'дн' ,bg: 'дни' ,sv: 'dagar' ,nb: 'dager' ,fi: 'päivää' ,pt: 'dias' + ,es: 'días' ,sk: 'dní' ,it: 'giorni' ,nl: 'dagen' ,zh_cn: '天' + ,pl: 'dni' } ,'Insulin distribution' : { cs: 'Rozložení inzulínu' + ,he: 'התפלגות אינסולין ' + ,de: 'Insulinverteilung' + ,dk: 'Insulindistribution' ,ro: 'Distribuția de insulină' + ,fr: 'Distribution de l\'insuline' ,ru: 'распределение инсулина' ,fi: 'Insuliinijakauma' + ,sv: 'Insulindistribution' ,it: 'Distribuzione di insulina' + ,es: 'Distribución de la insulina' ,nl: 'Insuline verdeling' + ,bg: 'разпределение на инсулина' + ,pl: 'podawanie insuliny' } ,'To see this report, press SHOW while in this view' : { cs: 'Pro zobrazení toho výkazu stiskněte Zobraz na této záložce' + ,he: 'כדי להציג דוח זה, לחץ על"הראה" בתצוגה זו ' ,de: 'Auf ZEIGEN drücken, um den Bericht in dieser Ansicht anzuzeigen' + ,dk: 'For at se denne rapport, klick på "VIS"' + ,fr: 'Pour voir le rapport, cliquer sur MONTRER dans cette fenêtre' ,ro: 'Pentru a vedea acest raport, apăsați butonul SHOW' ,ru: 'чтобы увидеть отчет, нажмите show/показать' ,fi: 'Nähdäksesi tämän raportin, paina NÄYTÄ tässä näkymässä' ,it: 'Per guardare questo report, premere SHOW all\'interno della finestra' + ,es: 'Presione SHOW para mostrar el informe en esta vista' ,nl: 'Om dit rapport te zien, druk op "Laat zien"' + ,sv: 'För att se denna rapport, klicka på "Visa"' + ,bg: 'За да видите тази статистика, натиснете ПОКАЖИ' + , pl: 'Aby wyświetlić ten raport, naciśnij przycisk POKAŻ w tym widoku' } ,'AR2 Forecast' : { cs: 'AR2 predikci' - ,de: 'AR2 Vorhersage' + ,he: 'AR2 תחזית ' + ,de: 'AR2-Vorhersage' + ,dk: 'AR2 Forudsiglse' ,ro: 'Predicție AR2' + ,fr: 'Prédiction AR2' ,ru: 'прогноз AR2' + ,es: 'Pronóstico AR2' ,fi: 'AR2 Ennusteet' ,it: 'Previsione AR2' ,nl: 'AR2 Voorspelling' + ,sv: 'AR2 Förutsägelse' + ,bg: 'AR2 прогнози' + ,pl: 'Prognoza AR2' } ,'OpenAPS Forecasts' : { cs: 'OpenAPS predikci' - ,de: 'OpenAPS Vorhersage' + ,he: 'תחזית OPENAPS ' + ,de: 'OpenAPS-Vorhersage' + ,dk: 'OpenAPS Forudsiglse' ,ro: 'Predicții OpenAPS' + ,fr: 'Prédictions OpenAPS' ,ru: 'прогнозы OpenAPS' + ,es: 'Pronóstico OpenAPS' ,fi: 'OpenAPS Ennusteet' ,it: 'Previsione OpenAPS' ,nl: 'OpenAPS Voorspelling' + ,sv: 'OpenAPS Förutsägelse' + ,bg: 'OpenAPS прогнози' + ,pl: 'Prognoza OpenAPS' } ,'Temporary Target' : { cs: 'Dočasný cíl glykémie' + ,he: 'מטרה זמנית ' ,de: 'Temporäres Ziel' + ,dk: 'Midlertidigt mål' + ,fr: 'Cible temporaire' ,ro: 'Țintă temporară' ,ru: 'промежуточная цель' ,fi: 'Tilapäinen tavoite' + ,es: 'Objetivo temporal' ,it: 'Obbiettivo temporaneo' ,nl: 'Tijdelijk doel' + ,sv: 'Tillfälligt mål' + ,bg: 'временна цел' + ,pl: 'Cel tymczasowy' } ,'Temporary Target Cancel' : { cs: 'Dočasný cíl glykémie konec' + ,he: 'בטל מטרה זמנית ' ,de: 'Temporäres Ziel abbrechen' + ,dk: 'Afslut midlertidigt mål' + ,fr: 'Effacer la cible temporaire' ,ro: 'Renunțare la ținta temporară' ,ru: 'отмена промежуточной цели' ,fi: 'Peruuta tilapäinen tavoite' + ,es: 'Objetivo temporal cancelado' ,it: 'Obbiettivo temporaneo cancellato' ,nl: 'Annuleer tijdelijk doel' + ,sv: 'Avsluta tillfälligt mål' + ,bg: 'Отмяна на временна цел' + ,pl: 'Zel tymczasowy anulowany' } ,'OpenAPS Offline' : { cs: 'OpenAPS vypnuto' + ,he: 'OPENAPS לא פעיל ' + ,de: 'OpenAPS Offline' + ,dk: 'OpenAPS Offline' ,ro: 'OpenAPS deconectat' + ,fr: 'OpenAPS déconnecté' ,ru: 'OpenAPS вне сети' ,fi: 'OpenAPS poissa verkosta' ,it: 'OpenAPS disconnesso' + ,es: 'OpenAPS desconectado' ,nl: 'OpenAPS Offline' + ,sv: 'OpenAPS Offline' + ,bg: 'OpenAPS спрян' + ,pl: 'OpenAPS nieaktywny' } ,'Profiles' : { cs: 'Profily' + ,he: 'פרופילים ' ,de: 'Profile' + ,dk: 'Profiler' + ,fr: 'Profils' ,ro: 'Profile' ,ru: 'профили' ,fi: 'Profiilit' ,it: 'Profili' + ,es: 'Perfil' ,nl: 'Profielen' + ,sv: 'Profiler' + ,bg: 'Профили' + ,pl: 'Profile' } ,'Time in fluctuation' : { - fi: 'Aika muutoksessa' + cs: 'Doba měnící se glykémie' + ,he: 'זמן בתנודות ' + ,fi: 'Aika muutoksessa' + ,fr: 'Temps passé en fluctuation' ,it: 'Tempo in fluttuazione' ,ro: 'Timp în fluctuație' + ,es: 'Tiempo fluctuando' ,ru: 'время флуктуаций' ,nl: 'Tijd met fluctuaties' + ,sv: 'Tid i fluktation' + ,de: 'Zeit in Fluktuation (Schwankung)' + ,dk: 'Tid i fluktation' + ,bg: 'Време в промяна' + ,pl: 'Czas fluaktacji (odchyleń)' } ,'Time in rapid fluctuation' : { - fi: 'Aika nopeassa muutoksessa' + cs: 'Doba rychle se měnící glykémie' + ,he: 'זמן בתנודות מהירות ' + ,fi: 'Aika nopeassa muutoksessa' + ,fr: 'Temps passé en fluctuation rapide' ,it: 'Tempo in rapida fluttuazione' ,ro: 'Timp în fluctuație rapidă' + ,es: 'Tiempo fluctuando rápido' ,ru: 'время быстрых флуктуаций' ,nl: 'Tijd met grote fluctuaties' + ,sv: 'Tid i snabb fluktation' + ,de: 'Zeit in starker Fluktuation (Schwankung)' + ,dk: 'Tid i hurtig fluktation' + ,bg: 'Време в бърза промяна' + ,pl: 'Czas szybkich fluaktacji (odchyleń)' } ,'This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:' : { - fi: 'Tämä on epätarkka arvio joka saattaa heittää huomattavasti mittaustuloksesta, eikä korvaa laboratoriotestiä. Laskentakaava on otettu artikkelista: ' + cs: 'Toto je pouze hrubý odhad, který může být nepřesný a nenahrazuje kontrolu z krve. Vzorec je převzatý z:' + ,he: 'זוהי רק הערכה גסה שיכולה להיות מאוד לא מדויקת ואינה מחליפה את בדיקת הדם בפועל. הנוסחה המשמשת נלקחת מ: ' + ,fi: 'Tämä on epätarkka arvio joka saattaa heittää huomattavasti mittaustuloksesta, eikä korvaa laboratoriotestiä. Laskentakaava on otettu artikkelista: ' + ,fr: 'Ceci est seulement une estimation grossière qui peut être très imprécise et ne remplace pas une mesure sanguine adéquate. La formule est empruntée à l\'article:' ,it: 'Questa è solo un\'approssimazione che può essere molto inaccurata e che non sostituisce la misurazione capillare. La formula usata è presa da:' ,ro: 'Aceasta este doar o aproximare brută, care poate fi foarte imprecisă și nu ține loc de testare capilară. Formula matematică folosită este luată din:' + ,es: 'Esto es sólo una estimación apróximada que puede ser muy inexacta y no reemplaza las pruebas de sangre reales. La fórmula utilizada está tomada de: ' ,ru: 'Это приблизительная оценка не заменяющая фактический анализ крови. Используемая формула взята из:' ,nl: 'Dit is enkel een grove schatting die onjuist kan zijn welke geen bloedtest vervangt. De gebruikte formule is afkomstig van:' + ,sv: 'Detta är en grov uppskattning som kan vara missvisande. Det ersätter inte blodprov. Formeln är hämtad från:' + ,de: 'Dies ist lediglich eine grobe Schätzung, die sehr ungenau sein kann und eine Überprüfung des tatsächlichen Blutzuckers nicht ersetzen kann. Die verwendete Formel wurde genommen von:' + ,dk: 'Dette er kun en grov estimering som kan være misvisende. Det erstatter ikke en blodprøve. Formelen er hemtet fra:' + ,bg: 'Това е само грубо изчисление, което може да е много неточно и не изключва реалния кръвен тест. Формулата, кокято е използвана е взета от:' + ,pl: 'To tylko przybliżona ocena, która może być bardzo niedokładna i nie może zastąpić faktycznego poziomu cukru we krwi. Zastosowano formułę:' } , 'Filter by hours' : { - fi: 'Huomioi raportissa seuraavat tunnit' + cs: ' Filtr podle hodin' + ,fi: 'Huomioi raportissa seuraavat tunnit' ,it: 'Filtra per ore' + ,fr: 'Filtrer par heures' ,ro: 'Filtrare pe ore' + ,es: 'Filtrar por horas' ,ru: 'почасовой фильтр' ,nl: 'Filter op uren' + ,sv: 'Filtrera per timme' + ,de: 'Filtern nach Stunden' + ,dk: 'Filtrer per time' + ,bg: 'Филтър по часове' + ,pl: 'Filtruj po godzinach' } , '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.' : { - fi: 'Aika Muutoksessa ja Aika Nopeassa Muutoksessa mittaa osuutta tarkkailtavasta aikaperiodista, jolloin glukoosi on ollut nopeassa tai hyvin nopeassa muutoksessa. Pienempi arvo on parempi.' + cs: 'Doba měnící se glykémie a rapidně se měnící glykémie měří % času ve zkoumaném období, během kterého se glykémie měnila relativně rychle nebo rapidně. Nižší hodnota je lepší.' + ,fi: 'Aika Muutoksessa ja Aika Nopeassa Muutoksessa mittaa osuutta tarkkailtavasta aikaperiodista, jolloin glukoosi on ollut nopeassa tai hyvin nopeassa muutoksessa. Pienempi arvo on parempi.' + ,fr: 'Le Temps passé en fluctuation et le temps passé en fluctuation rapide mesurent la part de temps durant la période examinée, pendant laquelle la glycémie a évolué relativement ou très rapidement. Les valeurs basses sont les meilleures.' ,it: 'Tempo in fluttuazione e Tempo in rapida fluttuazione misurano la % di tempo durante il periodo esaminato, durante il quale la glicemia stà variando velocemente o rapidamente. Bassi valori sono migliori.' ,ro: 'Timpul în fluctuație și timpul în fluctuație rapidă măsoară procentul de timp, din perioada examinată, în care glicemia din sânge a avut o variație relativ rapidă sau rapidă. Valorile mici sunt de preferat.' + ,es: 'Tiempo en fluctuación y Tiempo en fluctuación rápida miden el % de tiempo del período exáminado, durante la cual la glucosa en sangre ha estado cambiando relativamente rápido o rápidamente. Valores más bajos son mejores.' ,ru: 'время флуктуаций и время быстрых флуктуаций означает % времени в рассматриваемый период в течение которого СК менялся относительно быстро или просто быстро. Более низкие значения предпочтительней' ,nl: 'Tijd met fluctuaties of grote fluctuaties in % van de geevalueerde periode, waarbij de bloed glucose relatief snel wijzigde.Lagere waarden zijn beter.' + ,sv: 'Tid i fluktuation och tid i snabb fluktuation mäter% av tiden under den undersökta perioden, under vilken blodsockret har förändrats relativt snabbt eller snabbt. Lägre värden är bättre' + ,de: 'Zeit in Fluktuation und Zeit in starker Fluktuation messen den Teil der Zeit, in der sich der Blutzuckerwert relativ oder sehr schnell verändert hat. Niedrigere Werte sind besser.' + ,dk: 'Tid i fluktuation og tid i hurtig fluktuation måler % af tiden i den undersøgte periode, under vilket blodsukkret har ændret sig relativt hurtigt. Lavere værdier er bedre.' + ,bg: 'Време в промяна и време в бърза промяна измерват % от време в разгледания период, през който КЗ са се променяли бързо или много бързо. По-ниски стойности са по-добри.' + ,pl: 'Czas fluktuacji i szybki czas fluktuacji mierzą % czasu w badanym okresie, w którym poziom glukozy we krwi zmieniał się szybko lub bardzo szybko. Preferowane są wolniejsze zmiany' } , '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.' : { - fi: 'Keskimääräinen Kokonaismuutos kertoo kerkimääräisen päivätason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.' + cs: 'Průměrná celková denní změna je součet absolutních hodnoty všech glykémií za sledované období, děleno počtem dní. Nižší hodnota je lepší.' + ,fi: 'Keskimääräinen Kokonaismuutos kertoo kerkimääräisen päivätason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.' + ,fr: 'La Variation Totale Journalière Moyenne est la somme de toute les excursions glycémiques absolues pour une période analysée, divisée par le nombre de jours. Les valeurs basses sont les meilleures.' ,it: 'Media Totale Giornaliera Variazioni è la somma dei valori assoluti di tutte le escursioni glicemiche per il periodo esaminato, diviso per il numero di giorni. Bassi valori sono migliori.' ,ro: 'Schimbarea medie totală zilnică este suma valorilor absolute ale tuturor excursiilor glicemice din perioada examinată, împărțite la numărul de zile. Valorile mici sunt de preferat.' ,ru: 'усредненное ежедневное изменение это сумма абсолютных величин всех отклонений СК в рассматриваемый период, деленное на количество дней. Меньшая величина предпочтительней' + ,es: 'El cambio medio diario total es la suma de los valores absolutos de todas las glucémias en el período examinado, dividido por el número de días. Mejor valores bajos.' ,nl: 'Gemiddelde veranderingen per dag is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal dagen in deze periode. Lager is beter.' + ,sv: 'Medel Total Daglig Förändring är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden, dividerat med antalet dagar. Lägre är bättre.' + ,de: 'Die gesamte mittlere Änderung pro Tag ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Tage. Niedrigere Werte sind besser.' + ,dk: 'Middel Total Daglig Ændring er summen af absolutværdier af alla glukoseændringer i den undersøgte periode, divideret med antallet af dage. Lavere er bedre.' + ,bg: 'Средната дневна промяна е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя дни в периода. По-ниската стойност е по-добра' + ,pl: 'Sednia całkowita dziennych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę dni. Mniejsze są lepsze' } , '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.' : { - fi: 'Keskimääräinen tunti kertoo kerkimääräisen tuntitason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.' + cs: 'Průměrná hodinová změna je součet absolutní hodnoty všech glykémií za sledované období, dělených počtem hodin v daném období. Nižší hodnota je lepší.' + ,fi: 'Keskimääräinen tunti kertoo keskimääräisen tuntitason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.' + ,fr: 'La Variation Horaire Moyenne est la somme de toute les excursions glycémiques absolues pour une période analysée, divisée par le nombre d\'heures dans la période. Les valeures basses sont les meilleures.' ,it: 'Media Oraria Variazioni è la somma del valore assoluto di tutte le escursioni glicemiche per il periodo esaminato, diviso per il numero di ore. Bassi valori sono migliori.' ,ro: 'Variația media orară este suma valorilor absolute ale tuturor excursiilor glicemice din perioada examinată, împărțite la numărul de ore din aceeași perioadă. Valorile mici sunt de preferat.' ,ru: 'усредненное часовое изменение это сумма абсолютных величин всех отклонений СК в рассматриваемый период, деленное на количество часов в этот период. Более низкое предпочтительней' + ,es: 'El cambio medio por hora, es la suma del valor absoluto de todas las glucemias para el período examinado, dividido por el número de horas en el período. Más bajo es mejor.' ,nl: 'Gemiddelde veranderingen per uur is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal uur in deze periode. Lager is beter.' + ,sv: 'Medelvärde per timme är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden dividerat med antalet timmar under perioden. Lägre är bättre.' + ,de: 'Die mittlere Änderung pro Stunde ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Stunden. Niedrigere Werte sind besser.' + ,dk: 'Middelværdier per time er summen af absolutværdier fra alle glukoseændringer i den undersøgte periode divideret med antallet af timer. Lavere er bedre.' + ,bg: 'Средната промяна за час е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя часове в периода. По-ниската стойност е по-добра' + ,pl: 'Sednia całkowita godzinnych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę godzin. Mniejsze są lepsze' } , 'GVI and PGS are measures developed by Dexcom, detailed here.' : { - fi: 'GVI ja PGS ovat Dexcom-yrityksen kehittämiä mittaustapoja, joista voit lukea lisää täällä..' + cs: 'GVI a PGS jsou měření vyvinutá společností Dexcom, podrobněji zde.' + ,he: 'GVI and PGS are measures developed by Dexcom, detailed here. ' + ,fi: 'GVI ja PGS ovat Dexcom-yrityksen kehittämiä mittaustapoja, joista voit lukea lisää täällä..' ,it: 'GVI e PGS sono misure sviluppate da Dexcom, dettagliate qui.' - ,ro: 'GVI și PGS sunt caracteristici de măsurare inventate de Dexcom, ale căror detalii le găsiți aici.' + ,es: 'Variabilidad de la glucosa en sangre y el estado glucémico del paciente es un valor diseñado por Dexcom, más detalles en here.' + ,fr: 'GVI et PGS sont des mesures développées par la firme Dexcom, présentées en détail ici.' + ,ro: 'GVI și PGS sunt caracteristici de măsurare inventate de Dexcom, ale căror detalii le găsiți aici.' ,ru: 'вариабельность гликемии и статус гликемии больного это величины, разработанные декскомом, подробнее here.' ,nl: 'GVI en PGS zijn maten ontworpen door Dexcom, gedetaillieerde info here.' + ,sv: 'GVI och PGS är värden utvecklade av Dexcom, detaljer här.' + ,de: 'GVI und PGS sind von Dexcom entwickelte Werte. Details hier.' + ,dk: 'GVI og PGS er værdier udviklet af Dexcom, detaljer her.' + ,bg: 'GVI и PGS са параметри разработени от Декском, повече детайли тук.' + ,pl: 'GVI i PGS są pomiarami opracowanymi przez Dexcom, szczegóły tutaj.' } , 'Mean Total Daily Change' : { - fi: 'Keskimääräinen Kokonaismuutos' + cs: 'Průměrná celková denní změna' + ,he: 'שינוי יומי ממוצע ' + ,fi: 'Keskimääräinen Kokonaismuutos' + ,fr: 'Variation Totale Journalière Moyenne' ,it: 'Media Totale Giornaliera Variazioni' ,ro: 'Variația medie totală zilnică' ,ru: 'усредненное изменение за день' + ,es: 'Variación media total diaria' ,nl: 'Gemiddelde veranderingen per dag' + ,sv: 'Medel Total Daglig Förändring' + ,de: 'Gesamte mittlere Änderung pro Tag' + ,dk: 'Middel Total Daglig Ændring' + ,bg: 'Средна промяна за ден' + ,pl: 'Średnia całkowita dziennych zmian' } , 'Mean Hourly Change' : { - fi: 'Keskimääräinen tuntimuutos' + cs: 'Průměrná hodinová změna' + ,he: 'שינוי ממוצע לשעה ' + ,fi: 'Keskimääräinen tuntimuutos' + ,fr: 'Variation Horaire Moyenne' ,it: 'Media Oraria Variazioni' ,ro: 'Variația medie orară' + ,es: 'Variación media total por horas' ,ru: 'усредненное изменение за час' ,nl: 'Gemiddelde veranderingen per uur' + ,sv: 'Medelvärde per timme' + ,de: 'Mittlere Änderung pro Stunde' + ,dk: 'Middelværdier per time' + ,bg: 'Средна промяна за час' + ,pl: 'Średnia całkowita godzinnych zmian' } , 'FortyFiveDown': { bg: 'slightly dropping' - , cs: 'slightly dropping' + , cs: 'lehce dolů' , de: 'leicht sinkend' - , dk: 'slightly dropping' + , dk: 'svagt faldende' , el: 'slightly dropping' , en: 'slightly dropping' - , es: 'slightly dropping' + , es: 'Disminuye lentamente' , fi: 'laskee hitaasti' - , fr: 'slightly dropping' + , fr: 'en chute lente' , he: 'slightly dropping' , hr: 'slightly dropping' - , it: 'slightly dropping' + , it: 'leggera diminuzione' , ko: 'slightly dropping' , nb: 'slightly dropping' - , pl: 'slightly dropping' + , pl: 'niewielki spadek' , pt: 'slightly dropping' - , ro: 'slightly dropping' + , ro: 'scădere ușoară' , ru: 'незначительное падение' , sk: 'slightly dropping' , sv: 'slightly dropping' , nl: 'slightly dropping' , zh_cn: 'slightly dropping' , zh_tw: 'slightly dropping' + }, 'FortyFiveUp': { bg: 'slightly rising' - , cs: 'slightly rising' + , cs: 'lehce nahoru' , de: 'leicht fallend' - , dk: 'slightly rising' + , dk: 'svagt stigende' , el: 'slightly rising' , en: 'slightly rising' - , es: 'slightly rising' + , es: 'Asciende lentamente' , fi: 'nousee hitaasti' - , fr: 'slightly rising' + , fr: 'en montée lente' , he: 'slightly rising' , hr: 'slightly rising' - , it: 'slightly rising' + , it: 'leggero aumento' , ko: 'slightly rising' , nb: 'slightly rising' - , pl: 'slightly rising' + , pl: 'niewielki wzrost' , pt: 'slightly rising' - , ro: 'slightly rising' + , ro: 'creștere ușoară' , ru: 'незначительный подъем' , sk: 'slightly rising' , sv: 'slightly rising' @@ -10364,22 +11828,22 @@ function init() { }, 'Flat': { bg: 'holding' - , cs: 'holding' - , de: 'gleichbleibend' - , dk: 'holding' + , cs: 'stabilní' + , de: 'gleichbleibend' + , dk: 'stabilt' , el: 'holding' , en: 'holding' - , es: 'holding' + , es: 'Sin variación' , fi: 'tasainen' - , fr: 'holding' + , fr: 'stable' , he: 'holding' , hr: 'holding' - , it: 'holding' + , it: 'stabile' , ko: 'holding' , nb: 'holding' - , pl: 'holding' + , pl: 'stabilny' , pt: 'holding' - , ro: 'holding' + , ro: 'stabil' , ru: 'ровный' , sk: 'holding' , sv: 'holding' @@ -10389,22 +11853,22 @@ function init() { }, 'SingleUp': { bg: 'rising' - , cs: 'rising' - , de: 'steigend' - , dk: 'rising' + , cs: 'nahoru' + , de: 'steigend' + , dk: 'stigende' , el: 'rising' , en: 'rising' - , es: 'rising' + , es: 'Ascendiendo' , fi: 'nousussa' - , fr: 'rising' + , fr: 'en montée' , he: 'rising' , hr: 'rising' - , it: 'rising' + , it: 'aumento' , ko: 'rising' , nb: 'rising' - , pl: 'rising' + , pl: 'wzrost' , pt: 'rising' - , ro: 'rising' + , ro: 'creștere' , ru: 'растет' , sk: 'rising' , sv: 'rising' @@ -10414,22 +11878,22 @@ function init() { }, 'SingleDown': { bg: 'dropping' - , cs: 'dropping' - , de: 'sinkend' - , dk: 'dropping' + , cs: 'dolů' + , de: 'sinkend' + , dk: 'faldende' , el: 'dropping' , en: 'dropping' - , es: 'dropping' + , es: 'Bajando' , fi: 'laskussa' - , fr: 'dropping' + , fr: 'en chute' , he: 'dropping' , hr: 'dropping' - , it: 'dropping' + , it: 'diminuzione' , ko: 'dropping' , nb: 'dropping' - , pl: 'dropping' + , pl: 'spada' , pt: 'dropping' - , ro: 'dropping' + , ro: 'scădere' , ru: 'падает' , sk: 'dropping' , sv: 'dropping' @@ -10439,22 +11903,22 @@ function init() { }, 'DoubleDown': { bg: 'rapidly dropping' - , cs: 'rapidly dropping' - , de: 'schnell sinkend' - , dk: 'rapidly dropping' + , cs: 'rychle dolů' + , de: 'schnell sinkend' + , dk: 'hurtigt faldende' , el: 'rapidly dropping' , en: 'rapidly dropping' - , es: 'rapidly dropping' + , es: 'Bajando rápido' , fi: 'laskee nopeasti' - , fr: 'rapidly dropping' + , fr: 'en chute rapide' , he: 'rapidly dropping' , hr: 'rapidly dropping' - , it: 'rapidly dropping' + , it: 'rapida diminuzione' , ko: 'rapidly dropping' , nb: 'rapidly dropping' - , pl: 'rapidly dropping' + , pl: 'szybko spada' , pt: 'rapidly dropping' - , ro: 'rapidly dropping' + , ro: 'scădere bruscă' , ru: 'быстро падает' , sk: 'rapidly dropping' , sv: 'rapidly dropping' @@ -10464,22 +11928,22 @@ function init() { }, 'DoubleUp': { bg: 'rapidly rising' - , cs: 'rapidly rising' - , de: 'schnell steigend' - , dk: 'rapidly rising' + , cs: 'rychle nahoru' + , de: 'schnell steigend' + , dk: 'hurtigt stigende' , el: 'rapidly rising' , en: 'rapidly rising' - , es: 'rapidly rising' + , es: 'Subiendo rápido' , fi: 'nousee nopeasti' - , fr: 'rapidly rising' + , fr: 'en montée rapide' , he: 'rapidly rising' , hr: 'rapidly rising' - , it: 'rapidly rising' + , it: 'rapido aumento' , ko: 'rapidly rising' , nb: 'rapidly rising' - , pl: 'rapidly rising' + , pl: 'szybko rośnie' , pt: 'rapidly rising' - , ro: 'rapidly rising' + , ro: 'creștere rapidă' , ru: 'быстро растет' , sk: 'rapidly rising' , sv: 'rapidly rising' @@ -10489,22 +11953,22 @@ function init() { }, 'alexaStatus': { bg: '%1 and %2 as of %3.' - , cs: '%1 and %2 as of %3.' - , de: '%1 und bis %3 %2.' - , dk: '%1 and %2 as of %3.' + , cs: '%1 %2 čas %3.' + , de: '%1 und bis %3 %2.' + , dk: '%1 og %2 af %3.' , el: '%1 and %2 as of %3.' , en: '%1 and %2 as of %3.' - , es: '%1 and %2 as of %3.' + , es: '%1 y %2 como de %3.' , fi: '%1 ja %2 alkaen %3.' , fr: '%1 and %2 as of %3.' , he: '%1 and %2 as of %3.' , hr: '%1 and %2 as of %3.' - , it: '%1 and %2 as of %3.' + , it: '%1 e %2 come %3.' , ko: '%1 and %2 as of %3.' , nb: '%1 and %2 as of %3.' - , pl: '%1 and %2 as of %3.' + , pl: '%1 i %2 rozpoczęte od %3.' , pt: '%1 and %2 as of %3.' - , ro: '%1 and %2 as of %3.' + , ro: '%1 și %2 din %3.' , nl: '%1 and %2 as of %3.' , ru: '%1 и %2 начиная с %3.' , sk: '%1 and %2 as of %3.' @@ -10513,23 +11977,23 @@ function init() { , zh_tw: '%1 and %2 as of %3.' }, 'alexaBasal': { - bg: '%1 current basal is %2 units per hour' + bg: '%1 současný bazál je %2 jednotek za hodinu' , cs: '%1 current basal is %2 units per hour' - , de: '%1 aktuelle Basalrate ist %2 Einheiten je Stunde' - , dk: '%1 current basal is %2 units per hour' + , de: '%1 aktuelle Basalrate ist %2 Einheiten je Stunde' + , dk: '%1 nuværende basal er %2 enheder per time' , el: '%1 current basal is %2 units per hour' , en: '%1 current basal is %2 units per hour' - , es: '%1 current basal is %2 units per hour' + , es: '%1 basal actual es %2 unidades por hora' , fi: '%1 nykyinen basaali on %2 yksikköä tunnissa' , fr: '%1 current basal is %2 units per hour' , he: '%1 current basal is %2 units per hour' , hr: '%1 current basal is %2 units per hour' - , it: '%1 current basal is %2 units per hour' + , it: '%1 basale attuale è %2 unità per ora' , ko: '%1 current basal is %2 units per hour' , nb: '%1 current basal is %2 units per hour' - , pl: '%1 current basal is %2 units per hour' + , pl: '%1 obecna dawka bazalna %2 J na godzinę' , pt: '%1 current basal is %2 units per hour' - , ro: '%1 current basal is %2 units per hour' + , ro: '%1 bazala curentă este %2 unități pe oră' , ru: '%1 текущий базал %2 ед в час' , sk: '%1 current basal is %2 units per hour' , sv: '%1 current basal is %2 units per hour' @@ -10538,23 +12002,23 @@ function init() { , zh_tw: '%1 current basal is %2 units per hour' }, 'alexaBasalTemp': { - bg: '%1 temp basal of %2 units per hour will end %3' + bg: '%1 dočasný bazál %2 jednotek za hodinu skončí %3' , cs: '%1 temp basal of %2 units per hour will end %3' - , de: '%1 temporäre Basalrate von %2 Einheiten endet in %3' - , dk: '%1 temp basal of %2 units per hour will end %3' + , de: '%1 temporäre Basalrate von %2 Einheiten endet %3' + , dk: '%1 midlertidig basal af %2 enheder per time stopper %3' , el: '%1 temp basal of %2 units per hour will end %3' , en: '%1 temp basal of %2 units per hour will end %3' - , es: '%1 temp basal of %2 units per hour will end %3' + , es: '%1 Basal temporal de %2 unidades por hora hasta el fin %3' , fi: '%1 tilapäinen basaali on %2 tunnissa, päättyy %3' , fr: '%1 temp basal of %2 units per hour will end %3' , he: '%1 temp basal of %2 units per hour will end %3' , hr: '%1 temp basal of %2 units per hour will end %3' - , it: '%1 temp basal of %2 units per hour will end %3' + , it: '%1 basale temporanea di %2 unità per ora finirà %3' , ko: '%1 temp basal of %2 units per hour will end %3' , nb: '%1 temp basal of %2 units per hour will end %3' - , pl: '%1 temp basal of %2 units per hour will end %3' + , pl: '%1 tymczasowa dawka bazalna %2 J na godzinę zakoczy się o %3' , pt: '%1 temp basal of %2 units per hour will end %3' - , ro: '%1 temp basal of %2 units per hour will end %3' + , ro: '%1 bazala temporară de %2 unități pe oră se va termina la %3' , ru: '%1 временный базал %2 ед в час закончится в %3' , sk: '%1 temp basal of %2 units per hour will end %3' , sv: '%1 temp basal of %2 units per hour will end %3' @@ -10563,23 +12027,23 @@ function init() { , zh_tw: '%1 temp basal of %2 units per hour will end %3' }, 'alexaIob': { - bg: 'and you have %1 insulin on board.' + bg: 'a máte %1 jednotek aktivního inzulínu.' , cs: 'and you have %1 insulin on board.' , de: 'und du hast %1 Insulin wirkend.' - , dk: 'and you have %1 insulin on board.' + , dk: 'og du har %1 insulin i kroppen.' , el: 'and you have %1 insulin on board.' , en: 'and you have %1 insulin on board.' - , es: 'and you have %1 insulin on board.' + , es: 'y tu tienes %1 insulina activa.' , fi: 'ja sinulla on %1 aktivista insuliinia.' , fr: 'and you have %1 insulin on board.' , he: 'and you have %1 insulin on board.' , hr: 'and you have %1 insulin on board.' - , it: 'and you have %1 insulin on board.' + , it: 'e tu hai %1 insulina attiva.' , ko: 'and you have %1 insulin on board.' , nb: 'and you have %1 insulin on board.' - , pl: 'and you have %1 insulin on board.' + , pl: 'i masz %1 aktywnej insuliny.' , pt: 'and you have %1 insulin on board.' - , ro: 'and you have %1 insulin on board.' + , ro: 'și mai aveți %1 insulină activă.' , ru: 'и вы имеете %1 инсулина в организме.' , sk: 'and you have %1 insulin on board.' , sv: 'and you have %1 insulin on board.' @@ -10588,23 +12052,23 @@ function init() { , zh_tw: 'and you have %1 insulin on board.' }, 'alexaIobIntent': { - bg: 'You have %1 insulin on board' + bg: 'Máte %1 jednotek aktivního inzulínu' , cs: 'You have %1 insulin on board' , de: 'Du hast noch %1 Insulin wirkend' - , dk: 'You have %1 insulin on board' + , dk: 'Du har %1 insulin i kroppen' , el: 'You have %1 insulin on board' , en: 'You have %1 insulin on board' - , es: 'You have %1 insulin on board' + , es: 'Tienes %1 insulina activa' , fi: 'Sinulla on %1 aktiivista insuliinia' , fr: 'You have %1 insulin on board' , he: 'You have %1 insulin on board' , hr: 'You have %1 insulin on board' - , it: 'You have %1 insulin on board' + , it: 'Tu hai %1 insulina attiva' , ko: 'You have %1 insulin on board' , nb: 'You have %1 insulin on board' - , pl: 'You have %1 insulin on board' + , pl: 'Masz %1 aktywnej insuliny' , pt: 'You have %1 insulin on board' - , ro: 'You have %1 insulin on board' + , ro: 'Aveți %1 insulină activă' , ru: 'вы имеете %1 инсулина в организме' , sk: 'You have %1 insulin on board' , sv: 'You have %1 insulin on board' @@ -10614,22 +12078,23 @@ function init() { }, 'alexaIobUnits': { bg: '%1 units of' - , cs: '%1 units of' + , cs: '%1 jednotek' , de: 'noch %1 Einheiten' - , dk: '%1 units of' + , dk: '%1 enheder af' , el: '%1 units of' , en: '%1 units of' - , es: '%1 units of' + , es: '%1 unidades de' , fi: '%1 yksikköä' , fr: '%1 units of' , he: '%1 units of' , hr: '%1 units of' - , it: '%1 units of' + , it: '%1 unità di' , ko: '%1 units of' , nb: '%1 units of' - , pl: '%1 units of' + , pl: '%1 jednostek' , pt: '%1 units of' - , ro: '%1 units of' + , ro: '%1 unități' + , nl: '%1 units of' , ru: '%1 единиц' , sk: '%1 units of' , sv: '%1 units of' @@ -10638,22 +12103,23 @@ function init() { }, 'alexaPreamble': { bg: 'Your' - , cs: 'Your' + , cs: 'Vaše' , de: 'Deine' - , dk: 'Your' + , dk: 'Dine' , el: 'Your' , en: 'Your' - , es: 'Your' + , es: 'Tú' , fi: 'Sinun' , fr: 'Your' , he: 'Your' , hr: 'Your' - , it: 'Your' + , it: 'Tuo' , ko: 'Your' , nb: 'Your' - , pl: 'Your' + , pl: 'twój' , pt: 'Your' - , ro: 'Your' + , nl: 'Jouw' + , ro: '' , ru: 'ваш' , sk: 'Your' , sv: 'Your' @@ -10662,23 +12128,24 @@ function init() { }, 'alexaPreamble3person': { bg: '%1 has a ' - , cs: '%1 has a ' + , cs: '%1 má ' , de: '%1 hat eine' - , dk: '%1 has a ' + , dk: '%1 har en ' , el: '%1 has a ' , en: '%1 has a ' - , es: '%1 has a ' + , es: '%1 tiene un ' , fi: '%1 on ' , fr: '%1 has a ' , he: '%1 has a ' , hr: '%1 has a ' - , it: '%1 has a ' + , it: '%1 ha un ' , ko: '%1 has a ' , nb: '%1 has a ' - , pl: '%1 has a ' + , nl: '%1 heeft een ' + , pl: '%1 ma ' , pt: '%1 has a ' - , ro: '%1 имеет ' - , ru: '%1 has a ' + , ro: '%1 are ' + , ru: '%1 имеет ' , sk: '%1 has a ' , sv: '%1 has a ' , zh_cn: '%1 has a ' @@ -10686,9 +12153,9 @@ function init() { }, 'alexaNoInsulin': { bg: 'no' - , cs: 'no' + , cs: 'žádný' , de: 'kein' - , dk: 'no' + , dk: 'nej' , el: 'no' , en: 'no' , es: 'no' @@ -10699,35 +12166,409 @@ function init() { , it: 'no' , ko: 'no' , nb: 'no' - , pl: 'no' + , nl: 'geen' + , pl: 'nie' , pt: 'no' - , ro: 'no' + , ro: 'fără' , ru: 'нет' , sk: 'no' , sv: 'no' , zh_cn: 'no' , zh_tw: 'no' + }, + 'alexaUploadBattery': { + bg: 'Your uploader battery is at %1' + ,cs: 'Baterie mobilu má %1' + , en: 'Your uploader battery is at %1' + , de: 'Der Akku deines Uploader Handys ist bei %1' + , dk: 'Din uploaders batteri er %1' + , nl: 'De batterij van je mobiel is bij %l' + , sv: 'Din uppladdares batteri är %1' + , fi: 'Lähettimen paristoa jäljellä %1' + , ro: 'Bateria uploaderului este la %1' + , pl: 'Twoja bateria ma %1' + }, + 'alexaReservoir': { + bg: 'You have %1 units remaining' + , cs: 'V zásobníku zbývá %1 jednotek' + , en: 'You have %1 units remaining' + , de: 'Du hast %1 Einheiten übrig' + , dk: 'Du har %1 enheder tilbage' + , nl: 'Je hebt nog %l eenheden in je reservoir' + , sv: 'Du har %1 enheter kvar' + , fi: '%1 yksikköä insuliinia jäljellä' + , ro: 'Mai aveți %1 unități rămase' + , pl: 'W zbiorniku pozostało %1 jednostek' + }, + 'alexaPumpBattery': { + bg: 'Your pump battery is at %1 %2' + , cs: 'Baterie v pumpě má %1 %2' + , en: 'Your pump battery is at %1 %2' + , de: 'Der Batteriestand deiner Pumpe ist bei %1 %2' + , dk: 'Din pumpes batteri er %1 %2' + , nl: 'Je pomp batterij is bij %1 %2' + , sv: 'Din pumps batteri är %1 %2' + , fi: 'Pumppu on %1 %2' + , ro: 'Bateria pompei este la %1 %2' + , pl: 'Bateria pompy jest w %1 %2' + }, + 'alexaLastLoop': { + bg: 'The last successful loop was %1' + , cs: 'Poslední úšpěšné provedení smyčky %1' + , en: 'The last successful loop was %1' + , de: 'Der letzte erfolgreiche Loop war %1' + , dk: 'Seneste successfulde loop var %1' + , nl: 'De meest recente goede loop was %1' + , sv: 'Senaste lyckade loop var %1' + , fi: 'Viimeisin onnistunut loop oli %1' + , ro: 'Ultima decizie loop implementată cu succes a fost %1' + , pl: 'Ostatnia pomyślna pętla była %1' + }, + 'alexaLoopNotAvailable': { + bg: 'Loop plugin does not seem to be enabled' + , cs: 'Plugin smyčka není patrně povolený' + , en: 'Loop plugin does not seem to be enabled' + , de: 'Das Loop Plugin scheint nicht aktiviert zu sein' + , dk: 'Loop plugin lader ikke til at være slået til' + , nl: 'De Loop plugin is niet geactiveerd' + , sv: 'Loop plugin verkar inte vara aktiverad' + , fi: 'Loop plugin ei ole aktivoitu' + , ro: 'Extensia loop pare a fi dezactivată' + , pl: 'Plugin Loop prawdopodobnie nie jest włączona' + }, + 'alexaLoopForecast': { + bg: 'According to the loop forecast you are expected to be %1 over the next %2' + , cs: 'Podle přepovědi smyčky je očekávána glykémie %1 během následujících %2' + , en: 'According to the loop forecast you are expected to be %1 over the next %2' + , de: 'Entsprechend der Loop Vorhersage landest du bei %1 während der nächsten %2' + , dk: 'Ifølge Loops forudsigelse forventes du at blive %1 i den næste %2' + , nl: 'Volgens de Loop voorspelling is je waarde %1 over de volgnede %2' + , sv: 'Enligt Loops förutsägelse förväntas du bli %1 inom %2' + , fi: 'Ennusteen mukaan olet %1 seuraavan %2 ajan' + , ro: 'Potrivit previziunii date de loop se estiemază %1 pentru următoarele %2' + , pl: 'Zgodnie z prognozą pętli, glikemia %1 będzie podczas następnego %2' + }, + 'alexaForecastUnavailable': { + bg: 'Unable to forecast with the data that is available' + , cs: 'S dostupnými daty přepověď není možná' + , en: 'Unable to forecast with the data that is available' + , de: 'Mit den verfügbaren Daten ist eine Loop Vorhersage nicht möglich' + , dk: 'Det er ikke muligt at forudsige md de tilgængelige data' + , nl: 'Niet mogelijk om een voorspelling te doen met de data die beschikbaar is' + , sv: 'Förutsägelse ej möjlig med tillgänlig data' + , fi: 'Ennusteet eivät ole toiminnassa puuttuvan tiedon vuoksi' + , ro: 'Estimarea este imposibilă pe baza datelor disponibile' + , pl: 'Prognoza pętli nie jest możliwa, z dostępnymi danymi.' + }, + 'alexaRawBG': { + en: 'Your raw bg is %1' + , cs: 'Raw glykémie je %1' + , de: 'Dein Rohblutzucker ist %1' + , dk: 'Dit raw blodsukker er %1' + , nl: 'Je raw bloedwaarde is %1' + , sv: 'Ditt raw blodsocker är %1' + , fi: 'Suodattamaton verensokeriarvo on %1' + , ro: 'Glicemia brută este %1' + , bg: 'Your raw bg is %1' + , pl: 'Glikemia RAW wynosi %1' + }, + 'alexaOpenAPSForecast': { + en: 'The OpenAPS Eventual BG is %1' + , cs: 'OpenAPS Eventual BG je %1' + , de: 'Der von OpenAPS vorhergesagte Blutzucker ist %1' + , dk: 'OpenAPS forventet blodsukker er %1' + , nl: 'OpenAPS uiteindelijke bloedglucose van %1' + , sv: 'OpenAPS slutgiltigt blodsocker är %1' + , fi: 'OpenAPS verensokeriarvio on %1' + , ro: 'Glicemia estimată de OpenAPS este %1' + ,bg: 'The OpenAPS Eventual BG is %1' + , pl: 'Glikemia prognozowana przez OpenAPS wynosi %1' + }, + 'alexaCOB': { + en: '%1 %2 carbohydrates on board' + , cs: '%1 %2 aktivních sachridů' + , de: '%1 %2 Gramm Kohlenhydrate wirkend.' + , dk: '%1 %2 gram aktive kulhydrater' + , nl: '%1 %2 actieve koolhydraten' + , sv: '%1 %2 gram aktiva kolhydrater' + , fi: '%1 %2 aktiivista hiilihydraattia' + , ro: '%1 %2 carbohidrați activi în corp' + ,bg: '%1 %2 carbohydrates on board' + , pl: '%1 %2 aktywnych węglowodanów' }, 'Fat [g]': { cs: 'Tuk [g]' ,de: 'Fett [g]' + ,dk: 'Fet [g]' + ,es: 'Grasas [g]' ,fi: 'Rasva [g]' + ,fr: 'Graisses [g]' + ,nl: 'Vet [g]' + ,ro: 'Grăsimi [g]' + ,ru: 'жиры' + ,it: 'Grassi [g]' + ,sv: 'Fett [g]' + ,bg: 'Мазнини [гр]' + ,pl: 'Tłuszcz [g]' }, 'Protein [g]': { cs: 'Proteiny [g]' ,de: 'Proteine [g]' + ,dk: 'Protein [g]' + ,es: 'Proteina [g]' ,fi: 'Proteiini [g]' + ,fr: 'Protéines [g]' + ,nl: 'Proteine [g]' + ,ro: 'Proteine [g]' + ,ru: 'белки' + ,it: 'Proteine [g]' + ,sv: 'Protein [g]' + ,bg: 'Протеини [гр]' + ,pl: 'Białko [g]' }, 'Energy [kJ]': { cs: 'Energie [kJ]' - ,de: 'Energie [kJ]' - , fi: 'Energia [kJ]' - } - , + ,de: 'Energie [kJ]' + ,dk: 'Energi [kJ]' + ,fi: 'Energia [kJ]' + ,es: 'Energía [Kj]' + ,fr: 'Énergie [kJ]' + ,ro: 'Energie [g]' + ,ru: 'энергетика' + ,it: 'Energia [kJ]' + ,nl: 'Energie [kJ]' + ,sv: 'Energi [kJ]' + ,bg: 'Енергия [kJ]' + ,pl: 'Energia [kJ}' + }, + 'Clock Views:': { + cs: 'Hodiny:' + ,fi: 'Kellonäkymä:' + ,nl: 'Klokweergave:' + ,es: 'Vista del reloj:' + ,fr: 'Vue Horloge:' + ,ro: 'Vedere tip ceas:' + ,ru: 'цифры крупно:' + ,it: 'Vista orologio:' + ,sv: 'Visa klocka:' + ,de: 'Uhr-Anzeigen' + ,dk: 'Vis klokken:' + ,bg: 'Часовник изглед:' + ,pl: 'Widoki zegarów' + }, + 'Clock': { + cs: 'Hodiny' + ,fr: 'L\'horloge' + ,nl: 'Klok' + ,sv: 'Klocka' + ,de: 'Uhr' + ,dk: 'Klokken' + ,fi: 'Kello' + ,ro: 'Ceas' + ,it: 'Orologio' + ,bg: 'Часовник' + ,pl: 'Zegar' + }, + 'Color': { + cs: 'Barva' + ,fr: 'Couleur' + ,nl: 'Kleur' + ,sv: 'Färg' + ,de: 'Farbe' + ,dk: 'Farve' + ,fi: 'Väri' + ,ro: 'Culoare' + ,it: 'Colore' + ,bg: 'Цвят' + ,pl: 'Kolor' + }, + 'Simple': { + cs: 'Jednoduchý' + ,fr: 'Simple' + ,nl: 'Simpel' + ,sv: 'Simpel' + ,de: 'Einfach' + ,dk: 'Simpel' + ,fi: 'Yksinkertainen' + ,ro: 'Simplu' + ,it: 'Semplice' + ,bg: 'Прост' + ,pl: 'Prosty' + }, + 'TDD average': { + cs: 'Průměrná denní dávka' + , fi: 'Päivän kokonaisinsuliinin keskiarvo' + , nl: 'Gemiddelde dagelijkse insuline (TDD)' + , sv: 'Genomsnittlig daglig mängd insulin' + , de: 'durchschnittliches Insulin pro Tag (TDD)' + , dk: 'Gennemsnitlig daglig mængde insulin' + , ro: 'Media Dozei Zilnice Totale de insulină (TDD)' + , it: 'Totale Dose Giornaliera media (TDD)' + , bg: 'Обща дневна доза средно' + , pl: 'Średnia dawka dzienna' + }, + 'Carbs average': { + cs: 'Průměrné množství sacharidů' + , fi: 'Hiilihydraatit keskiarvo' + , nl: 'Gemiddelde koolhydraten per dag' + , sv: 'Genomsnittlig mängd kolhydrater per dag' + , de: 'durchschnittliche Kohlenhydrate pro Tag' + , dk: 'Gennemsnitlig mængde kulhydrater per dag' + , ro: 'Media carbohidraților' + , it: 'Media carboidrati' + , bg: 'Въглехидрати средно' + , pl: 'Średnia ilość węglowodanów' + }, + 'Eating Soon': { + cs: 'Blížící se jídlo' + , fi: 'Ruokailu pian' + , nl: 'Pre-maaltijd modus' + , sv: 'Äter snart' + , de: 'Bald Essen' + , dk: 'Spiser snart' + , ro: 'Mâncare în curând' + , it: 'Mangiare presto' + , bg: 'Преди хранене' + , pl: 'Przed jedzeniem' + }, + 'Last entry {0} minutes ago': { + cs: 'Poslední hodnota {0} minut zpět' + , fi: 'Edellinen verensokeri {0} minuuttia sitten' + , nl: 'Laatste waarde {0} minuten geleden' + , sv: 'Senaste värde {0} minuter sedan' + , de: 'Letzter Eintrag vor {0} Minuten' + , dk: 'Seneste værdi {0} minutter siden' + , ro: 'Ultima înregistrare acum {0} minute' + , it: 'Ultimo inserimento {0} minuti fa' + , bg: 'Последен запис преди {0} минути' + , pl: 'Ostatni wpis przed {0} minutami' + }, + 'change': { + cs: 'změna' + , fi: 'muutos' + , nl: 'wijziging' + , sv: 'byta' + , de: 'verändern' + , dk: 'ændre' + , ro: 'schimbare' + , it: 'cambio' + , bg: 'промяна' + , pl: 'zmiana' + }, + 'Speech': { + cs: 'Hlas' + , fi: 'Puhe' + , nl: 'Spraak' + , sv: 'Tal' + , de: 'Sprache' + , dk: 'Tale' + , ro: 'Vorbă' + , it: 'Voce' + , bg: 'Глас' + , pl: 'Głos' + }, + 'Target Top': { + cs: 'Horní cíl' + , dk: 'Højt mål' + , fi: 'Tavoite ylä' + , nl: 'Hoog tijdelijk doel' + , ro: 'Țintă superioară' + , it: 'Limite superiore' + , sv: 'Högt målvärde' + , bg: 'Горна граница' + , pl: 'Górny limit' + }, + 'Target Bottom': { + cs: 'Dolní cíl' + , dk: 'Lavt mål' + , fi: 'Tavoite ala' + , nl: 'Laag tijdelijk doel' + , ro: 'Țintă inferioară' + , it: 'Limite inferiore' + , sv: 'Lågt målvärde' + , bg: 'Долна граница' + , pl: 'Dolny limit' + }, + 'Canceled': { + cs: 'Zrušený' + , dk: 'Afbrudt' + , fi: 'Peruutettu' + , nl: 'Geannuleerd' + , ro: 'Anulat' + , it: 'Cancellato' + , sv: 'Avbruten' + , bg: 'Отказан' + , pl: 'Anulowane' + }, + 'Meter BG': { + cs: 'Hodnota z glukoměru' + , dk: 'Blodsukkermåler BS' + , fi: 'Mittarin VS' + , nl: 'Bloedglucosemeter waarde' + , ro: 'Glicemie din glucometru' + , it: 'Glicemia Capillare' + , sv: 'Blodsockermätare BG' + , bg: 'Измерена КЗ' + , pl: 'Glikemia z krwi' + }, + 'predicted': { + cs: 'přepověď' + , dk: 'forudset' + , fi: 'ennuste' + , nl: 'verwachting' + , ro: 'estimat' + , it: 'predetto' + , sv: 'prognos' + ,bg: 'прогнозна' + , pl: 'prognoza' + }, + 'future': { + cs: 'budoucnost' + , dk: 'fremtidige' + , fi: 'tulevaisuudessa' + , nl: 'toekomstig' + , ro: 'viitor' + , it: 'futuro' + , sv: 'framtida' + , bg: 'бъдеще' + , pl: 'przyszłość' + }, + 'ago': { + cs: 'zpět' + , dk: 'siden' + , fi: 'sitten' + , nl: 'geleden' + , ro: 'în trecut' + , sv: 'förfluten' + , bg: 'преди' + , pl: 'temu' + }, + 'Last data received': { + cs: 'Poslední data přiajata' + , dk: 'Sidste data modtaget' + , fi: 'Tietoa vastaanotettu viimeksi' + , nl: 'Laatste gegevens ontvangen' + , ro: 'Ultimele date primite' + , it: 'Ultimo dato ricevuto' + , sv: 'Data senast mottagen' + , bg: 'Последни данни преди' + , pl: 'Ostatnie otrzymane dane' + }, 'Clock View': { - fi: 'Kellonäkymä' + cs: 'Hodiny' + ,dk: 'Vis klokken' + ,fi: 'Kellonäkymä' + ,es: 'Vista del reloj' + ,fr: 'Vue Horloge' + ,ro: 'Vedere tip ceas' + ,ru: 'цифры крупно' + ,it: 'Vista orologio' + ,sv: 'Visa klocka' + ,bg: 'Изглед часовник' + ,nl: 'Klokweergave' + ,de: 'Uhr-Anzeigen' + , pl: 'Widok zegara' } - }; language.translations = translations; @@ -10735,8 +12576,8 @@ function init() { // case sensitive language.translateCS = function translateCaseSensitive(text) { - if (translations[text] && translations[text][lang]) { - return translations[text][lang]; + if (translations[text] && translations[text][language.lang]) { + return translations[text][language.lang]; } return text; }; @@ -10746,8 +12587,8 @@ function init() { var utext = text.toUpperCase(); _.forEach(translations, function (ts, key) { var ukey = key.toUpperCase(); - if (ukey === utext && ts[lang]) { - text = ts[lang]; + if (ukey === utext && ts[language.lang]) { + text = ts[language.lang]; } }); return text; @@ -10782,7 +12623,12 @@ function init() { }; language.set = function set(newlang) { - lang = newlang; + language.lang = newlang; + + language.languages.forEach(function (l) { + if (l.code == language.lang && l.speechCode) language.speechCode = l.speechCode; + }); + return language(); }; diff --git a/lib/levels.js b/lib/levels.js index 53af4bf2dc2..94dac71416c 100644 --- a/lib/levels.js +++ b/lib/levels.js @@ -1,7 +1,5 @@ 'use strict'; -var translate = require('./language')().translate; - var levels = { URGENT: 2 , WARN: 1 @@ -11,6 +9,9 @@ var levels = { , NONE: -3 }; +levels.language = require('./language')(); +levels.translate = levels.language.translate; + var level2Display = { '2': 'Urgent' , '1':'Warning' @@ -26,7 +27,7 @@ levels.isAlarm = function isAlarm(level) { levels.toDisplay = function toDisplay(level) { var key = level !== undefined && level.toString(); - return key && translate(level2Display[key]) || translate('Unknown'); + return key && levels.translate(level2Display[key]) || levels.translate('Unknown'); }; levels.toLowerCase = function toLowerCase(level) { diff --git a/lib/middleware/express-extension-to-accept.js b/lib/middleware/express-extension-to-accept.js new file mode 100644 index 00000000000..8f357e869a1 --- /dev/null +++ b/lib/middleware/express-extension-to-accept.js @@ -0,0 +1,41 @@ +var mime = require('mime') +var url = require('url') + +module.exports = function (formats) { + if (!Array.isArray(formats)) + throw new TypeError('Formats must be an array.') + + var getType = Object.create(null) + + formats.forEach(function (format) { + if (!/^\w+$/.test(format)) + throw new TypeError('Invalid format - must be a word.') + + var type = getType[format] = mime.getType(format) + if (!type || type === 'application/octet-stream') + throw new Error('Invalid format.') + }) + + var regexp = new RegExp('\.(' + formats.join('|') + ')$', 'i') + + return function (req, res, next) { + var match = req.path.match(regexp) + if (!match) + return next() + var type = getType[match[1]] + if (!type) + return next() + + req.extToAccept = { + url: req.url, + accept: req.headers.accept + } + + req.headers.accept = type + var parsed = url.parse(req.url) + parsed.pathname = req.path.replace(regexp, '') + req.url = url.format(parsed) + + next() + } +} \ No newline at end of file diff --git a/lib/middleware/index.js b/lib/middleware/index.js index d7c96c6db79..c20eede6351 100644 --- a/lib/middleware/index.js +++ b/lib/middleware/index.js @@ -7,7 +7,7 @@ var wares = { }; function extensions (list) { - return require('express-extension-to-accept')(list); + return require('./express-extension-to-accept')(list); } function configure (env) { diff --git a/lib/plugins/alexa-plugin.md b/lib/plugins/alexa-plugin.md index 2acfb780b6b..ab2c897c66e 100644 --- a/lib/plugins/alexa-plugin.md +++ b/lib/plugins/alexa-plugin.md @@ -1,98 +1,274 @@ -**Table of Contents** -- [Nightscout/Alexa](#nightscoutalexa) - - [Setup](#setup) - - [Adding alexa support to a plugin](#Adding-alexa-support-to-a-plugin) - - [Intent Handlers](#Intent-Handlers) - - [Rollup handlers](#Rollup-handlers) - -Nightscout/Alexa +Nightscout Alexa Plugin ====================================== -> Please note that your hosted montitor must support the Alexa plug-in which exposes an endpoint to the Alexa skill you will create below. Please see [updating my version here](https://github.com/nightscout/cgm-remote-monitor#updating-my-version) for steps +## Overview -##Setup +To add Alexa support for your Nightscout site, here's what you need to do: -### 1) Make sure to add `alexa` to the list of plugins in your `ENABLE` setting (note: environment variables are set in the configuration section for your monitor typically Azure, Heroku, etc.) -### 2) Sign in to https://developer.amazon.com/ and navigate to the "Alexa" tab. Select "Getting started" in "Alexa Skills Kit" NOTE: You must sign in to the developer account using the same Amazon account as you use to manage your Echo device. - * Click on "Add a new skill". Fill in "Nightscout" as the name and "nightscout" as the invocation name (feel free to use other names as you see fit). - * This skill will not use the "Audio Player". - * Click Next -### 3) Enter the following in the "Intent schema" box +1. [Activate the `alexa` plugin](#activate-the-nightscout-alexa-plugin) on your Nightscout site, so your site will respond correctly to Alexa's requests. +1. [Create a custom Alexa skill](#create-your-alexa-skill) that points at your site and defines certain questions you want to be able to ask. (You'll copy and paste a basic template for this, to keep things simple.) -```javascript +To add Alexa support for a plugin, [check this out](#adding-alexa-support-to-a-plugin). + +## Activate the Nightscout Alexa Plugin + +1. Your Nightscout site needs to be new enough that it supports the `alexa` plugin. It needs to be [version 0.9.1 (Grilled Cheese)](https://github.com/nightscout/cgm-remote-monitor/releases/tag/0.9.1) or later. See [updating my version](https://github.com/nightscout/cgm-remote-monitor#updating-my-version) if you need a newer version. +1. Add `alexa` to the list of plugins in your `ENABLE` setting. ([Environment variables](https://github.com/nightscout/cgm-remote-monitor#environment) are set in the configuration section for your monitor. Typically Azure, Heroku, etc.) + +## Create Your Alexa Skill + +### Get an Amazon Developer account + +- Sign up for a free [Amazon Developer account](https://developer.amazon.com/) if you don't already have one. +- [Register](https://developer.amazon.com/docs/devconsole/test-your-skill.html#h2_register) your Alexa-enabled device with your Developer account. +- Sign in and go to the [Alexa developer portal](https://developer.amazon.com/alexa). + +### Create a new Alexa skill + +1. Select "Alexa Skills Kit" in the main menu bar. +1. Click the "Start a Skill" button. This will take you to the Skills console. +1. Click the "Create Skill" button on the Skills console page. +1. Name your new skill "Nightscout" (or something else, if you like). Use English (US) as your language. Click "Next". +1. Choose a model to add to your skill. Click "Select" under "Custom" model, then click "Create skill" on the upper right. +1. Congrats! Your empty custom skill should now be created. + +### Define the interaction model + +Your Alexa skill's "interaction model" defines how your spoken questions get translated into requests to your Nightscout site, and how your Nightscout site's responses get translated into the audio responses that Alexa says back to you. + +To get up and running with a basic interaction model, which will allow you to ask Alexa a few basic questions about your Nightscout site, you can copy and paste the configuration code below. + +```json { - "intents" : [ - { - "intent": "NSStatus" - },{ - "intent": "UploaderBattery" - },{ - "intent": "PumpBattery" - },{ - "intent": "LastLoop" - },{ - "intent" : "MetricNow", - "slots" : [{ - "name" : "metric", - "type" : "LIST_OF_METRICS" - },{ - "name" : "pwd", - "type": "AMAZON.US_FIRST_NAME" - }] - }, { - "intent": "InsulinRemaining", - "slots" : [{ - "name" : "pwd", - "type": "AMAZON.US_FIRST_NAME" - }] + "interactionModel": { + "languageModel": { + "invocationName": "nightscout", + "intents": [ + { + "name": "NSStatus", + "slots": [], + "samples": [ + "How am I doing" + ] + }, + { + "name": "UploaderBattery", + "slots": [], + "samples": [ + "How is my uploader battery" + ] + }, + { + "name": "PumpBattery", + "slots": [], + "samples": [ + "How is my pump battery" + ] + }, + { + "name": "LastLoop", + "slots": [], + "samples": [ + "When was my last loop" + ] + }, + { + "name": "MetricNow", + "slots": [ + { + "name": "metric", + "type": "LIST_OF_METRICS" + }, + { + "name": "pwd", + "type": "AMAZON.US_FIRST_NAME" + } + ], + "samples": [ + "What is my {metric}", + "What my {metric} is", + "What is {pwd} {metric}" + ] + }, + { + "name": "InsulinRemaining", + "slots": [ + { + "name": "pwd", + "type": "AMAZON.US_FIRST_NAME" + } + ], + "samples": [ + "How much insulin do I have left", + "How much insulin do I have remaining", + "How much insulin does {pwd} have left", + "How much insulin does {pwd} have remaining" + ] + } + ], + "types": [ + { + "name": "LIST_OF_METRICS", + "values": [ + { + "name": { + "value": "bg" + } + }, + { + "name": { + "value": "blood glucose" + } + }, + { + "name": { + "value": "number" + } + }, + { + "name": { + "value": "iob" + } + }, + { + "name": { + "value": "insulin on board" + } + }, + { + "name": { + "value": "current basal" + } + }, + { + "name": { + "value": "basal" + } + }, + { + "name": { + "value": "cob" + } + }, + { + "name": { + "value": "carbs on board" + } + }, + { + "name": { + "value": "carbohydrates on board" + } + }, + { + "name": { + "value": "loop forecast" + } + }, + { + "name": { + "value": "ar2 forecast" + } + }, + { + "name": { + "value": "forecast" + } + }, + { + "name": { + "value": "raw bg" + } + }, + { + "name": { + "value": "raw blood glucose" + } + } + ] + } + ] } - ] + } } ``` -### 4) Add a custom slot named "LIST_OF_METRICS" with the following values -``` -bg -blood glucose -number -iob -insulin on board -current basal -basal -cob -carbs on board -carbohydrates on board -loop forecast -ar2 forecast -forecast -raw bg -raw blood glucose -``` +Select "JSON Editor" in the left-hand menu on your skill's edit page (which you should be on if you followed the above instructions). Replace everything in the textbox with the above code. Then click "Save Model" at the top. A success message should appear indicating that the model was saved. -### 5) Enter the following for "Sample Utterances" -``` -NSStatus How am I doing -UploaderBattery How is my uploader battery -PumpBattery How is my pump battery -MetricNow What is my {metric} -MetricNow What my {metric} is -MetricNow What is {pwd} {metric} -InsulinRemaining How much insulin do I have left -InsulinRemaining How much insulin do I have remaining -InsulinRemaining How much insulin does {pwd} have left -InsulinRemaining How much insulin does {pwd} have remaining -LastLoop When was my last loop -``` -### 6) Click next. Select "HTTPS" for your service endpoint. - * In the HTTPS URL enter the following: ``https:///api/v1/alexa`` - * Select "No" for Account Linking * Select the appropriate certificate type. For heroku this is typically "My development endpoint is a sub-domain of a domain that has a wildcard certificate from a certificate authority" - * Click "Next" - * Enable the skill if it isn't already. +Next you need to build your custom model. Click "Build Model" at the top of the same page. It'll take a minute to build, and then you should see another success message, "Build Successful". + +You now have a custom Alexa skill that knows how to talk to a Nightscout site. + +### Point your skill at your site + +Now you need to point your skill at *your* Nightscout site. + +1. In the left-hand menu for your skill, there's an option called "Endpoint". Click it. +1. Under "Service Endpoint Type", select "HTTPS". +1. You only need to set up the Default Region. In the box that says "Enter URI...", put in `https://{yourdomain}/api/v1/alexa`. (So if your Nightscout site is at `mynightscoutsite.herokuapp.com`, you'll enter `https://mynightscoutsite.herokuapp.com/api/v1/alexa` in the box.) +1. In the dropdown under the previous box, select "My development endpoint is a sub-domain of a domain that has a wildcard certificate from a certificate authority". +1. Click the "Save Endpoints" button at the top. +1. You should see a success message pop up when the save succeeds. + +### Test your skill out with the test tool -### 7) You should now be able to interact with Nightscout via Alexa. +Click on the "Test" tab on the top menu. This will take you to the page where you can test your new skill. +Enable testing for your skill (click the toggle). As indicated on this page, when testing is enabled, you can interact with the development version of your skill in the Alexa simulator and on all devices linked to your Alexa developer account. (Your skill will always be a development version. There's no need to publish it to the public.) + +After you enable testing, you can also use the Alexa Simulator in the left column, to try out the skill. You can type in questions and see the text your skill would reply with. You can also hold the microphone icon to ask questions using your microphone, and you'll get the audio and text responses back. + +##### What questions can you ask it? + +*Forecast:* + +- "Alexa, ask Nightscout how am I doing" +- "Alexa, ask Nightscout how I'm doing" + +*Uploader Battery:* + +- "Alexa, ask Nightscout how is my uploader battery" + +*Pump Battery:* + +- "Alexa, ask Nightscout how is my pump battery" + +*Metrics:* + +- "Alexa, ask Nightscout what my bg is" +- "Alexa, ask Nightscout what my blood glucose is" +- "Alexa, ask Nightscout what my number is" +- "Alexa, ask Nightscout what is my insulin on board" +- "Alexa, ask Nightscout what is my basal" +- "Alexa, ask Nightscout what is my current basal" +- "Alexa, ask Nightscout what is my cob" +- "Alexa, ask Nightscout what is Charlie's carbs on board" +- "Alexa, ask Nightscout what is Sophie's carbohydrates on board" +- "Alexa, ask Nightscout what is Harper's loop forecast" +- "Alexa, ask Nightscout what is Alicia's ar2 forecast" +- "Alexa, ask Nightscout what is Peter's forecast" +- "Alexa, ask Nightscout what is Arden's raw bg" +- "Alexa, ask Nightscout what is Dana's raw blood glucose" + +*Insulin Remaining:* + +- "Alexa, ask Nightscout how much insulin do I have left" +- "Alexa, ask Nightscout how much insulin do I have remaining" +- "Alexa, ask Nightscout how much insulin does Dana have left? +- "Alexa, ask Nightscout how much insulin does Arden have remaining? + +*Last Loop:* + +- "Alexa, ask Nightscout when was my last loop" + +(Note: all the formats with specific names will respond to questions for any first name. You don't need to configure anything with your PWD's name.) + +### Activate the skill on your Echo or other device + +If your device is [registered](https://developer.amazon.com/docs/devconsole/test-your-skill.html#h2_register) with your developer account, you should be able to use your skill right away. Try it by asking Alexa one of the above questions using your device. + +## Adding Alexa support to a plugin -##Adding alexa support to a plugin This document assumes some familiarity with the Alexa interface. You can find more information [here](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/getting-started-guide). To add alexa support to a plugin the ``init`` should return an object that contains an "alexa" key. Here is an example: @@ -117,11 +293,13 @@ var iob = { } }; ``` + There are 2 types of handlers that you will need to supply: * Intent handler - enables you to "teach" Alexa how to respond to a user's question. * A rollup handler - enables you to create a command that aggregates information from multiple plugins. This would be akin to the Alexa "flash briefing". An example would be a status report that contains your current bg, iob, and your current basal. -###Intent Handlers +### Intent Handlers + A plugin can expose multiple intent handlers. + ``intent`` - this is the intent in the "intent schema" above + ``routeableSlot`` - This enables routing by a slot name to the appropriate intent handler for overloaded intents e.g. "What is my " - iob, bg, cob, etc. This value should match the slot named in the "intent schema" @@ -132,7 +310,9 @@ A plugin can expose multiple intent handlers. - ``text`` - This is text that Alexa should speak. - ``slots`` - these are the slots that Alexa detected - ``sandbox`` - This is the nightscout sandbox that allows access to various functions. -###Rollup handlers + +### Rollup handlers + A plugin can also expose multiple rollup handlers + ``rollupGroup`` - This is the key that is used to aggregate the responses when the intent is invoked + ``rollupName`` - This is the name of the handler. Primarily used for debugging diff --git a/lib/plugins/ar2.js b/lib/plugins/ar2.js index b1e228e82a0..c440f613e0a 100644 --- a/lib/plugins/ar2.js +++ b/lib/plugins/ar2.js @@ -1,7 +1,6 @@ 'use strict'; var _ = require('lodash'); -var levels = require('../levels'); var times = require('../times'); var moment = require('moment'); @@ -18,8 +17,6 @@ var AR2_COLOR = 'cyan'; function init (ctx) { - var translate = ctx.language.translate; - var ar2 = { name: 'ar2' , label: 'AR2' @@ -27,12 +24,12 @@ function init (ctx) { }; function buildTitle(prop, sbx) { - var rangeLabel = prop.eventName ? translate(prop.eventName, { ci: true }).toUpperCase() : translate('Check BG'); - var title = levels.toDisplay(prop.level) + ', ' + rangeLabel; + var rangeLabel = prop.eventName ? sbx.translate(prop.eventName, { ci: true }).toUpperCase() : sbx.translate('Check BG'); + var title = sbx.levels.toDisplay(prop.level) + ', ' + rangeLabel; var sgv = sbx.lastScaledSGV(); if (sgv > sbx.scaleMgdl(sbx.settings.thresholds.bgTargetBottom) && sgv < sbx.scaleMgdl(sbx.settings.thresholds.bgTargetTop)) { - title += ' ' + translate('predicted'); + title += ' ' + sbx.translate('predicted'); } return title; } @@ -75,7 +72,7 @@ function init (ctx) { , title: buildTitle(prop, sbx) , message: sbx.buildDefaultMessage() , eventName: prop.eventName - , pushoverSound: pushoverSound(prop) + , pushoverSound: pushoverSound(prop, sbx.levels) , plugin: ar2 , debug: buildDebug(prop, sbx) }); @@ -188,9 +185,9 @@ function checkForecast(forecast, sbx) { var result = undefined; if (forecast && forecast.avgLoss > URGENT_THRESHOLD) { - result = { level: levels.URGENT }; + result = { level: sbx.levels.URGENT }; } else if (forecast && forecast.avgLoss > WARN_THRESHOLD) { - result = { level: levels.WARN }; + result = { level: sbx.levels.WARN }; } if (result) { @@ -220,7 +217,7 @@ function selectEventType (prop, sbx) { return eventName; } -function pushoverSound (prop) { +function pushoverSound (prop, levels) { var sound; if (prop.level === levels.URGENT) { diff --git a/lib/plugins/batteryage.js b/lib/plugins/batteryage.js new file mode 100644 index 00000000000..ffdb51bc6cc --- /dev/null +++ b/lib/plugins/batteryage.js @@ -0,0 +1,156 @@ +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); +var levels = require('../levels'); + +function init(ctx) { + var translate = ctx.language.translate; + + var bage = { + name: 'bage' + , label: 'Pump Battery Change' + , pluginType: 'pill-minor' + }; + + bage.getPrefs = function getPrefs(sbx) { + return { + info: sbx.extendedSettings.info || 312 + , warn: sbx.extendedSettings.warn || 336 + , urgent: sbx.extendedSettings.urgent || 360 + , display: sbx.extendedSettings.display ? sbx.extendedSettings.display : 'days' + , enableAlerts: sbx.extendedSettings.enableAlerts || false + }; + }; + + bage.setProperties = function setProperties (sbx) { + sbx.offerProperty('bage', function setProp ( ) { + return bage.findLatestTimeChange(sbx); + }); + }; + + bage.checkNotifications = function checkNotifications(sbx) { + var batteryInfo = sbx.properties.bage; + + if (batteryInfo.notification) { + var notification = _.extend({}, batteryInfo.notification, { + plugin: bage + , debug: { + age: batteryInfo.age + } + }); + sbx.notifications.requestNotify(notification); + } + }; + + bage.findLatestTimeChange = function findLatestTimeChange(sbx) { + + var prefs = bage.getPrefs(sbx); + + var batteryInfo = { + found: false + , age: 0 + , treatmentDate: null + , checkForAlert: false + }; + + var prevDate = 0; + + _.each(sbx.data.batteryTreatments, function eachTreatment (treatment) { + var treatmentDate = treatment.mills; + if (treatmentDate > prevDate && treatmentDate <= sbx.time) { + + prevDate = treatmentDate; + batteryInfo.treatmentDate = treatmentDate; + + var a = moment(sbx.time); + var b = moment(batteryInfo.treatmentDate); + var days = a.diff(b,'days'); + var hours = a.diff(b,'hours') - days * 24; + var age = a.diff(b,'hours'); + + if (!batteryInfo.found || (age >= 0 && age < batteryInfo.age)) { + batteryInfo.found = true; + batteryInfo.age = age; + batteryInfo.days = days; + batteryInfo.hours = hours; + batteryInfo.notes = treatment.notes; + batteryInfo.minFractions = a.diff(b,'minutes') - age * 60; + } + } + }); + + + batteryInfo.level = levels.NONE; + + var sound = 'incoming'; + var message; + var sendNotification = false; + + if (batteryInfo.age >= prefs.urgent) { + sendNotification = batteryInfo.age === prefs.urgent; + message = translate('Pump Battery change overdue!'); + sound = 'persistent'; + batteryInfo.level = levels.URGENT; + } else if (batteryInfo.age >= prefs.warn) { + sendNotification = batteryInfo.age === prefs.warn; + message = translate('Time to change pump battery'); + batteryInfo.level = levels.WARN; + } else if (batteryInfo.age >= prefs.info) { + sendNotification = batteryInfo.age === prefs.info; + message = 'Change pump battery soon'; + batteryInfo.level = levels.INFO; + } + + if (prefs.display === 'days' && batteryInfo.found) { + batteryInfo.display = ''; + if (batteryInfo.age >= 24) { + batteryInfo.display += batteryInfo.days + 'd'; + } + batteryInfo.display += batteryInfo.hours + 'h'; + } else { + batteryInfo.display = batteryInfo.found ? batteryInfo.age + 'h' : 'n/a '; + } + + //allow for 20 minute period after a full hour during which we'll alert the user + if (prefs.enableAlerts && sendNotification && batteryInfo.minFractions <= 20) { + batteryInfo.notification = { + title: translate('Pump battery age %1 hours', { params: [batteryInfo.age] }) + , message: message + , pushoverSound: sound + , level: batteryInfo.level + , group: 'BAGE' + }; + } + + return batteryInfo; + }; + + bage.updateVisualisation = function updateVisualisation (sbx) { + + var batteryInfo = sbx.properties.bage; + + var info = [{ label: translate('Inserted'), value: new Date(batteryInfo.treatmentDate).toLocaleString() }]; + + if (!_.isEmpty(batteryInfo.notes)) { + info.push({label: translate('Notes') + ':', value: batteryInfo.notes}); + } + + var statusClass = null; + if (batteryInfo.level === levels.URGENT) { + statusClass = 'urgent'; + } else if (batteryInfo.level === levels.WARN) { + statusClass = 'warn'; + } + + sbx.pluginBase.updatePillText(bage, { + value: batteryInfo.display + , label: translate('BAGE') + , info: info + , pillClass: statusClass + }); + }; + return bage; +} + +module.exports = init; diff --git a/lib/plugins/careportal.js b/lib/plugins/careportal.js index e65277074cf..b30a51532af 100644 --- a/lib/plugins/careportal.js +++ b/lib/plugins/careportal.js @@ -69,6 +69,10 @@ function init() { , name: 'CGM Sensor Insert' , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false } + , { val: 'Pump Battery Change' + , name: 'Pump Battery Change' + , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + } , { val: 'Insulin Change' , name: 'Insulin Cartridge Change' , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false @@ -96,4 +100,4 @@ function init() { return careportal; } -module.exports = init; \ No newline at end of file +module.exports = init; diff --git a/lib/plugins/direction.js b/lib/plugins/direction.js index b7d93f7b80e..53dda0e5879 100644 --- a/lib/plugins/direction.js +++ b/lib/plugins/direction.js @@ -1,7 +1,5 @@ 'use strict'; -var _ = require('lodash'); - function init() { var direction = { diff --git a/lib/plugins/index.js b/lib/plugins/index.js index c874d968ef8..363c95fb356 100644 --- a/lib/plugins/index.js +++ b/lib/plugins/index.js @@ -1,6 +1,11 @@ 'use strict'; -var _ = require('lodash'); +var _find = require('lodash/find'); +var _each = require('lodash/each'); +var _filter = require('lodash/filter'); +var _get = require('lodash/get'); +var _isArray = require('lodash/isArray'); +var _map = require('lodash/map'); function init (ctx) { @@ -9,7 +14,7 @@ function init (ctx) { function plugins(name) { if (name) { - return _.find(allPlugins, {name: name}); + return _find(allPlugins, {name: name}); } else { return plugins; } @@ -30,14 +35,17 @@ function init (ctx) { , require('./careportal')(ctx) , require('./pump')(ctx) , require('./openaps')(ctx) + , require('./xdrip-js')(ctx) , require('./loop')(ctx) , require('./boluswizardpreview')(ctx) , require('./cannulaage')(ctx) , require('./sensorage')(ctx) , require('./insulinage')(ctx) + , require('./batteryage')(ctx) , require('./basalprofile')(ctx) , require('./boluscalc')(ctx) // fake plugin to show/hide , require('./profile')(ctx) // fake plugin to hold extended settings + , require('./speech')(ctx) ]; var serverDefaultPlugins = [ @@ -52,11 +60,13 @@ function init (ctx) { , require('./cob')(ctx) , require('./pump')(ctx) , require('./openaps')(ctx) + , require('./xdrip-js')(ctx) , require('./loop')(ctx) , require('./boluswizardpreview')(ctx) , require('./cannulaage')(ctx) , require('./sensorage')(ctx) , require('./insulinage')(ctx) + , require('./batteryage')(ctx) , require('./treatmentnotify')(ctx) , require('./timeago')(ctx) , require('./basalprofile')(ctx) @@ -73,50 +83,63 @@ function init (ctx) { }; plugins.register = function register(all) { - _.each(all, function eachPlugin(plugin) { + _each(all, function eachPlugin(plugin) { allPlugins.push(plugin); }); enabledPlugins = []; - var enable = _.get(ctx, 'settings.enable'); + var enable = _get(ctx, 'settings.enable'); function isEnabled(plugin) { //TODO: unify client/server env/app return enable && enable.indexOf(plugin.name) > -1; } - _.each(allPlugins, function eachPlugin(plugin) { + _each(allPlugins, function eachPlugin(plugin) { plugin.enabled = isEnabled(plugin); if (plugin.enabled) { enabledPlugins.push(plugin); } }); + + console.log("Plugins registered", enabledPlugins); }; + + plugins.isPluginEnabled = function isPluginEnabled(pluginName) { + var p = _.find(enabledPlugins, 'name', pluginName); + return (p !== null); + } + + plugins.isPluginVisualization + + plugins.getPlugin = function getPlugin(pluginName) { + return _.find(enabledPlugins, 'name', pluginName); + } plugins.eachPlugin = function eachPlugin(f) { - _.each(allPlugins, f); + _each(allPlugins, f); }; plugins.eachEnabledPlugin = function eachEnabledPlugin(f) { - _.each(enabledPlugins, f); + _each(enabledPlugins, f); }; //these plugins are either always on or have custom settings plugins.specialPlugins = 'ar2 bgnow delta direction timeago upbat rawbg errorcodes profile'; plugins.shownPlugins = function(sbx) { - return _.filter(enabledPlugins, function filterPlugins(plugin) { + return _filter(enabledPlugins, function filterPlugins(plugin) { return plugins.specialPlugins.indexOf(plugin.name) > -1 || (sbx && sbx.showPlugins && sbx.showPlugins.indexOf(plugin.name) > -1); }); }; plugins.eachShownPlugins = function eachShownPlugins(sbx, f) { - _.each(plugins.shownPlugins(sbx), f); + _each(plugins.shownPlugins(sbx), f); }; plugins.hasShownType = function hasShownType(pluginType, sbx) { - return _.find(plugins.shownPlugins(sbx), function findWithType(plugin) { + return _find(plugins.shownPlugins(sbx), function findWithType(plugin) { return plugin.pluginType === pluginType; }) !== undefined; }; @@ -136,6 +159,15 @@ function init (ctx) { } }); }; + + plugins.visualizeAlarm = function visualizeAlarm(sbx, alarm, alarmMessage) { + console.log("visualizeAlarms"); + plugins.eachShownPlugins(sbx, function eachPlugin(plugin) { + if (plugin.visualizeAlarm) { + plugin.visualizeAlarm(sbx.withExtendedSettings(plugin), alarm, alarmMessage); + } + }); + }; plugins.updateVisualisations = function updateVisualisations(sbx) { plugins.eachShownPlugins(sbx, function eachPlugin(plugin) { @@ -150,7 +182,7 @@ function init (ctx) { plugins.eachEnabledPlugin(function eachPlugin(plugin) { if (plugin.getEventTypes) { var eventTypes = plugin.getEventTypes(sbx.withExtendedSettings(plugin)); - if (_.isArray(eventTypes)) { + if (_isArray(eventTypes)) { all = all.concat(eventTypes); } } @@ -160,14 +192,14 @@ function init (ctx) { }; plugins.enabledPluginNames = function enabledPluginNames() { - return _.map(enabledPlugins, function mapped(plugin) { + return _map(enabledPlugins, function mapped(plugin) { return plugin.name; }).join(' '); }; plugins.extendedClientSettings = function extendedClientSettings (allExtendedSettings) { var clientSettings = {}; - _.each(clientDefaultPlugins, function eachClientPlugin (plugin) { + _each(clientDefaultPlugins, function eachClientPlugin (plugin) { clientSettings[plugin.name] = allExtendedSettings[plugin.name]; }); diff --git a/lib/plugins/iob.js b/lib/plugins/iob.js index dcc0c4504a9..5468ff0700d 100644 --- a/lib/plugins/iob.js +++ b/lib/plugins/iob.js @@ -244,14 +244,6 @@ function init(ctx) { }; function alexaIOBIntentHandler (callback, slots, sbx) { - var preamble = - (slots && slots.pwd && slots.pwd.value) ? - translate('alexaPreamble3person', { - params: [ - slots.pwd.value.replace('\'s', '') - ] - }) : - translate('alexaPreamble'); var message = translate('alexaIobIntent', { params: [ diff --git a/lib/plugins/loop.js b/lib/plugins/loop.js index 8b65f1bd0b2..6082b6bdc00 100644 --- a/lib/plugins/loop.js +++ b/lib/plugins/loop.js @@ -8,7 +8,6 @@ var levels = require('../levels'); // var ALL_STATUS_FIELDS = ['status-symbol', 'status-label', 'iob', 'freq', 'rssi']; Unused variable function init(ctx) { - var timeago = require('./timeago')(ctx); var utils = require('../utils')(ctx); var loop = { @@ -299,13 +298,25 @@ function init(ctx) { function concatEventualBG (valueParts) { if (prop.lastLoop && prop.lastLoop.predicted) { var predictedBGvalues = prop.lastLoop.predicted.values; - var eventualBG = predictedBGvalues.pop(); + var eventualBG = predictedBGvalues[predictedBGvalues.length-1]; + var maxBG = Math.max.apply(null,predictedBGvalues); + var minBG = Math.min.apply(null,predictedBGvalues); + var eventualBGscaled = sbx.settings.units === 'mmol' ? + sbx.roundBGToDisplayFormat(sbx.scaleMgdl(eventualBG)) : eventualBG; + var maxBGscaled = sbx.settings.units === 'mmol' ? + sbx.roundBGToDisplayFormat(sbx.scaleMgdl(maxBG)) : maxBG; + var minBGscaled = sbx.settings.units === 'mmol' ? + sbx.roundBGToDisplayFormat(sbx.scaleMgdl(minBG)) : minBG; valueParts = valueParts.concat([ - ', Predicted Eventual BG: ' - , eventualBG + ', Predicted Min-Max BG: ' + , minBGscaled + , '-' + , maxBGscaled + ,', Eventual BG: ' + , eventualBGscaled ]); } - + return valueParts; } diff --git a/lib/plugins/openaps.js b/lib/plugins/openaps.js index 267ab0b06e1..78c4ad2ca35 100644 --- a/lib/plugins/openaps.js +++ b/lib/plugins/openaps.js @@ -8,15 +8,13 @@ var levels = require('../levels'); // var ALL_STATUS_FIELDS = ['status-symbol', 'status-label', 'iob', 'meal-assist', 'freq', 'rssi']; Unused variable function init(ctx) { - var timeago = require('./timeago')(ctx); var utils = require('../utils')(ctx); - var openaps = { name: 'openaps' , label: 'OpenAPS' , pluginType: 'pill-status' }; - + var translate = ctx.language.translate; var firstPrefs = true; openaps.getPrefs = function getPrefs(sbx) { @@ -221,17 +219,29 @@ function init(ctx) { return result; }; - openaps.getEventTypes = function getEventTypes ( ) { + openaps.getEventTypes = function getEventTypes (sbx) { + + var units = sbx.settings.units; + console.log('units', units); + + var reasonconf = []; + + if (units == 'mmol') { + reasonconf.push({ name: translate('Eating Soon'), targetTop: 4.5, targetBottom: 4.5, duration: 60 }); + reasonconf.push({ name: translate('Activity'), targetTop: 8, targetBottom: 6.5, duration: 120 }); + } else { + reasonconf.push({ name: translate('Eating Soon'), targetTop: 80, targetBottom: 80, duration: 60 }); + reasonconf.push({ name: translate('Activity'), targetTop: 140, targetBottom: 120, duration: 120 }); + } + + reasonconf.push({ name: 'Manual' }); + return [ { val: 'Temporary Target' , name: 'Temporary Target' , bg: false, insulin: false, carbs: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false - , targets: true, reasons: [ - { name: 'Eating Soon', targetTop: 80, targetBottom: 80, duration: 60 } - , { name: 'Activity', targetTop: 140, targetBottom: 120, duration: 120 } - , { name: 'Manual' } - ] + , targets: true, reasons: reasonconf } , { val: 'Temporary Target Cancel' @@ -451,14 +461,22 @@ function init(ctx) { function alexaForecastHandler (next, slots, sbx) { if (sbx.properties.openaps && sbx.properties.openaps.lastEventualBG) { - var response = 'The OpenAPS Eventual BG is ' + sbx.properties.openaps.lastEventualBG; + var response = translate('alexaOpenAPSForecast', { + params: [ + sbx.properties.openaps.lastEventualBG + ]} + ); next('Loop Forecast', response); } } function alexaLastLoopHandler (next, slots, sbx) { console.log(JSON.stringify(sbx.properties.openaps.lastLoopMoment)); - var response = 'The last successful loop was ' + moment(sbx.properties.openaps.lastLoopMoment).from(moment(sbx.time)); + var response = translate('alexaLastLoop', { + params: [ + moment(sbx.properties.openaps.lastLoopMoment).from(moment(sbx.time)) + ] + }); next('Last loop', response); } diff --git a/lib/plugins/pluginbase.js b/lib/plugins/pluginbase.js index e3f0f66b8e7..a6f0e77e455 100644 --- a/lib/plugins/pluginbase.js +++ b/lib/plugins/pluginbase.js @@ -1,6 +1,7 @@ 'use strict'; -var _ = require('lodash'); +var _map = require('lodash/map'); +var _each = require('lodash/each'); var TOOLTIP_WIDTH = 275; //min-width + padding @@ -78,7 +79,7 @@ function init (majorPills, minorPills, statusPills, bgStatus, tooltip) { } if (options.info && options.info.length) { - var html = _.map(options.info, function mapInfo (i) { + var html = _map(options.info, function mapInfo (i) { return '' + i.label + ' ' + i.value; }).join('
\n'); @@ -103,7 +104,7 @@ function init (majorPills, minorPills, statusPills, bgStatus, tooltip) { }; pluginBase.addForecastPoints = function addForecastPoints (points, info) { - _.each(points, function eachPoint (point) { + _each(points, function eachPoint (point) { point.type = 'forecast'; point.info = info; if (point.mgdl < 13) { diff --git a/lib/plugins/pump.js b/lib/plugins/pump.js index 1f8dd958005..dc495bfcc1e 100644 --- a/lib/plugins/pump.js +++ b/lib/plugins/pump.js @@ -136,14 +136,23 @@ function init (ctx) { }; function alexaReservoirHandler (next, slots, sbx) { - var response = 'You have ' + sbx.properties.pump.pump.reservoir + ' units remaining'; + var response = translate('alexaReservoir', { + params: [ + sbx.properties.pump.pump.reservoir + ] + }); next('Remaining insulin', response); } function alexaBatteryHandler (next, slots, sbx) { var battery = _.get(sbx, 'properties.pump.data.battery'); if (battery) { - var response = 'Your battery is at ' + battery.value + ' ' + battery.unit; + var response = translate('alexaPumpBattery', { + params: [ + battery.value, + battery.unit + ] + }); next('Pump battery', response); } else { next(); @@ -196,7 +205,7 @@ function init (ctx) { function updateReservoir (prefs, result) { if (result.reservoir) { result.reservoir.label = 'Reservoir'; - result.reservoir.display = result.reservoir.value + 'U'; + result.reservoir.display = result.reservoir.value.toPrecision(3) + 'U'; if (result.reservoir.value < prefs.urgentRes) { result.reservoir.level = levels.URGENT; result.reservoir.message = 'URGENT: Pump Reservoir Low'; diff --git a/lib/plugins/speech.js b/lib/plugins/speech.js new file mode 100644 index 00000000000..e9032b46644 --- /dev/null +++ b/lib/plugins/speech.js @@ -0,0 +1,92 @@ +'use strict'; + +var levels = require('../levels'); +var times = require('../times'); + +var lastEntryValue; +var lastTime; +var lastMinutes; +var lastEntryTime; + +function init(ctx) { + var translate = ctx.language.translate; + var speechLangCode = ctx.language.speechCode; + + var speech = { + name: 'speech', + label: 'Speech', + pluginType: 'pill-status', + pillFlip: true + }; + + + speech.say = function say(sayIt) { + console.log('saying', sayIt, 'using lang code', speechLangCode); + + var msg = new SpeechSynthesisUtterance(sayIt.toLowerCase()); + if (speechLangCode) msg.lang = speechLangCode; + window.speechSynthesis.speak(msg); + } + + speech.visualizeAlarm = function visualizeAlarm(sbx, alarm, alarmMessage) { + console.log('Speech got an Alarm Message:',alarmMessage); + speech.say(alarmMessage); + } + + speech.updateVisualisation = function updateVisualisation(sbx) { + + if (sbx.data.inRetroMode) return; + + var timeNow = sbx.time; + var entry = sbx.lastSGVEntry(); + + if (timeNow && entry && entry.mills) { + + var timeSince = timeNow - entry.mills; + var timeMinutes = Math.round(timeSince / 60000); + + if (lastEntryTime != entry.mills) { + + var lE = sbx.scaleMgdl(lastEntryValue); + var cE = sbx.scaleMgdl(entry.mgdl); + + var delta = ((cE - lE) %1 === 0) ? cE - lE : Math.round( (cE - lE) * 10) / 10; + + lastEntryValue = entry.mgdl; + lastEntryTime = entry.mills; + + var sayIt = sbx.roundBGToDisplayFormat(sbx.scaleMgdl(entry.mgdl)); + + if (!isNaN(delta)) { + + sayIt += ', ' + translate('change') + ' ' + delta + } + + var iob = sbx.properties.iob; + if (iob) { + var iobString = sbx.roundInsulinForDisplayFormat(iob.display); + + if (iobString) { + sayIt += ", IOB " + iobString; + } + } + speech.say(sayIt); + + } else { + + if (timeMinutes > 5 && timeMinutes != lastMinutes && timeMinutes % 5 == 0) { + lastMinutes = timeMinutes; + + var lastEntryString = translate('Last entry {0} minutes ago'); + var sayIt = lastEntryString.replace('{0}', timeMinutes); + speech.say(sayIt); + } + } + } + }; + + return speech; + +} + +module.exports = init; \ No newline at end of file diff --git a/lib/plugins/timeago.js b/lib/plugins/timeago.js index 73d264e4407..0e460eb87b0 100644 --- a/lib/plugins/timeago.js +++ b/lib/plugins/timeago.js @@ -91,8 +91,8 @@ function init (ctx) { timeago.isMissing = function isMissing (opts) { if (!opts || !opts.entry || isNaN(opts.entry.mills) || isNaN(opts.time) || isNaN(opts.timeSince)) { return { - label: 'time ago' - , shortLabel: 'ago' + label: translate('time ago') + , shortLabel: translate('ago') }; } }; @@ -100,8 +100,8 @@ function init (ctx) { timeago.inTheFuture = function inTheFuture (opts) { if (opts.entry.mills - times.mins(5).msecs > opts.time) { return { - label: 'in the future' - , shortLabel: 'future' + label: translate('in the future') + , shortLabel: translate('future') }; } }; @@ -110,7 +110,7 @@ function init (ctx) { if (opts.entry.mills > opts.time) { return { value: 1 - , label: 'min ago' + , label: translate('min ago') , shortLabel: 'm' }; } diff --git a/lib/plugins/treatmentnotify.js b/lib/plugins/treatmentnotify.js index 98d609bf4da..e108dfd0ca7 100644 --- a/lib/plugins/treatmentnotify.js +++ b/lib/plugins/treatmentnotify.js @@ -1,11 +1,10 @@ 'use strict'; var _ = require('lodash'); -var levels = require('../levels'); var times = require('../times'); var simplealarms = require('./simplealarms')(); -var OPENAPS_WHITELIST = ['BG Check', 'Meal Bolus', 'Carb Correction', 'Correction Bolus']; +var MANUAL_TREATMENTS = ['BG Check', 'Meal Bolus', 'Carb Correction', 'Correction Bolus']; function init() { @@ -15,14 +14,15 @@ function init() { , pluginType: 'notification' }; - //automated treatments from OpenAPS shouldn't trigger notifications or snooze alarms + //automated treatments from OpenAPS or Loop shouldn't trigger notifications or snooze alarms function filterTreatments (sbx) { var treatments = sbx.data.treatments; treatments = _.filter(treatments, function notOpenAPS (treatment) { var ok = true; - if (treatment.enteredBy && treatment.enteredBy.indexOf('openaps://') === 0) { - ok = _.indexOf(OPENAPS_WHITELIST, treatment.eventType) >= 0; + var enteredBy = treatment.enteredBy; + if (enteredBy && (enteredBy.indexOf('openaps://') === 0 || enteredBy.indexOf('loop://') === 0)) { + ok = _.indexOf(MANUAL_TREATMENTS, treatment.eventType) >= 0; } return ok; }); @@ -38,10 +38,12 @@ function init() { var mbgCurrent = isCurrent(lastMBG); var treatmentCurrent = isCurrent(lastTreatment); + + var translate = sbx.language.translate; if (mbgCurrent || treatmentCurrent) { - var mbgMessage = mbgCurrent ? 'Meter BG ' + sbx.scaleEntry(lastMBG) + ' ' + sbx.unitsLabel : ''; - var treatmentMessage = treatmentCurrent ? 'Treatment: ' + lastTreatment.eventType : ''; + var mbgMessage = mbgCurrent ? translate('Meter BG') +' ' + sbx.scaleEntry(lastMBG) + ' ' + sbx.unitsLabel : ''; + var treatmentMessage = treatmentCurrent ? translate('Treatment') + ': ' + lastTreatment.eventType : ''; autoSnoozeAlarms(mbgMessage, treatmentMessage, lastTreatment, sbx); @@ -59,7 +61,7 @@ function init() { if (lastTreatment && !lastTreatment.isAnnouncement) { var snoozeLength = sbx.extendedSettings.snoozeMins && times.mins(sbx.extendedSettings.snoozeMins).msecs || times.mins(10).msecs; sbx.notifications.requestSnooze({ - level: levels.URGENT + level: sbx.levels.URGENT , title: 'Snoozing alarms since there was a recent treatment' , message: _.trim([mbgMessage, treatmentMessage].join('\n')) , lengthMills: snoozeLength @@ -69,10 +71,12 @@ function init() { function requestMBGNotify (lastMBG, sbx) { console.info('requestMBGNotify for', lastMBG); + var translate = sbx.language.translate; + sbx.notifications.requestNotify({ - level: levels.INFO + level: sbx.levels.INFO , title: 'Calibration' //assume all MGBs are calibrations for now - , message: 'Meter BG: ' + sbx.scaleEntry(lastMBG) + ' ' + sbx.unitsLabel + , message: translate('Meter BG') + ': ' + sbx.scaleEntry(lastMBG) + ' ' + sbx.unitsLabel , plugin: treatmentnotify , pushoverSound: 'magic' }); @@ -83,16 +87,18 @@ function init() { sbx.notifications.requestNotify({ level: result.level - , title: (result.level === levels.URGENT ? levels.toDisplay(levels.URGENT) + ' ' : '') + lastTreatment.eventType + , title: (result.level === sbx.levels.URGENT ? sbx.levels.toDisplay(sbx.levels.URGENT) + ' ' : '') + lastTreatment.eventType , message: lastTreatment.notes || '.' //some message is required , plugin: treatmentnotify , group: 'Announcement' - , pushoverSound: levels.isAlarm(result.level) ? result.pushoverSound : undefined + , pushoverSound: sbx.levels.isAlarm(result.level) ? result.pushoverSound : undefined , isAnnouncement: true }); } function requestTreatmentNotify (lastTreatment, sbx) { + var translate = sbx.language.translate; + if (lastTreatment.isAnnouncement) { requestAnnouncementNotify(lastTreatment, sbx); } else { @@ -101,37 +107,41 @@ function init() { var eventType = lastTreatment.eventType; if (lastTreatment.duration === 0 && eventType === 'Temporary Target') { eventType += ' Cancel'; - message = 'Canceled'; + message = translate('Canceled'); } + + var timestamp = lastTreatment.timestamp; if (!message) { message = '...'; } - + sbx.notifications.requestNotify({ - level: levels.INFO - , title: eventType + level: sbx.levels.INFO + , title: translate(eventType) , message: message + , timestamp: timestamp , plugin: treatmentnotify }); } } function buildTreatmentMessage(lastTreatment, sbx) { - return (lastTreatment.glucose ? 'BG: ' + lastTreatment.glucose + ' (' + lastTreatment.glucoseType + ')' : '') + - (lastTreatment.reason ? '\nReason: ' + lastTreatment.reason : '') + - (lastTreatment.targetTop ? '\nTarget Top: ' + lastTreatment.targetTop : '') + - (lastTreatment.targetBottom ? '\nTarget Bottom: ' + lastTreatment.targetBottom : '') + - (lastTreatment.carbs ? '\nCarbs: ' + lastTreatment.carbs + 'g' : '') + - (lastTreatment.absorptionTime > 0 ? '\nAbsorption Time: ' + (Math.round(lastTreatment.absorptionTime / 60.0 * 10) / 10) + 'h' : '') + - - (lastTreatment.insulin ? '\nInsulin: ' + sbx.roundInsulinForDisplayFormat(lastTreatment.insulin) + 'U' : '')+ - (lastTreatment.duration ? '\nDuration: ' + lastTreatment.duration + ' min' : '')+ - (lastTreatment.percent ? '\nPercent: ' + (lastTreatment.percent > 0 ? '+' : '') + lastTreatment.percent + '%' : '')+ - (!isNaN(lastTreatment.absolute) ? '\nValue: ' + lastTreatment.absolute + 'U' : '')+ - (lastTreatment.enteredBy ? '\nEntered By: ' + lastTreatment.enteredBy : '') + - - (lastTreatment.notes ? '\nNotes: ' + lastTreatment.notes : ''); + var translate = sbx.language.translate; + + return (lastTreatment.glucose ? translate('BG') + ': ' + lastTreatment.glucose + ' (' + lastTreatment.glucoseType + ')' : '') + + (lastTreatment.reason ? '\n' + translate('Reason') + ': ' + lastTreatment.reason : '') + + (lastTreatment.targetTop ? '\n' + translate('Target Top') + ': ' + lastTreatment.targetTop : '') + + (lastTreatment.targetBottom ? '\n' + translate('Target Bottom') + ': ' + lastTreatment.targetBottom : '') + + (lastTreatment.carbs ? '\n' + translate('Carbs') + ': ' + lastTreatment.carbs + 'g' : '') + + + (lastTreatment.insulin ? '\n' + translate('Insulin') + ': ' + sbx.roundInsulinForDisplayFormat(lastTreatment.insulin) + 'U' : '')+ + (lastTreatment.duration ? '\n' + translate('Duration') + ': ' + lastTreatment.duration + ' min' : '')+ + (lastTreatment.percent ? '\n' + translate('Percent') + ': ' + (lastTreatment.percent > 0 ? '+' : '') + lastTreatment.percent + '%' : '')+ + (!isNaN(lastTreatment.absolute) ? '\n' + translate('Value') + ': ' + lastTreatment.absolute + 'U' : '')+ + (lastTreatment.enteredBy ? '\n' + translate('Entered By') + ': ' + lastTreatment.enteredBy : '') + + + (lastTreatment.notes ? '\n' + translate('Notes') + ': ' + lastTreatment.notes : ''); } return treatmentnotify; diff --git a/lib/plugins/xdrip-js.js b/lib/plugins/xdrip-js.js new file mode 100644 index 00000000000..677d2b42674 --- /dev/null +++ b/lib/plugins/xdrip-js.js @@ -0,0 +1,328 @@ +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); +var times = require('../times'); +var levels = require('../levels'); + +function init(ctx) { + var utils = require('../utils')(ctx); + var firstPrefs = true; + var lastStateNotification = null; + + var sensorState = { + name: 'xdrip-js' + , label: 'CGM Status' + , pluginType: 'pill-status' + }; + + sensorState.getPrefs = function getPrefs(sbx) { + var prefs = { + enableAlerts: sbx.extendedSettings.enableAlerts || false + , warnBatV: sbx.extendedSettings.warnBatV || 300 + , stateNotifyIntrvl: sbx.extendedSettings.stateNotifyIntrvl || 0.5 + }; + + if (firstPrefs) { + firstPrefs = false; + console.info('xdrip-js Prefs:', prefs); + } + + return prefs; + }; + + sensorState.setProperties = function setProperties (sbx) { + sbx.offerProperty('sensorState', function setProp ( ) { + return sensorState.getStateString(sbx); + }); + }; + + sensorState.checkNotifications = function checkNotifications(sbx) { + + var info = sbx.properties.sensorState; + + if (info && info.notification) { + var notification = _.extend({}, info.notification, { + plugin: sensorState + , debug: { + stateString: info.lastStateString + } + }); + + sbx.notifications.requestNotify(notification); + } + + }; + + sensorState.getStateString = function findLatestState(sbx) { + var prefs = sensorState.getPrefs(sbx); + + var recentHours = 24; + var recentMills = sbx.time - times.hours(recentHours).msecs; + + var result = { + seenDevices: { } + , latest: null + , lastDevice: null + , lastState: null + , lastStateString: null + , lastStateStringShort: null + , lastSessionStart: null + , lastStateTime: null + , lastTxId: null + , lastTxStatus: null + , lastTxStatusString: null + , lastTxStatusStringShort: null + , lastTxActivation: null + , lastMode: null + , lastRssi: null + , lastUnfiltered: null + , lastFiltered: null + , lastNoise: null + , lastNoiseString: null + , lastSlope: null + , lastIntercept: null + , lastCalType: null + , lastCalibrationDate: null + , lastBatteryTimestamp: null + , lastVoltageA: null + , lastVoltageB: null + , lastTemperature: null + , lastResistance: null + }; + + function toMoments (status) { + return { + when: moment(status.mills) + , timestamp: status.xdripjs && status.xdripjs.timestamp && moment(status.xdripjs.timestamp) + }; + } + + function getDevice(status) { + var uri = status.device || 'device'; + var device = result.seenDevices[uri]; + + if (!device) { + device = { + name: utils.deviceName(uri) + , uri: uri + }; + + result.seenDevices[uri] = device; + } + return device; + } + + var recentData = _.chain(sbx.data.devicestatus) + .filter(function (status) { + return ('xdripjs' in status) && sbx.entryMills(status) <= sbx.time && sbx.entryMills(status) >= recentMills; + }) + .value( ); + + recentData = _.sortBy(recentData, 'xdripjs.timestamp'); + + _.forEach(recentData, function eachStatus (status) { + getDevice(status); + + var moments = toMoments(status); + + if (status.xdripjs && (!result.latest || moments.timestamp && moments.timestamp.isAfter(result.lastStateTime))) { + result.latest = status; + result.lastStateTime = moment(status.xdripjs.timestamp); + } + }); + + var sendNotification = false; + var sound = 'incoming'; + var message; + var title; + + var sensorInfo = result.latest; + + result.level = levels.NONE; + + if (sensorInfo && sensorInfo.xdripjs) { + + if (sensorInfo.xdripjs.state != 0x6) { + // Send warning notification for all states that are not 'OK' + // but only send state notifications at interval preference + if (!lastStateNotification || (lastStateNotification.state != sensorInfo.xdripjs.state) || !prefs.stateNotifyIntrvl || (moment().diff(lastStateNotification.timestamp, 'minutes') > (prefs.stateNotifyIntrvl*60))) { + sendNotification = true; + lastStateNotification = { + timestamp: moment() + , state: sensorInfo.xdripjs.state + }; + } + + message = 'CGM state: ' + sensorInfo.xdripjs.stateString; + title = 'CGM state: ' + sensorInfo.xdripjs.stateString; + + if (sensorInfo.xdripjs.state == 0x7) { + // If it is a calibration request, only use INFO + result.level = levels.INFO; + } else { + result.level = levels.WARN; + } + } + + if (sensorInfo.xdripjs.voltagea && (sensorInfo.xdripjs.voltagea < prefs.warnBatV)) { + sendNotification = true; + message = 'CGM Battery A Low Voltage: ' + sensorInfo.xdripjs.voltagea; + title = 'CGM Battery Low'; + result.level = levels.WARN; + } + + if (sensorInfo.xdripjs.voltageb && (sensorInfo.xdripjs.voltageb < prefs.warnBatV)) { + sendNotification = true; + message = 'CGM Battery B Low Voltage: ' + sensorInfo.xdripjs.voltageb; + title = 'CGM Battery Low'; + result.level = levels.WARN; + } + + if (prefs.enableAlerts && sendNotification) { + result.notification = { + title: title + , message: message + , pushoverSound: sound + , level: result.level + , group: 'xDrip-js' + }; + } + + result.lastState = sensorInfo.xdripjs.state; + result.lastStateString = sensorInfo.xdripjs.stateString; + result.lastStateStringShort = sensorInfo.xdripjs.stateStringShort; + result.lastSessionStart = sensorInfo.xdripjs.sessionStart; + result.lastTxId = sensorInfo.xdripjs.txId; + result.lastTxStatus = sensorInfo.xdripjs.txStatus; + result.lastTxStatusString = sensorInfo.xdripjs.txStatusString; + result.lastTxStatusStringShort = sensorInfo.xdripjs.txStatusStringShort; + result.lastTxActivation = sensorInfo.xdripjs.txActivation; + result.lastMode = sensorInfo.xdripjs.mode; + result.lastRssi = sensorInfo.xdripjs.rssi; + result.lastUnfiltered = sensorInfo.xdripjs.unfiltered; + result.lastFiltered = sensorInfo.xdripjs.filtered; + result.lastNoise = sensorInfo.xdripjs.noise; + result.lastNoiseString = sensorInfo.xdripjs.noiseString; + result.lastSlope = Math.round(sensorInfo.xdripjs.slope * 100) / 100.0; + result.lastIntercept = Math.round(sensorInfo.xdripjs.intercept * 100) / 100.0; + result.lastCalType = sensorInfo.xdripjs.calType; + result.lastCalibrationDate = sensorInfo.xdripjs.lastCalibrationDate; + result.lastBatteryTimestamp = sensorInfo.xdripjs.batteryTimestamp; + result.lastVoltageA = sensorInfo.xdripjs.voltagea; + result.lastVoltageB = sensorInfo.xdripjs.voltageb; + result.lastTemperature = sensorInfo.xdripjs.temperature; + result.lastResistance = sensorInfo.xdripjs.resistance; + } + + return result; + }; + + sensorState.updateVisualisation = function updateVisualisation (sbx) { + + var sensor = sbx.properties.sensorState; + var sessionDuration = 'Unknown'; + var info = []; + + _.forIn(sensor.seenDevices, function seenDevice (device) { + info.push( { label: 'Seen: ', value: device.name } ); + }); + + info.push( { label: 'State Time: ', value: (sensor && sensor.lastStateTime && moment().diff(sensor.lastStateTime, 'minutes') + ' minutes ago') || 'Unknown' } ); + info.push( { label: 'Mode: ', value: (sensor && sensor.lastMode) || 'Unknown' } ); + info.push( { label: 'Status: ', value: (sensor && sensor.lastStateString) || 'Unknown' } ); + + // session start is only valid if in a session + if (sensor && sensor.lastSessionStart && (sensor.lastState != 0x1)) { + var diffTime = moment().diff(moment(sensor.lastSessionStart)); + var duration = moment.duration(diffTime); + + sessionDuration = duration.days() + ' days ' + duration.hours() + ' hours'; + + info.push( { label: 'Session Age: ', value: sessionDuration } ); + } + + info.push( { label: 'Tx ID: ', value: (sensor && sensor.lastTxId) || 'Unknown' } ); + info.push( { label: 'Tx Status: ', value: (sensor && sensor.lastTxStatusString) || 'Unknown' } ); + + if (sensor) { + if (sensor.lastTxActivation) { + info.push( { label: 'Tx Age: ', value: moment().diff(moment(sensor.lastTxActivation), 'days') + ' days' } ); + } + + if (sensor.lastRssi) { + info.push( { label: 'RSSI: ', value: sensor.lastRssi } ); + } + + if (sensor.lastUnfiltered) { + info.push( { label: 'Unfiltered: ', value: sensor.lastUnfiltered } ); + } + + if (sensor.lastFiltered) { + info.push( { label: 'Filtered: ', value: sensor.lastFiltered } ); + } + + if (sensor.lastNoiseString) { + info.push( { label: 'Noise: ', value: sensor.lastNoiseString } ); + } + + if (sensor.lastSlope) { + info.push( { label: 'Slope: ', value: sensor.lastSlope } ); + } + + if (sensor.lastIntercept) { + info.push( { label: 'Intercept: ', value: sensor.lastIntercept } ); + } + + if (sensor.lastCalType) { + info.push( { label: 'CalType: ', value: sensor.lastCalType } ); + } + + if (sensor.lastCalibrationDate) { + info.push( { label: 'Calibration: ', value: moment().diff(moment(sensor.lastCalibrationDate), 'hours') + ' hours ago' } ); + } + + if (sensor.lastBatteryTimestamp) { + info.push( { label: 'Battery: ', value: moment().diff(moment(sensor.lastBatteryTimestamp), 'minutes') + ' minutes ago' } ); + } + + if (sensor.lastVoltageA) { + info.push( { label: 'VoltageA: ', value: sensor.lastVoltageA } ); + } + + if (sensor.lastVoltageB) { + info.push( { label: 'VoltageB: ', value: sensor.lastVoltageB } ); + } + + if (sensor.lastTemperature) { + info.push( { label: 'Temperature: ', value: sensor.lastTemperature } ); + } + + if (sensor.lastResistance) { + info.push( { label: 'Resistance: ', value: sensor.lastResistance } ); + } + + var statusClass = null; + if (sensor.level === levels.URGENT) { + statusClass = 'urgent'; + } else if (sensor.level === levels.WARN) { + statusClass = 'warn'; + } else if (sensor.level === levels.INFO) { + // Still highlight even the 'INFO' events for now + statusClass = 'warn'; + } + + sbx.pluginBase.updatePillText(sensorState, { + value: (sensor && sensor.lastStateStringShort) || (sensor && sensor.lastStateString) || 'Unknown' + , label: 'CGM' + , info: info + , pillClass: statusClass + }); + } + }; + + return sensorState; +} + +module.exports = init; + diff --git a/lib/report_plugins/daytoday.js b/lib/report_plugins/daytoday.js index e7bcbe79a80..1d6b6f84f40 100644 --- a/lib/report_plugins/daytoday.js +++ b/lib/report_plugins/daytoday.js @@ -71,12 +71,21 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options) var TOOLTIP_TRANS_MS = 300; var padding = { top: 15, right: 22, bottom: 30, left: 35 }; - + + var tddSum = 0; + var carbsSum = 0; + daytoday.prepareHtml(sorteddaystoshow) ; sorteddaystoshow.forEach( function eachDay(day) { drawChart(day,datastorage[day],options); }); - + + var tddAverage = tddSum / datastorage.alldays; + var carbsAverage = carbsSum / datastorage.alldays; + + if (options.insulindistribution) + $('#daytodaycharts').append('

' + translate('TDD average') + ': ' + tddAverage.toFixed(1) + 'U ' + translate('Carbs average') + ': ' + carbsAverage.toFixed(0) + 'g'); + function timeTicks(n,i) { var t12 = [ '12am', '', '2am', '', '4am', '', '6am', '', '8am', '', '10am', '', @@ -879,6 +888,9 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options) }); } + tddSum += totalDailyInsulin; + carbsSum += data.dailyCarbs; + appendProfileSwitch(context, { //eventType: 'Profile Switch' profile: client.profilefunctions.activeProfileToTime(from) diff --git a/lib/report_plugins/glucosedistribution.js b/lib/report_plugins/glucosedistribution.js index 38521fa4eb9..ad08c3084ff 100644 --- a/lib/report_plugins/glucosedistribution.js +++ b/lib/report_plugins/glucosedistribution.js @@ -88,6 +88,7 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so var Nightscout = window.Nightscout; var client = Nightscout.client; var translate = client.translate; + var displayUnits = Nightscout.client.settings.units; var ss = require('simple-statistics'); @@ -187,6 +188,8 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so var prevEntry = glucose_data[0]; + const maxGap = (5 * 60 * 1000) + 10000; + for (var i = 1; i < glucose_data.length-2; i++) { // var prevEntry = glucose_data[i-1]; @@ -194,9 +197,7 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so var nextEntry = glucose_data[i+1]; var timeDelta = nextEntry.displayTime.getTime() - entry.displayTime.getTime(); - var timeDelta2 = entry.displayTime.getTime() - nextEntry.displayTime.getTime(); - - var maxGap = (5 * 60 * 1000) + 10000; + var timeDelta2 = entry.displayTime.getTime() - prevEntry.displayTime.getTime(); if (timeDelta > maxGap || timeDelta2 > maxGap ) { glucose_data2.push(entry); @@ -233,6 +234,23 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so glucose_data = data = glucose_data2.filter(function(r) { return enabledHours[new Date(r.displayTime).getHours()] }); + + glucose_data.sort(function(a,b){ + return a.displayTime.getTime()-b.displayTime.getTime(); + }); + + var timeTotal = 0; + + for (var i = 1; i < glucose_data.length-2; i++) { + var entry = glucose_data[i]; + var nextEntry = glucose_data[i+1]; + var timeDelta = nextEntry.displayTime.getTime() - entry.displayTime.getTime(); + if (timeDelta < maxGap) { + timeTotal += timeDelta; + } + } + + var daysTotal = timeTotal / (1000*60*60*24); ['Low', 'Normal', 'High'].forEach(function(range) { result[range] = {}; @@ -403,9 +421,8 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so console.log('glucoseMean', glucoseMean,'tirMultiplier',tirMultiplier, 'PGS',PGS); - var days = (glucose_data[glucose_data.length-1].displayTime.getTime() - glucose_data[0].displayTime.getTime()) / (24*60*60*1000.0); - - var TDC = deltaTotal / days; + var TDC = deltaTotal / daysTotal; + var TDCHourly = TDC / 24.0; var RMS = Math.sqrt(RMSTotal / events); @@ -414,18 +431,15 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so var timeInT1 = Math.round(100 * t1count / events).toFixed(1); var timeInT2 = Math.round(100 * t2count / events).toFixed(1); - var mac = (total / events).toFixed(1); var unitString = ' mg/dl'; - if (client.settings.units == 'mmol') { - mac = (total / events / 18.0).toFixed(2); + if (displayUnits == 'mmol') { TDC = TDC / 18.0; TDCHourly = TDCHourly / 18.0; unitString = ' mmol/L'; RMS = Math.sqrt(RMSTotal / events) / 18; - } TDC = Math.round(TDC * 100) / 100; @@ -436,7 +450,7 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so var t1exp = '>5 mg/dl/5m'; var t2exp = '>10 mg/dl/5m'; - if (client.settings.units == 'mmol') { + if (displayUnits == 'mmol') { t1exp = '>0.27 mmol/l/5m'; t2exp = '>0.55 mmol/l/5m'; } @@ -470,4 +484,4 @@ glucosedistribution.report = function report_glucosedistribution(datastorage, so report_glucosedistribution(datastorage, sorteddaystoshow, options); } -}; \ No newline at end of file +}; diff --git a/lib/report_plugins/profiles.js b/lib/report_plugins/profiles.js index df055b525b3..c31b8b2fa9a 100644 --- a/lib/report_plugins/profiles.js +++ b/lib/report_plugins/profiles.js @@ -14,7 +14,6 @@ module.exports = init; profiles.html = function html(client) { var translate = client.translate; - var a = translate('Database records'); var ret = '

' + translate('Profiles') + '

' + '
' + translate('Database records') + ' ' diff --git a/lib/sandbox.js b/lib/sandbox.js index 5dd7b63e4bc..3379bf509ea 100644 --- a/lib/sandbox.js +++ b/lib/sandbox.js @@ -48,6 +48,10 @@ function init ( ) { sbx.settings = env.settings; sbx.data = ctx.ddata.clone(); sbx.notifications = safeNotifications(ctx); + + sbx.levels = ctx.levels; + sbx.language = ctx.language; + sbx.translate = ctx.language.translate; var profile = require('./profilefunctions')(); //Plugins will expect the right profile based on time @@ -85,6 +89,10 @@ function init ( ) { sbx.data = data; sbx.pluginBase = ctx.pluginBase; sbx.notifications = safeNotifications(ctx); + + sbx.levels = ctx.levels; + sbx.language = ctx.language; + sbx.translate = ctx.language.translate; if (sbx.pluginBase) { sbx.pluginBase.forecastInfos = []; diff --git a/lib/server/activity.js b/lib/server/activity.js new file mode 100644 index 00000000000..f7df9f48268 --- /dev/null +++ b/lib/server/activity.js @@ -0,0 +1,79 @@ +'use strict'; + +var find_options = require('./query'); + + +function storage (env, ctx) { + var ObjectID = require('mongodb').ObjectID; + + function create (obj, fn) { + obj.created_at = (new Date( )).toISOString( ); + api().insert(obj, function (err, doc) { + fn(null, doc.ops); + }); + } + + function save (obj, fn) { + obj._id = new ObjectID(obj._id); + obj.created_at = (new Date( )).toISOString( ); + api().save(obj, function (err, doc) { + fn(err, doc); + }); + } + + function query_for (opts) { + return find_options(opts, storage.queryOpts); + } + + function list(opts, fn) { + // these functions, find, sort, and limit, are used to + // dynamically configure the request, based on the options we've + // been given + + // determine sort options + function sort ( ) { + return opts && opts.sort || {created_at: -1}; + } + + // configure the limit portion of the current query + function limit ( ) { + if (opts && opts.count) { + return this.limit(parseInt(opts.count)); + } + return this; + } + + // handle all the results + function toArray (err, entries) { + fn(err, entries); + } + + // now just stitch them all together + limit.call(api( ) + .find(query_for(opts)) + .sort(sort( )) + ).toArray(toArray); + } + + function remove (_id, fn) { + return api( ).remove({ '_id': new ObjectID(_id) }, fn); + } + + function api ( ) { + return ctx.store.collection(env.activity_collection); + } + + api.list = list; + api.create = create; + api.query_for = query_for; + api.save = save; + api.remove = remove; + api.indexedFields = ['created_at']; + return api; +} + +module.exports = storage; + +storage.queryOpts = { + dateField: 'created_at' +}; diff --git a/lib/aggregate.js b/lib/server/aggregate.js similarity index 100% rename from lib/aggregate.js rename to lib/server/aggregate.js diff --git a/lib/booterror.js b/lib/server/booterror.js similarity index 100% rename from lib/booterror.js rename to lib/server/booterror.js diff --git a/lib/bootevent.js b/lib/server/bootevent.js similarity index 83% rename from lib/bootevent.js rename to lib/server/bootevent.js index 9806c1e08fe..f1580932ecd 100644 --- a/lib/bootevent.js +++ b/lib/server/bootevent.js @@ -59,7 +59,7 @@ function boot (env, language) { try { if (_.startsWith(env.storageURI, 'openaps://')) { - require('./storage/openaps-storage')(env, function ready (err, store) { + require('../storage/openaps-storage')(env, function ready (err, store) { if (err) { throw err; } @@ -70,7 +70,7 @@ function boot (env, language) { }); } else { //TODO assume mongo for now, when there are more storage options add a lookup - require('./storage/mongo-storage')(env, function ready(err, store) { + require('../storage/mongo-storage')(env, function ready(err, store) { // FIXME, error is always null, if there is an error, the storage.js will throw an exception console.log('Mongo Storage system ready'); ctx.store = store; @@ -91,7 +91,7 @@ function boot (env, language) { return next(); } - ctx.authorization = require('./authorization')(env, ctx); + ctx.authorization = require('../authorization')(env, ctx); ctx.authorization.storage.reload(function loaded (err) { if (err) { ctx.bootErrors = ctx.bootErrors || [ ]; @@ -105,33 +105,37 @@ function boot (env, language) { if (hasBootErrors(ctx)) { return next(); } + + ctx.levels = require('../levels'); + ctx.levels.translate = ctx.language.translate; /////////////////////////////////////////////////// // api and json object variables /////////////////////////////////////////////////// - ctx.plugins = require('./plugins')({ + ctx.plugins = require('../plugins')({ settings: env.settings , language: ctx.language }).registerServerDefaults(); - ctx.pushover = require('./plugins/pushover')(env); - ctx.maker = require('./plugins/maker')(env); + ctx.pushover = require('../plugins/pushover')(env); + ctx.maker = require('../plugins/maker')(env); ctx.pushnotify = require('./pushnotify')(env, ctx); + ctx.activity = require('./activity')(env, ctx); ctx.entries = require('./entries')(env, ctx); ctx.treatments = require('./treatments')(env, ctx); ctx.devicestatus = require('./devicestatus')(env.devicestatus_collection, ctx); 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.bus = require('./bus')(env.settings, ctx); - ctx.ddata = require('./data/ddata')(); - ctx.dataloader = require('./data/dataloader')(env, ctx); - ctx.notifications = require('./notifications')(env, ctx); + ctx.properties = require('../api/properties')(env, ctx); + ctx.bus = require('../bus')(env.settings, ctx); + ctx.ddata = require('../data/ddata')(); + ctx.dataloader = require('../data/dataloader')(env, ctx); + ctx.notifications = require('../notifications')(env, ctx); if (env.settings.isEnabled('alexa')) { - ctx.alexa = require('./plugins/alexa')(env, ctx); + ctx.alexa = require('../plugins/alexa')(env, ctx); } next( ); @@ -148,6 +152,7 @@ function boot (env, language) { ctx.store.ensureIndexes(ctx.devicestatus( ), ctx.devicestatus.indexedFields); ctx.store.ensureIndexes(ctx.profile( ), ctx.profile.indexedFields); ctx.store.ensureIndexes(ctx.food( ), ctx.food.indexedFields); + ctx.store.ensureIndexes(ctx.activity( ), ctx.activity.indexedFields); next( ); } @@ -174,7 +179,7 @@ function boot (env, language) { }); ctx.bus.on('data-loaded', function updatePlugins ( ) { - var sbx = require('./sandbox')().serverInit(env, ctx); + var sbx = require('../sandbox')().serverInit(env, ctx); ctx.plugins.setProperties(sbx); ctx.notifications.initRequests(); ctx.plugins.checkNotifications(sbx); @@ -192,7 +197,7 @@ function boot (env, language) { return next(); } - ctx.bridge = require('./plugins/bridge')(env); + ctx.bridge = require('../plugins/bridge')(env); if (ctx.bridge) { ctx.bridge.startEngine(ctx.entries); } @@ -204,7 +209,7 @@ function boot (env, language) { return next(); } - ctx.mmconnect = require('./plugins/mmconnect').init(env, ctx.entries, ctx.devicestatus); + ctx.mmconnect = require('../plugins/mmconnect').init(env, ctx.entries, ctx.devicestatus); if (ctx.mmconnect) { ctx.mmconnect.run(); } diff --git a/lib/devicestatus.js b/lib/server/devicestatus.js similarity index 100% rename from lib/devicestatus.js rename to lib/server/devicestatus.js diff --git a/lib/entries.js b/lib/server/entries.js similarity index 100% rename from lib/entries.js rename to lib/server/entries.js diff --git a/lib/food.js b/lib/server/food.js similarity index 89% rename from lib/food.js rename to lib/server/food.js index a14c9a4a860..18a293690bf 100644 --- a/lib/food.js +++ b/lib/server/food.js @@ -11,7 +11,12 @@ function storage (env, ctx) { } function save (obj, fn) { - obj._id = new ObjectID(obj._id); + try { + obj._id = new ObjectID(obj._id); + } catch (err){ + console.error(err); + obj._id = new ObjectID(); + } obj.created_at = (new Date( )).toISOString( ); api().save(obj, function (err, doc) { fn(err, doc); diff --git a/lib/mqtt.js b/lib/server/mqtt.js similarity index 100% rename from lib/mqtt.js rename to lib/server/mqtt.js diff --git a/lib/pebble.js b/lib/server/pebble.js similarity index 97% rename from lib/pebble.js rename to lib/server/pebble.js index 12ca589553e..544aa878268 100644 --- a/lib/pebble.js +++ b/lib/server/pebble.js @@ -2,8 +2,8 @@ var _ = require('lodash'); -var sandbox = require('./sandbox')(); -var units = require('./units')(); +var sandbox = require('../sandbox')(); +var units = require('../units')(); var DIRECTIONS = { NONE: 0 @@ -169,7 +169,7 @@ function pebble (req, res) { } function configure (env, ctx) { - var wares = require('./middleware/')(env); + var wares = require('../middleware/')(env); function middle (req, res, next) { req.env = env; req.ctx = ctx; diff --git a/lib/profile.js b/lib/server/profile.js similarity index 100% rename from lib/profile.js rename to lib/server/profile.js diff --git a/lib/pushnotify.js b/lib/server/pushnotify.js similarity index 98% rename from lib/pushnotify.js rename to lib/server/pushnotify.js index 7e61fff914a..49748851659 100644 --- a/lib/pushnotify.js +++ b/lib/server/pushnotify.js @@ -4,8 +4,8 @@ var _ = require('lodash'); var crypto = require('crypto'); var NodeCache = require('node-cache'); -var levels = require('./levels'); -var times = require('./times'); +var levels = require('../levels'); +var times = require('../times'); function init(env, ctx) { diff --git a/lib/query.js b/lib/server/query.js similarity index 100% rename from lib/query.js rename to lib/server/query.js diff --git a/lib/treatments.js b/lib/server/treatments.js similarity index 100% rename from lib/treatments.js rename to lib/server/treatments.js diff --git a/lib/websocket.js b/lib/server/websocket.js similarity index 95% rename from lib/websocket.js rename to lib/server/websocket.js index 1c49c82edf9..8143577c48e 100644 --- a/lib/websocket.js +++ b/lib/server/websocket.js @@ -1,11 +1,10 @@ 'use strict'; -var levels = require('./levels'); -var times = require('./times'); -var calcData = require('./data/calcdelta'); +var levels = require('../levels'); +var times = require('../times'); +var calcData = require('../data/calcdelta'); var ObjectID = require('mongodb').ObjectID; -var profilefunctions = require('./profilefunctions')(); - + function init (env, ctx, server) { function websocket ( ) { @@ -18,19 +17,20 @@ function init (env, ctx, server) { var log_reset = '\x1B[0m'; var LOG_WS = log_green + 'WS: ' + log_reset; var LOG_DEDUP = log_magenta + 'DEDUPE: ' + log_reset; - + var io; var watchers = 0; var lastData = {}; var lastProfileSwitch = null; // TODO: this would be better to have somehow integrated/improved - var supportedCollections = { - 'treatments' : env.treatments_collection, + var supportedCollections = { + 'treatments' : env.treatments_collection, 'entries': env.entries_collection, 'devicestatus': env.devicestatus_collection, 'profile': env.profile_collection, - 'food': env.food_collection + 'food': env.food_collection, + 'activity': env.activity_collection }; // This is little ugly copy but I was unable to pass testa after making module from status and share with /api/v1/status @@ -41,10 +41,10 @@ function init (env, ctx, server) { versionNum = 10000 * parseInt(verParse[1]) + 100 * parseInt(verParse[2]) + 1 * parseInt(verParse[3]) ; } var apiEnabled = env.api_secret ? true : false; - + var activeProfile = ctx.ddata.lastProfileFromSwitch; - - var info = { + + var info = { status: 'ok' , name: env.name , version: env.version @@ -53,11 +53,10 @@ function init (env, ctx, server) { , apiEnabled: apiEnabled , careportalEnabled: apiEnabled && env.settings.enable.indexOf('careportal') > -1 , boluscalcEnabled: apiEnabled && env.settings.enable.indexOf('boluscalc') > -1 - , head: env.head , settings: env.settings , extendedSettings: ctx.plugins && ctx.plugins.extendedClientSettings ? ctx.plugins.extendedClientSettings(env.extendedSettings) : {} }; - + if (activeProfile) { info.activeProfile = activeProfile; } @@ -126,7 +125,7 @@ function init (env, ctx, server) { console.log(LOG_WS + 'Disconnected client ID: ',socket.client.id); }); - + function checkConditions (action, data) { var collection = supportedCollections[data.collection]; if (!collection) { @@ -150,7 +149,7 @@ function init (env, ctx, server) { return { result: 'Not permitted' }; } } - + if (action === 'dbUpdate' && !data._id) { console.log('WS dbUpdate/dbAddnot sure abou documentati call: ', 'Missing _id', data); return { result: 'Missing _id' }; @@ -180,7 +179,7 @@ function init (env, ctx, server) { socket.on('dbUpdate', function dbUpdate (data, callback) { console.log(LOG_WS + 'dbUpdate client ID: ', socket.client.id, ' data: ', data); var collection = supportedCollections[data.collection]; - + var check = checkConditions('dbUpdate', data); if (check) { if (callback) { @@ -188,19 +187,25 @@ function init (env, ctx, server) { } return; } - + var id ; + try { + id = new ObjectID(data._id); + } catch (err){ + console.error(err); + id = new ObjectID(); + } ctx.store.collection(collection).update( - { '_id': new ObjectID(data._id) }, + { '_id': id }, { $set: data.data } ); - + if (callback) { callback( { result: 'success' } ); } ctx.bus.emit('data-received'); }); - - // dbUpdateUnset message + + // dbUpdateUnset message // { // collection: treatments // _id: 'some mongo record id' @@ -212,7 +217,7 @@ function init (env, ctx, server) { socket.on('dbUpdateUnset', function dbUpdateUnset (data, callback) { console.log(LOG_WS + 'dbUpdateUnset client ID: ', socket.client.id, ' data: ', data); var collection = supportedCollections[data.collection]; - + var check = checkConditions('dbUpdate', data); if (check) { if (callback) { @@ -220,19 +225,19 @@ function init (env, ctx, server) { } return; } - + ctx.store.collection(collection).update( { '_id': new ObjectID(data._id) }, { $unset: data.data } ); - + if (callback) { callback( { result: 'success' } ); } ctx.bus.emit('data-received'); }); - - // dbAdd message + + // dbAdd message // { // collection: treatments // data: { @@ -244,7 +249,7 @@ function init (env, ctx, server) { console.log(LOG_WS + 'dbAdd client ID: ', socket.client.id, ' data: ', data); var collection = supportedCollections[data.collection]; var maxtimediff = times.mins(1).msecs; - + var check = checkConditions('dbAdd', data); if (check) { if (callback) { @@ -252,14 +257,14 @@ function init (env, ctx, server) { } return; } - + if (data.collection === 'treatments' && !('eventType' in data.data)) { data.data.eventType = ''; } if (!('created_at' in data.data)) { data.data.created_at = new Date().toISOString(); } - + // treatments deduping if (data.collection === 'treatments') { var query; @@ -281,7 +286,7 @@ function init (env, ctx, server) { } return; } - + var selected = false; var query_similiar = { created_at: {$gte: new Date(new Date(data.data.created_at).getTime() - maxtimediff).toISOString(), $lte: new Date(new Date(data.data.created_at).getTime() + maxtimediff).toISOString()} @@ -376,7 +381,7 @@ function init (env, ctx, server) { }); } }); - // dbRemove message + // dbRemove message // { // collection: treatments // _id: 'some mongo record id' @@ -384,7 +389,7 @@ function init (env, ctx, server) { socket.on('dbRemove', function dbRemove (data, callback) { console.log(LOG_WS + 'dbRemove client ID: ', socket.client.id, ' data: ', data); var collection = supportedCollections[data.collection]; - + var check = checkConditions('dbUpdate', data); if (check) { if (callback) { @@ -392,20 +397,20 @@ function init (env, ctx, server) { } return; } - + ctx.store.collection(collection).remove( { '_id': new ObjectID(data._id) } ); - + if (callback) { callback( { result: 'success' } ); } ctx.bus.emit('data-received'); }); - + // Authorization message // { - // client: 'web' | 'phone' | 'pump' + // client: 'web' | 'phone' | 'pump' // , secret: 'secret_hash' // [, history : history_in_hours ] // [, status : true ] @@ -448,10 +453,10 @@ function init (env, ctx, server) { } }); }); - + // Pind message // { - // mills: + // mills: // } socket.on('nsping', function ping (message, callback) { var clientTime = message.mills; @@ -490,9 +495,12 @@ function init (env, ctx, server) { } 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( ); diff --git a/lib/settings.js b/lib/settings.js index f7d6367d69c..ae5ce30e484 100644 --- a/lib/settings.js +++ b/lib/settings.js @@ -27,6 +27,7 @@ function init ( ) { , alarmTimeagoWarnMins: 15 , alarmTimeagoUrgent: true , alarmTimeagoUrgentMins: 30 + , alarmPumpBatteryLow: false , language: 'en' , scaleY: 'log' , showPlugins: '' diff --git a/lib/storage/mongo-storage.js b/lib/storage/mongo-storage.js index 24b1039ead6..b132e42dc4c 100644 --- a/lib/storage/mongo-storage.js +++ b/lib/storage/mongo-storage.js @@ -20,26 +20,32 @@ function init (env, cb, forceNewConnection) { } } else { if (!env.storageURI) { - throw new Error('MongoDB connection string is missing'); + throw new Error('MongoDB connection string is missing. Please set MONGO_CONNECTION environment variable'); } console.log('Setting up new connection to MongoDB'); var timeout = 30 * 1000; - var options = { replset: { socketOptions: { connectTimeoutMS : timeout, socketTimeoutMS : timeout }}}; + var options = { reconnectInterval: 10000, reconnectTries: 500, connectTimeoutMS: timeout, socketTimeoutMS: timeout }; var connect_with_retry = function(i) { - return MongoClient.connect(env.storageURI, options, function connected(err, db) { + return MongoClient.connect(env.storageURI, options, function connected(err, client) { if (err) { - if (i>20) { - // Abort after retrying for more than 10 minutes - throw 'Error connecting to MongoDB, stopping the retry loop and aborting...'; + //console.log('err=', err) + if (err.name && err.name === "MongoNetworkError") { + var timeout = (i > 15) ? 60000 : i*3000; + console.log('Error connecting to MongoDB: %j - retrying in ' + timeout/1000 + ' sec', err); + setTimeout(connect_with_retry, timeout, i+1); + } else if (err.message) { + throw new Error('MongoDB connection string '+env.storageURI+' seems invalid: '+err.message) ; } - console.log('Error connecting to MongoDB: %j - retrying in ' + i*3 + ' sec', err); - setTimeout(connect_with_retry, i*3000, i+1); } else { console.log('Successfully established a connected to MongoDB'); - connection = db; - mongo.db = connection; + + var dbName = env.storageURI.split('/').pop().split('?'); + dbName=dbName[0]; // drop Connection Options + mongo.db = client.db(dbName); + connection = mongo.db; + mongo.client = client; // If there is a valid callback, then invoke the function to perform the callback if (cb && cb.call) { diff --git a/lib/utils.js b/lib/utils.js index da53e700294..1d407ccda05 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -26,7 +26,7 @@ function init(ctx) { }; utils.toFixed = function toFixed(value) { - if (value === 0) { + if (value === undefined || value === 0) { return '0'; } else { var fixed = value.toFixed(2); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 52ec53c4471..f8d6d9b757c 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,21 +1,394 @@ { "name": "Nightscout", - "version": "0.10.2-release-20171201", + "version": "0.10.3-master-20180805", "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/node": { - "version": "6.0.83", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.83.tgz", - "integrity": "sha512-Q92+tkWnX7nmT0ZG+/wFxzJr+idr00T12MgsY3p0sZIu8nfvYF8i5pbY3BVZw6ad6yS2MLF71sfMr+ySatc2Gw==", + "@webassemblyjs/ast": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", + "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", + "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", "dev": true }, - "abab": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", - "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", + "@webassemblyjs/helper-api-error": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", + "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", + "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", + "dev": true, + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", + "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.5.13" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", + "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", + "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", + "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", + "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/ieee754": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", + "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", + "dev": true, + "requires": { + "ieee754": "^1.1.11" + } + }, + "@webassemblyjs/leb128": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", + "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", + "dev": true, + "requires": { + "long": "4.0.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + } + } + }, + "@webassemblyjs/utf8": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", + "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", "dev": true }, + "@webassemblyjs/wasm-edit": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", + "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/helper-wasm-section": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/wast-printer": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", + "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", + "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", + "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", + "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/floating-point-hex-parser": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-code-frame": "1.5.13", + "@webassemblyjs/helper-fsm": "1.5.13", + "long": "^3.2.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", + "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "long": "^3.2.0" + } + }, + "@webpack-contrib/config-loader": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz", + "integrity": "sha512-C7XsS6bXft0aRlyt7YCLg+fm97Mb3tWd+i5fVVlEl0NW5HKy8LoXVKj3mB7ECcEHNEEdHhgzg8gxP+Or8cMj8Q==", + "dev": true, + "requires": { + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", + "chalk": "^2.1.0", + "cosmiconfig": "^5.0.2", + "is-plain-obj": "^1.1.0", + "loud-rejection": "^1.6.0", + "merge-options": "^1.0.1", + "minimist": "^1.2.0", + "resolve": "^1.6.0", + "webpack-log": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@webpack-contrib/schema-utils": { + "version": "1.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz", + "integrity": "sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chalk": "^2.3.2", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "webpack-log": "^1.1.2" + }, + "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 + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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" + } + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -27,30 +400,23 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "requires": { - "mime-types": "2.1.15", + "mime-types": "~2.1.11", "negotiator": "0.6.1" } }, "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true }, "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "requires": { - "acorn": "4.0.13" - } - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^5.0.0" } }, "after": { @@ -59,35 +425,37 @@ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ajv-keywords": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", - "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" }, "dependencies": { "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true } } }, @@ -102,6 +470,15 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "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" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -113,34 +490,46 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "1.1.0" - } + "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==" + "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", @@ -148,6 +537,12 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -164,42 +559,67 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true }, - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=" + "ascli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", + "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", + "requires": { + "colour": "~0.7.1", + "optjs": "~3.2.2" + } }, "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" + "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 }, "async": { "version": "0.9.2", @@ -209,50 +629,51 @@ "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, "autoprefixer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000726", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=" - }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "backo2": { @@ -265,33 +686,90 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" - }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true }, "base64id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" }, - "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", - "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" - }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "benv": { @@ -300,8 +778,8 @@ "integrity": "sha1-c3XsAalaAAM+uYCESINmKFKCJDU=", "dev": true, "requires": { - "jsdom": "11.1.0", - "rewire": "2.5.2" + "jsdom": ">= 10.0", + "rewire": "^2.3.1" } }, "better-assert": { @@ -312,41 +790,71 @@ "callsite": "1.0.0" } }, + "bfj-node4": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "tryer": "^1.0.0" + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + } + } + }, "big.js": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=" }, "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true }, "bl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", - "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "2.0.6" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" }, "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "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" } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -356,61 +864,113 @@ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" }, "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "ms": "2.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" } } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, "bootevent": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/bootevent/-/bootevent-0.0.1.tgz", "integrity": "sha1-yNkAtymk0S+yU2wW+hfwYvzPxqg=", "requires": { - "chainsaw": "0.1.0" + "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-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "brace-expansion": { @@ -418,7 +978,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -427,124 +987,104 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "requires": { - "expand-range": "0.1.1" - } - }, - "broadway": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz", - "integrity": "sha1-fb7waLlUt5B5Jf1USWO1eKkCuno=", - "requires": { - "cliff": "0.1.9", - "eventemitter2": "0.4.14", - "nconf": "0.6.9", - "utile": "0.2.1", - "winston": "0.8.0" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "cliff": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz", - "integrity": "sha1-ohHgnGo947oa8n0EnTASUNGIErw=", - "requires": { - "colors": "0.6.2", - "eyes": "0.1.8", - "winston": "0.8.0" - } - }, - "winston": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz", - "integrity": "sha1-YdCDD6aZcGISIGsKK1ymmpMENmg=", - "requires": { - "async": "0.2.10", - "colors": "0.6.2", - "cycle": "1.0.3", - "eyes": "0.1.8", - "pkginfo": "0.3.1", - "stack-trace": "0.0.10" - } - } + "expand-range": "^0.1.0" } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "browserify-aes": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", - "integrity": "sha512-WYCMOT/PtGTlpOKFht0YJFYcPy6pLCR98CtWfzK13zoynLlBMvAdEMSRGmgnJCw2M2j/5qxBkinZQFobieM8dQ==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, "requires": { - "browserify-aes": "1.0.8", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "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==", + "dev": true + } } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, "requires": { - "pako": "0.2.9" + "pako": "~1.0.5" } }, "browserslist": { @@ -552,8 +1092,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000726", - "electron-to-chromium": "1.3.21" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "bson": { @@ -565,10 +1105,11 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-equal-constant-time": { @@ -576,15 +1117,16 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, "bufferview": { "version": "1.0.1", @@ -594,20 +1136,22 @@ "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true }, "bytebuffer": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-3.1.1.tgz", "integrity": "sha1-KGuLPxZz43kPX7K+Iu+l61uW25A=", "requires": { - "bufferview": "1.0.1", - "long": "1.2.3" + "bufferview": "~1", + "long": "~1" }, "dependencies": { "long": { @@ -622,32 +1166,51 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "caller": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/caller/-/caller-0.0.1.tgz", - "integrity": "sha1-83odbqEOgp2UchrimpC7T7Uqt2c=", + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, "requires": { - "tape": "2.3.3" - }, - "dependencies": { - "deep-equal": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz", - "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=" - }, - "tape": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz", - "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=", - "requires": { - "deep-equal": "0.1.2", - "defined": "0.0.0", - "inherits": "2.0.3", - "jsonify": "0.0.0", - "resumer": "0.0.0", - "through": "2.3.8" - } - } + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "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" + } + }, + "callback-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/callback-stream/-/callback-stream-1.1.0.tgz", + "integrity": "sha1-RwGlEmbwbgbqpx/BcjOCLYdfSQg=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "> 1.0.0 < 3.0.0" } }, "caller-callsite": { @@ -656,7 +1219,7 @@ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "callsites": "2.0.0" + "callsites": "^2.0.0" } }, "caller-path": { @@ -665,7 +1228,7 @@ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "caller-callsite": "2.0.0" + "caller-callsite": "^2.0.0" } }, "callsite": { @@ -682,36 +1245,60 @@ "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000726", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { - "version": "1.0.30000726", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000726.tgz", - "integrity": "sha1-m7dC+NAmpi34c7wDwGhD0iVbYNc=" + "version": "1.0.30000862", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000862.tgz", + "integrity": "sha1-bB4pb4u+Xl6kbwQhXouQ7Y+52o0=" }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chainsaw": { @@ -719,7 +1306,7 @@ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", "requires": { - "traverse": "0.3.9" + "traverse": ">=0.3.0 <0.4" }, "dependencies": { "traverse": { @@ -734,44 +1321,143 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "dev": true + }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + } + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" } }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", - "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "requires": { + "chalk": "^1.1.3" + } + }, + "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.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "requires": { - "chalk": "1.1.3" + "source-map": "0.5.x" } }, "clear-require": { @@ -780,41 +1466,49 @@ "integrity": "sha1-qgH1w1WJMmvVXphp6r2kj4ZEfes=", "dev": true, "requires": { - "caller-path": "2.0.0", - "resolve-from": "2.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^2.0.0" } }, - "cliff": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz", - "integrity": "sha1-U74z6p9ZvshWCe4wCsQgdgPlIBM=", + "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 + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, "requires": { - "colors": "1.0.3", - "eyes": "0.1.8", - "winston": "0.8.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } + "restore-cursor": "^2.0.0" } }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true } } }, @@ -833,43 +1527,48 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "requires": { - "q": "1.5.0" + "q": "^1.1.2" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "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": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "requires": { - "clone": "1.0.2", - "color-convert": "1.9.0", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "requires": { - "color-name": "1.1.3" + "color-name": "1.1.1" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, "color-string": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "colormin": { @@ -877,16 +1576,11 @@ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.1" + "has": "^1.0.1" } }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" - }, "colour": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", @@ -897,18 +1591,35 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" + }, + "commist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-1.0.0.tgz", + "integrity": "sha1-wMNSUBz29S6RJOPvicmAbiAi6+8=", + "requires": { + "leven": "^1.0.0", + "minimist": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } }, - "common": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/common/-/common-0.2.5.tgz", - "integrity": "sha1-PHGC9ni9HjaBzVzDSMdZ/o3SI5Q=" + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, "component-bind": { "version": "1.0.0", @@ -916,9 +1627,9 @@ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" }, "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, "component-inherit": { "version": "0.0.3", @@ -926,63 +1637,60 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", - "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", "requires": { - "mime-db": "1.29.0" + "mime-db": ">= 1.34.0 < 2" }, "dependencies": { "mime-db": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", - "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" } } }, "compression": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "requires": { - "accepts": "1.3.4", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.11", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "dependencies": { "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.17", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, - "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" - } - }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.35.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==" } } }, @@ -991,18 +1699,45 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, "content-disposition": { "version": "0.5.2", @@ -1014,12 +1749,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "content-type-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", - "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", - "dev": true - }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -1031,9 +1760,29 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-util-is": { @@ -1041,73 +1790,98 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cosmiconfig": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.5.tgz", + "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "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": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "capture-stack-trace": "^1.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.8" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { "version": "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.1.1", - "shebang-command": "1.2.0", - "which": "1.2.14" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, "requires": { - "boom": "2.10.1" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" - } + "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-color-names": { "version": "0.0.4", @@ -1115,24 +1889,24 @@ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" }, "css-loader": { - "version": "0.28.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", - "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.17", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" }, "dependencies": { "object-assign": { @@ -1147,9 +1921,9 @@ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" } }, "cssesc": { @@ -1167,38 +1941,38 @@ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.17", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" }, "dependencies": { "defined": { @@ -1218,15 +1992,8 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "requires": { - "clap": "1.2.0", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cssom": { @@ -1235,31 +2002,28 @@ "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", "dev": true }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "cssom": "0.3.2" + "array-find-index": "^1.0.1" } }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=" - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } }, "d3": { @@ -1272,7 +2036,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -1282,16 +2046,67 @@ } } }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" + }, + "dependencies": { + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "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 + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true, + "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" } @@ -1301,10 +2116,35 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "deep-equal": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz", - "integrity": "sha1-mWedO70EcVb81FDT0B7rkGhpHoM=" + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "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==", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -1312,10 +2152,71 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=" + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } + }, + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } }, "delayed-stream": { "version": "1.0.0", @@ -1323,17 +2224,18 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -1342,52 +2244,91 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.0", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "director": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz", - "integrity": "sha1-v9N0EHX9f7GlsuE2WMX0vsd3NvM=" - }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + }, + "dependencies": { + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + } + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ecdsa-sig-formatter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", - "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", + "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", "requires": { - "base64url": "2.0.0", - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "ee-first": { @@ -1396,27 +2337,28 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" }, "electron-to-chromium": { - "version": "1.3.21", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz", - "integrity": "sha1-qWfr3P6O0Ag/wkTRiUAiqOgRPqI=" + "version": "1.3.50", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.50.tgz", + "integrity": "sha1-dDi3b5K0G5GfP73TUPvQdX2s3fc=" }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1425,131 +2367,130 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } }, "engine.io": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz", - "integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", "requires": { - "accepts": "1.3.3", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.4" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } } } }, "engine.io-client": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz", - "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", - "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "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": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "ms": "2.0.0" } } } }, "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.6", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "has-binary2": "~1.0.2" } }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - } + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, "requires": { - "prr": "0.0.0" + "prr": "~1.0.1" } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "errorhandler": { @@ -1557,77 +2498,64 @@ "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.0.tgz", "integrity": "sha1-6rpkyl1UKjEayUX1gt78M2Fl2fQ=", "requires": { - "accepts": "1.3.3", - "escape-html": "1.0.3" + "accepts": "~1.3.3", + "escape-html": "~1.0.3" } }, - "es5-ext": { - "version": "0.10.30", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", - "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-symbol": "3.1.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "es5-ext": { + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, - "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "~0.10.14" } }, "escape-html": { @@ -1640,37 +2568,58 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "escodegen": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", + "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - } + "estraverse": "^4.1.0" } }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, "esutils": { "version": "2.0.2", @@ -1682,60 +2631,49 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" - } - }, "event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" - }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "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.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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" } }, "expand-braces": { @@ -1743,17 +2681,44 @@ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" } }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "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" + } + } } }, "expand-range": { @@ -1761,80 +2726,89 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" } }, "expose-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.3.tgz", - "integrity": "sha1-NfvTZZeJ5PqoH1nei36fw55GbVE=" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz", + "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==" }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.4", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", + "send": "0.16.2", + "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.17", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { - "ms": "2.0.0" + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" } }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.33.0" } }, "qs": { @@ -1842,98 +2816,169 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, - "express-extension-to-accept": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/express-extension-to-accept/-/express-extension-to-accept-0.0.2.tgz", - "integrity": "sha1-+4Bc0DrTZ1sZiDmZz/9DE0l1N04=", + "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.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "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": { - "mime": "1.2.11" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" + "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" + } } } }, - "express-minify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/express-minify/-/express-minify-0.2.0.tgz", - "integrity": "sha1-aedLxA2DLgqXyEcqO7HwjhscYkU=", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { - "cssmin": "0.4.3", - "on-headers": "1.0.1", - "uglify-js": "2.8.29" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "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 }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "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": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "is-descriptor": "^1.0.0" } }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "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": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "1.0.0" - } - }, "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -1952,108 +2997,97 @@ "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=" }, "file-loader": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", - "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "requires": { - "loader-utils": "1.1.0" + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "filesize": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", - "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", "dev": true }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "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": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "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.2.2" + "kind-of": "^3.0.2" } }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true } } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.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" - } - }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "locate-path": "2.0.0" - } - }, - "flatiron": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz", - "integrity": "sha1-JIz3mj2n19w3nioRySonGcu1QPY=", - "requires": { - "broadway": "0.3.6", - "director": "1.2.7", - "optimist": "0.6.0", - "prompt": "0.2.14" - }, - "dependencies": { - "optimist": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - } - } + "locate-path": "^2.0.0" } }, "flatten": { @@ -2066,93 +3100,59 @@ "resolved": "https://registry.npmjs.org/flot/-/flot-0.8.0-alpha.tgz", "integrity": "sha1-nLvHFHwQpH0lSduQvSmH7BunhLo=" }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "1.0.2" - } - }, - "forever": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/forever/-/forever-0.15.3.tgz", - "integrity": "sha1-d9nX4V/S9RGtnYShEMfdj8js68I=", - "requires": { - "cliff": "0.1.10", - "clone": "1.0.2", - "colors": "0.6.2", - "flatiron": "0.4.3", - "forever-monitor": "1.7.1", - "nconf": "0.6.9", - "nssocket": "0.5.3", - "object-assign": "3.0.0", - "optimist": "0.6.1", - "path-is-absolute": "1.0.1", - "prettyjson": "1.2.1", - "shush": "1.0.0", - "timespan": "2.3.0", - "utile": "0.2.1", - "winston": "0.8.3" - }, - "dependencies": { - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - } - } - } + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, - "forever-monitor": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.7.1.tgz", - "integrity": "sha1-XYIPSjp42y2BriZx8Vi56GoJG7g=", - "requires": { - "broadway": "0.3.6", - "chokidar": "1.7.0", - "minimatch": "3.0.4", - "ps-tree": "0.0.3", - "utile": "0.2.1" - } - }, "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, "requires": { - "async": "2.6.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" }, "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, "requires": { - "lodash": "4.17.4" + "delayed-stream": "~1.0.0" } } } }, "formidable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", - "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", "dev": true }, "forwarded": { @@ -2160,6 +3160,15 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "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", @@ -2170,530 +3179,310 @@ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "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, "optional": true }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "optional": true - }, "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "1.0.0" - } + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "optional": true, "requires": { "ms": "2.0.0" } }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, "optional": true }, "detect-libc": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz", - "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=", - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "safer-buffer": "^2.1.0" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "optional": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "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=", - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, "optional": true }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "requires": { - "mime-db": "1.27.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" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } @@ -2702,379 +3491,313 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, "optional": true }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-pre-gyp": { - "version": "0.6.39", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", - "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", + "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "optional": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, "optional": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, "optional": true }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, "optional": true }, "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, "optional": true } } }, "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } - }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "requires": { - "safe-buffer": "5.0.1" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "optional": 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, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, "optional": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "optional": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true } } }, @@ -3083,35 +3806,24 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3121,63 +3833,137 @@ } } }, - "git-rev": { - "version": "git://github.com/bewest/git-rev.git#cb4a1955728e3534805d3ffcbf17077b87c829cd" - }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "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": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "ini": "^1.3.4" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, "requires": { - "is-glob": "2.0.1" + "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.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "^0.1.1", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "handlebars": { @@ -3186,10 +3972,10 @@ "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "async": { @@ -3204,8 +3990,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "source-map": { @@ -3214,7 +4000,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "uglify-js": { @@ -3224,9 +4010,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -3245,9 +4031,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -3258,23 +4044,12 @@ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, - "har-validator": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", - "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", - "requires": { - "bluebird": "2.11.0", - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.1" - } - }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -3282,21 +4057,21 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "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": "0.0.1" + "isarray": "2.0.1" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" } } }, @@ -3310,98 +4085,139 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-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" + } + } + } + }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "help-me": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-1.1.0.tgz", + "integrity": "sha1-jy1QjQYAtKRW2i8IZVbn5cBWo8Y=", "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "callback-stream": "^1.0.2", + "glob-stream": "^6.1.0", + "through2": "^2.0.1", + "xtend": "^4.0.0" } }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, "html-comment-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, - "html-encoding-sniffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", - "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", - "dev": true, - "requires": { - "whatwg-encoding": "1.0.1" - } - }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "http-signature": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", - "integrity": "sha1-F5bPZ6ABrVzWhJ3KCZFIXwkIn+Y=", - "requires": { - "asn1": "0.1.11", - "assert-plus": "0.1.5", - "ctype": "0.5.3" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" - }, - "i": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", - "integrity": "sha1-HSuFQVjsgWkRPGy39raAHpniEdU=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true }, "iconv-lite": { "version": "0.4.19", @@ -3418,61 +4234,96 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { - "postcss": "6.0.11" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.11.tgz", - "integrity": "sha512-DsnIzznNRQprsGTALpkC0xjDygo+QcOd+qVjP9+RjyzrPiyYOXBGOwoJ4rAiiE4lu6JggQ/jW4niY24WLxuncg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true }, "indexes-of": { "version": "1.0.1", @@ -3489,8 +4340,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3499,171 +4350,301 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, - "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=" + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "dev": true }, - "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, + "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" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "requires": { - "binary-extensions": "1.8.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-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-primitive": "2.0.0" + "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-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^2.1.1" } }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "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": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, + "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": "0.1.1", "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=" }, + "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=" }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + "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-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "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": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -3676,20 +4657,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.10", - "js-yaml": "3.9.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.2.14", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "async": { @@ -3704,11 +4685,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" } }, "esprima": { @@ -3729,11 +4710,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "resolve": { @@ -3749,7 +4730,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "supports-color": { @@ -3758,7 +4739,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } }, "wordwrap": { @@ -3769,44 +4750,30 @@ } } }, - "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "requires": { - "hoek": "2.16.3", - "isemail": "1.2.0", - "moment": "2.19.1", - "topo": "1.1.0" - } - }, "jquery": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", - "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" }, "jquery-ui-bundle": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/jquery-ui-bundle/-/jquery-ui-bundle-1.12.1.tgz", - "integrity": "sha1-1r4uTDd0lOI3ixyuKSCpHRGC2MQ=" + "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=" }, - "jquery.tipsy": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/jquery.tipsy/-/jquery.tipsy-1.0.3.tgz", - "integrity": "sha1-ZI86kCXTQr4ccoDyO3DEGDWoWxM=", - "requires": { - "jquery": "2.2.4" - } + "jquery.tooltips": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jquery.tooltips/-/jquery.tooltips-1.0.0.tgz", + "integrity": "sha1-/Ko2Il0IXQ/NY71E4rAGtUGDHHI=" }, "js-base64": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.2.0.tgz", - "integrity": "sha1-XoqNGTqQgZjdI9FwSCbSB7DlqPY=" + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", + "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==" }, "js-storage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-storage/-/js-storage-1.0.1.tgz", - "integrity": "sha1-O1t/z0xIDwiVsXKYlL/Ohi+PjN8=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/js-storage/-/js-storage-1.0.4.tgz", + "integrity": "sha512-ND6iVfDo5r2PSpkzXa+s+S6TzZkRD1EaN4NvtwRWp2rrL1pmS9wdcbmv3eYZYOkBcPiQjyQUWZRcT0aQ4Wuk8g==" }, "js-tokens": { "version": "3.0.2", @@ -3819,8 +4786,8 @@ "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -3838,59 +4805,157 @@ "optional": true }, "jsdom": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.1.0.tgz", - "integrity": "sha512-vKKDU+Xh9O6VgzdOYf5Rmqbgp+Yz4YTBC19gaLtctXch33EmNucA395KJGGboldafPW1vv9XLuiprO4+wXfl0g==", - "dev": true, - "requires": { - "abab": "1.0.3", - "acorn": "4.0.13", - "acorn-globals": "3.1.0", - "array-equal": "1.0.0", - "content-type-parser": "1.0.1", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.1", - "nwmatcher": "1.4.1", - "parse5": "3.0.2", - "pn": "1.0.0", - "request": "2.83.0", - "request-promise-native": "1.0.4", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.2", - "webidl-conversions": "4.0.1", - "whatwg-encoding": "1.0.1", - "whatwg-url": "6.1.0", - "xml-name-validator": "2.0.1" + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", + "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.3.1 < 0.4.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwsapi": "^2.0.0", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" }, "dependencies": { - "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" + "acorn": "^5.0.0" } }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "cssstyle": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", + "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "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 + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", "dev": true, - "optional": true + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true } } }, @@ -3899,10 +4964,11 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "json-schema": { "version": "0.2.3", @@ -3910,16 +4976,16 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -3927,11 +4993,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" - }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -3942,32 +5003,38 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" - }, "jsonwebtoken": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", - "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", - "requires": { - "joi": "6.10.1", - "jws": "3.1.4", - "lodash.once": "4.1.1", - "ms": "2.0.0", - "xtend": "4.0.1" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz", + "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==", + "requires": { + "jws": "^3.1.5", + "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" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } } }, "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", - "extsprintf": "1.0.2", + "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.3.6" + "verror": "1.10.0" }, "dependencies": { "assert-plus": { @@ -3978,51 +5045,59 @@ } }, "jwa": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", - "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", + "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", "requires": { - "base64url": "2.0.0", "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "5.1.1" + "ecdsa-sig-formatter": "1.0.10", + "safe-buffer": "^5.0.1" } }, "jws": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", - "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", + "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", "requires": { - "base64url": "2.0.0", - "jwa": "1.1.5", - "safe-buffer": "5.1.1" + "jwa": "^1.1.5", + "safe-buffer": "^5.0.1" } }, "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-buffer": "^1.1.5" } }, - "lazy": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=" + "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" + } }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=" }, "levn": { "version": "0.3.0", @@ -4030,122 +5105,99 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "loader-runner": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true }, "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, - "lodash.camelcase": { + "lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, "lodash.memoize": { "version": "4.1.2", @@ -4168,6 +5220,62 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "loglevelnext": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", + "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", + "dev": true, + "requires": { + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" + } + }, "long": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", @@ -4176,27 +5284,76 @@ "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "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.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=" + "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" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "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-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "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" + } + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -4206,42 +5363,48 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "1.1.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" } }, "merge-descriptors": { @@ -4249,163 +5412,718 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.1" + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "mfb": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/mfb/-/mfb-0.12.0.tgz", - "integrity": "sha1-E+HUekDyF04sLEcFJKh8BNXKY38=" - }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "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": { + "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 + }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "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" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "~1.27.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimed-connect-to-nightscout": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/minimed-connect-to-nightscout/-/minimed-connect-to-nightscout-1.1.1.tgz", + "integrity": "sha512-Cts3oJPtLdRCOeBRu5tqoIRoZjAsYuNN4LhAdtZG8P42MJxFZdsRDc13BdDNEq7GCxhVcNtvan3XwTnobm0xFg==", + "requires": { + "common": "0.2.x", + "lodash": "^4.17.10", + "request": "^2.87.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "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=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "common": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/common/-/common-0.2.5.tgz", + "integrity": "sha1-PHGC9ni9HjaBzVzDSMdZ/o3SI5Q=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "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=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "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=" + }, + "expect.js": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", + "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=" + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "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" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "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=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "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=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "safe-buffer": "^5.0.1" } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "fill-range": "2.2.3" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, - "miller-rabin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, "requires": { - "mime-db": "1.27.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" } }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" - }, - "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=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, "requires": { - "brace-expansion": "1.1.8" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, - "minimed-connect-to-nightscout": { - "version": "git://github.com/mddub/minimed-connect-to-nightscout.git#23c03c6eda4a29886cc5f65185399cc48f7e6abf", + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, "requires": { - "common": "0.2.5", - "lodash": "3.10.1", - "request": "2.64.0" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, - "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=" - }, - "request": { - "version": "2.64.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.64.0.tgz", - "integrity": "sha1-lqWCQjzptLXDTpsjLkgBc/FLpgg=", - "requires": { - "aws-sign2": "0.5.0", - "bl": "1.0.3", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "1.0.1", - "har-validator": "1.8.0", - "hawk": "3.1.3", - "http-signature": "0.11.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "5.1.0", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3" + "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" } } } }, - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -4422,119 +6140,93 @@ } }, "mocha": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.1.2.tgz", - "integrity": "sha1-Ufk7Qyv34bF1/8Iog8zQvjLbprU=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.2.0", - "diff": "1.4.0", + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.0.5", - "growl": "1.9.2", - "json3": "3.3.2", - "lodash.create": "3.1.1", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "3.1.2" + "supports-color": "5.4.0" }, "dependencies": { "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } + "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": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "glob": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", - "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "ms": "2.0.0" } }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, "moment": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", - "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=" + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + }, + "moment-locales-webpack-plugin": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.0.7.tgz", + "integrity": "sha512-KjYpaAhmuzGFZl6534FlZoK7QtW3vqlxd+A17W9DlgHJ5yhXANy7AZJl7iYtZpWjAfMTAWiVrQ7YDZdkFO6uRw==", + "dev": true, + "requires": { + "lodash.difference": "^4.5.0" + } }, "moment-timezone": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz", - "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", + "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", "requires": { - "moment": "2.19.1" + "moment": ">= 2.9.0" } }, "mongodb": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.33.tgz", - "integrity": "sha1-tTfEcdNKZlG0jzb9vyl1A0Dgi1A=", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.11.tgz", + "integrity": "sha512-60KV+DPW++fzaD5cYbieCRQcXiYWQdRLHBqQyuu3rJmrP8vYZgI4u5UwfsUX6nGLON69FUIu4d3tH+WL4jShuA==", "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.17", - "readable-stream": "2.2.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "mongodb-core": "3.0.11" } }, "mongodb-core": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", - "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.11.tgz", + "integrity": "sha512-agzBbSP3ahEYJyBMQicj70B+n+NNYsKaroezu5ETcImXs9nqf89/QI6e8iipg2rY3a8OWZBHWvqYxnsWasrUQA==", "requires": { - "bson": "1.0.4", - "require_optional": "1.0.1" + "bson": "~1.0.4", + "require_optional": "^1.0.1" } }, "mongomock": { @@ -4542,37 +6234,92 @@ "resolved": "https://registry.npmjs.org/mongomock/-/mongomock-0.1.2.tgz", "integrity": "sha1-M4aFA9yqVJ4AaGcVz2qk+R+3Dnk=", "requires": { - "bson": "1.0.4" + "bson": "*" } }, - "mqtt": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-0.3.13.tgz", - "integrity": "sha1-9l++MjkBtmRCe0cWWEKNz6HVvuQ=", + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, "requires": { - "readable-stream": "1.0.34" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mqtt": { + "version": "2.18.3", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-2.18.3.tgz", + "integrity": "sha512-BXCUugFgA6FOWJGxhvUWtVLOdt6hYTmiMGPksEyKuuF1FQ0ji7UJBJ/0kVRMUtUWCAtPGnt4mZZZgJpzNLcuQg==", + "requires": { + "commist": "^1.0.0", + "concat-stream": "^1.6.2", + "end-of-stream": "^1.4.1", + "help-me": "^1.0.1", + "inherits": "^2.0.3", + "minimist": "^1.2.0", + "mqtt-packet": "^5.6.0", + "pump": "^3.0.0", + "readable-stream": "^2.3.6", + "reinterval": "^1.1.0", + "split2": "^2.1.1", + "websocket-stream": "^5.1.2", + "xtend": "^4.0.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "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" } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "mqtt-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-5.6.0.tgz", + "integrity": "sha512-QECe2ivqcR1LRsPobRsjenEKAC3i1a5gmm+jNKJLrsiq9PaSQ18LlKFuxvhGxWkvGEPadWv6rKd31O4ICqS1Xw==", + "requires": { + "bl": "^1.2.1", + "inherits": "^2.0.3", + "process-nextick-args": "^2.0.0", + "safe-buffer": "^5.1.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" } } }, @@ -4581,60 +6328,70 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, "optional": true }, - "nconf": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz", - "integrity": "sha1-lXDvFe1vmuays8jV5xtm0xk81mE=", + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { - "async": "0.2.9", - "ini": "1.3.4", - "optimist": "0.6.0" + "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" }, "dependencies": { - "async": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz", - "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk=" + "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 }, - "optimist": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - } + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, - "ncp": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=" - }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "node-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.1.1.tgz", - "integrity": "sha1-CFJGRe5AOd7cPcwd18a5eeBhnkQ=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz", + "integrity": "sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==", "requires": { - "clone": "2.1.1", - "lodash": "4.17.4" + "clone": "2.x", + "lodash": "4.x" }, "dependencies": { "clone": { @@ -4645,40 +6402,34 @@ } }, "node-libs-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", - "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "0.10.31", - "timers-browserify": "2.0.4", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } } }, "nopt": { @@ -4687,26 +6438,28 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "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.2" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -4719,10 +6472,10 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" }, "dependencies": { "object-assign": { @@ -4736,17 +6489,9 @@ "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.1" - } - }, - "nssocket": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.5.3.tgz", - "integrity": "sha1-iDyi7GBfXtZKTVGQsmJUAZKPj40=", - "requires": { - "eventemitter2": "0.4.14", - "lazy": "1.0.11" + "path-key": "^2.0.0" } }, "num2fraction": { @@ -4754,15 +6499,10 @@ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nwmatcher": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz", - "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=", + "nwsapi": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.4.tgz", + "integrity": "sha512-Zt6HRR6RcJkuj5/N9zeE7FN6YitRW//hK2wTOwX274IBphbY3Zf5+yn5mZ9v/SzAOTMjQNxZf9KkmPLWn0cV4g==", "dev": true }, "oauth-sign": { @@ -4770,23 +6510,79 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - }, "object-component": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "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=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.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": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" } }, "on-finished": { @@ -4807,7 +6603,16 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" } }, "opener": { @@ -4816,18 +6621,27 @@ "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", "dev": true }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -4838,64 +6652,161 @@ } } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "optjs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", - "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" - }, - "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "optjs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", + "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" + }, + "ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "dev": true, + "requires": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "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 + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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" + } + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "readable-stream": "^2.0.1" } }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "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": { - "p-limit": "1.1.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.8", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-duration": { @@ -4903,40 +6814,14 @@ "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-0.1.1.tgz", "integrity": "sha1-ExFN3JiRwezSgANiRFVN5DZHoiY=" }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parse5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", - "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "@types/node": "6.0.83" - } - }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "requires": { - "better-assert": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parseqs": { @@ -4944,7 +6829,7 @@ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -4952,7 +6837,7 @@ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -4960,34 +6845,51 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", - "requires": { - "process": "0.11.10", - "util": "0.10.3" - } + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true }, "path-to-regexp": { "version": "0.1.7", @@ -4995,11 +6897,12 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^3.0.0" } }, "pause-stream": { @@ -5007,19 +6910,20 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "performance-now": { @@ -5028,43 +6932,52 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true }, - "pkginfo": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=" + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } }, - "pn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.0.0.tgz", - "integrity": "sha1-HPWjCw2AbNGPiPxBprXUrWFbO6k=", + "plur": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.0.1.tgz", + "integrity": "sha512-lJl0ojUynAM1BZn58Pas2WT/TXeC1+bS+UqShl0x9+49AtOn7DixRXVzaC8qrDOIxNDmepKnLuMTH7NQmkX0PA==", + "dev": true, + "requires": { + "irregular-plurals": "^2.0.0" + } + }, + "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": "5.2.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", - "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.2.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5074,9 +6987,9 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "requires": { - "postcss": "5.2.17", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -5084,9 +6997,9 @@ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "requires": { - "colormin": "1.1.2", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -5094,8 +7007,8 @@ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -5103,7 +7016,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -5111,7 +7024,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -5119,7 +7032,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -5127,7 +7040,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -5135,17 +7048,16 @@ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "requires": { - "postcss": "5.2.17", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", "requires": { - "postcss": "5.2.17", - "uniqid": "4.1.1" + "postcss": "^5.0.4" } }, "postcss-merge-idents": { @@ -5153,9 +7065,9 @@ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "requires": { - "has": "1.0.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -5163,7 +7075,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -5171,11 +7083,11 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.17", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -5188,9 +7100,9 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" }, "dependencies": { "object-assign": { @@ -5205,8 +7117,8 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -5214,10 +7126,10 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -5225,64 +7137,64 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.17", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "requires": { - "postcss": "6.0.11" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.11.tgz", - "integrity": "sha512-DsnIzznNRQprsGTALpkC0xjDygo+QcOd+qVjP9+RjyzrPiyYOXBGOwoJ4rAiiE4lu6JggQ/jW4niY24WLxuncg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -5292,54 +7204,54 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.11" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.11.tgz", - "integrity": "sha512-DsnIzznNRQprsGTALpkC0xjDygo+QcOd+qVjP9+RjyzrPiyYOXBGOwoJ4rAiiE4lu6JggQ/jW4niY24WLxuncg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -5349,54 +7261,54 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.11" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.11.tgz", - "integrity": "sha512-DsnIzznNRQprsGTALpkC0xjDygo+QcOd+qVjP9+RjyzrPiyYOXBGOwoJ4rAiiE4lu6JggQ/jW4niY24WLxuncg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -5406,54 +7318,54 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.11" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.11.tgz", - "integrity": "sha512-DsnIzznNRQprsGTALpkC0xjDygo+QcOd+qVjP9+RjyzrPiyYOXBGOwoJ4rAiiE4lu6JggQ/jW4niY24WLxuncg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -5463,7 +7375,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -5471,10 +7383,10 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, "postcss-ordered-values": { @@ -5482,8 +7394,8 @@ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -5491,8 +7403,8 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -5500,7 +7412,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "requires": { - "postcss": "5.2.17" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -5508,9 +7420,9 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "requires": { - "has": "1.0.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -5518,9 +7430,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -5528,10 +7440,10 @@ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -5539,9 +7451,9 @@ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.17", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -5554,9 +7466,9 @@ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "requires": { - "has": "1.0.1", - "postcss": "5.2.17", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prelude-ls": { @@ -5570,18 +7482,19 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "pretty-bytes": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", + "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==", + "dev": true }, "prettyjson": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz", "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=", "requires": { - "colors": "1.1.2", - "minimist": "1.2.0" + "colors": "^1.1.2", + "minimist": "^1.2.0" }, "dependencies": { "colors": { @@ -5599,100 +7512,97 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, - "prompt": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", - "requires": { - "pkginfo": "0.3.1", - "read": "1.0.7", - "revalidator": "0.1.8", - "utile": "0.2.1", - "winston": "0.8.3" - } + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true }, "protobufjs": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-3.2.4.tgz", "integrity": "sha1-k/kbBym7yHTtywAr3xrY+OxXAdo=", "requires": { - "ascli": "1.0.1", - "bytebuffer": "3.1.1" - }, - "dependencies": { - "ascli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", - "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", - "requires": { - "colour": "0.7.1", - "optjs": "3.2.2" - } - } + "ascli": "^1.0.1", + "bytebuffer": "~3.1" } }, "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" + "forwarded": "~0.1.2", + "ipaddr.js": "1.6.0" } }, "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" - }, - "ps-tree": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz", - "integrity": "sha1-2/jXUqf+Ivp9WGNWiUmWEOknbdw=", - "requires": { - "event-stream": "0.5.3" - }, - "dependencies": { - "event-stream": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz", - "integrity": "sha1-t3uTCfcQet3+q2PwwOr9jbC9jBw=", - "requires": { - "optimist": "0.2.8" - } - }, - "optimist": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz", - "integrity": "sha1-6YGrfiaLRXlIWTtVZ0wJmoFcrDE=", - "requires": { - "wordwrap": "0.0.3" - } - } - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", + "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", + "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { @@ -5706,14 +7616,14 @@ "integrity": "sha1-icuU+RgsNqpZqaxnROSa2K/00Gc=" }, "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "query-string": { @@ -5721,8 +7631,8 @@ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" }, "dependencies": { "object-assign": { @@ -5735,61 +7645,43 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true }, "random-token": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/random-token/-/random-token-0.0.8.tgz", "integrity": "sha1-HPhFrz+zHlf3yqS5oXNHjEZIO2E=" }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "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=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "1.1.5" - } - } + "safe-buffer": "^5.1.0" } }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -5798,66 +7690,101 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { - "mute-stream": "0.0.7" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, "reduce-css-calc": { @@ -5865,9 +7792,9 @@ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -5882,7 +7809,7 @@ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -5893,17 +7820,18 @@ } }, "regenerate": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "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": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -5911,9 +7839,28 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "requires": { - "regenerate": "1.3.2", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "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, + "requires": { + "rc": "^1.0.1" } }, "regjsgen": { @@ -5926,18 +7873,24 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } }, + "reinterval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", + "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" + }, "remove-trailing-separator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", - "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true }, "repeat-string": { "version": "0.2.2", @@ -5945,32 +7898,30 @@ "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" }, "dependencies": { "assert-plus": { @@ -5983,114 +7934,97 @@ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.0" - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "boom": "5.2.0" + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" }, "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "hoek": "4.2.0" + "delayed-stream": "~1.0.0" } } } }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, "har-validator": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.3.0", - "har-schema": "2.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + } } }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.0", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.33.0" } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.2.0" - } + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -6098,7 +8032,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } } } @@ -6109,18 +8043,7 @@ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "dev": true, "requires": { - "lodash": "4.17.4" - } - }, - "request-promise-native": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.4.tgz", - "integrity": "sha1-hpiOyO7kCORVefzoO/0Fs635oVU=", - "dev": true, - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.2" + "lodash": "^4.13.1" } }, "require_optional": { @@ -6128,37 +8051,62 @@ "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.4.1" + "resolve-from": "^2.0.0", + "semver": "^5.1.0" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } }, "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "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 + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, "requires": { - "through": "2.3.8" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" + "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 }, "rewire": { "version": "2.5.2", @@ -6170,153 +8118,196 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" } }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" }, "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "requires": { - "ajv": "5.2.2" - }, - "dependencies": { - "ajv": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", - "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - } + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "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" + } }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.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" - } - }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "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" + } + } + } }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sgvdata": { "version": "git://github.com/ktind/sgvdata.git#150873bc92e80bf645796ee19f13c6cff79d5630", + "from": "git://github.com/ktind/sgvdata.git#wip/protobuf", "requires": { - "event-stream": "3.1.7", - "protobufjs": "3.2.4" + "event-stream": "~3.1.5", + "protobufjs": "~3.2.0" }, "dependencies": { "event-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz", "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=", "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.2.10", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.2", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "split": { @@ -6324,159 +8315,349 @@ "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", "requires": { - "through": "2.3.8" + "through": "2" } } } }, "sha.js": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", - "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "share2nightscout-bridge": { - "version": "git://github.com/bewest/share2nightscout-bridge.git#34e3c59567b6d74c0d543b234f354bea1cf807e1", + "version": "git://github.com/nightscout/share2nightscout-bridge.git#d4a0d75db30461fee3131bd4efd66326c63496e6", + "from": "git://github.com/nightscout/share2nightscout-bridge.git#wip/generalize", "requires": { - "request": "2.53.0" + "request": "^2.87.0" }, "dependencies": { - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "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=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "readable-stream": "1.0.34" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, - "caseless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", - "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=" + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "requires": { - "delayed-stream": "0.0.5" - } + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=" + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true }, - "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=" + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", - "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime-types": "2.0.14" - } + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "hawk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", - "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } + "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=" }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { - "asn1": "0.1.11", - "assert-plus": "0.1.5", - "ctype": "0.5.3" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "1.12.0" + "mime-db": "~1.35.0" } }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, "oauth-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", - "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, - "request": { - "version": "2.53.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz", - "integrity": "sha1-GAo66St7Y5gC5PlUXdj83rcddgw=", - "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.9.0", - "combined-stream": "0.0.7", - "forever-agent": "0.5.2", - "form-data": "0.2.0", - "hawk": "2.3.1", - "http-signature": "0.10.1", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.0.14", - "node-uuid": "1.4.8", - "oauth-sign": "0.6.0", - "qs": "2.3.3", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3" + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } } } }, @@ -6484,14 +8665,16 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "shiro-trie": { "version": "0.3.13", @@ -6499,25 +8682,25 @@ "integrity": "sha1-pKZrVJjWm5RgLnqYsAVzFbO1x0Q=" }, "should": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/should/-/should-11.1.2.tgz", - "integrity": "sha1-PK2cb8YA/+LhVH2Ui+MoTphNqUY=", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.2.tgz", + "integrity": "sha512-3y3b/1GsvXZU2rMVDOGtaeX8N0KhdtiaGG6IhMsVkZyjcR0PokdPS9UUmlnYj5h94+ECqUr+Z6KYTm846A/tfQ==", "dev": true, "requires": { - "should-equal": "1.0.1", - "should-format": "3.0.3", - "should-type": "1.4.0", - "should-type-adaptors": "1.0.1", - "should-util": "1.0.0" + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" } }, "should-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", - "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, "requires": { - "should-type": "1.4.0" + "should-type": "^1.4.0" } }, "should-format": { @@ -6526,8 +8709,8 @@ "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "dev": true, "requires": { - "should-type": "1.4.0", - "should-type-adaptors": "1.0.1" + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" } }, "should-type": { @@ -6537,13 +8720,13 @@ "dev": true }, "should-type-adaptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", - "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, "requires": { - "should-type": "1.4.0", - "should-util": "1.0.0" + "should-type": "^1.3.0", + "should-util": "^1.0.0" } }, "should-util": { @@ -6552,157 +8735,200 @@ "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", "dev": true }, - "shush": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shush/-/shush-1.0.0.tgz", - "integrity": "sha1-wnQVqeRY8v7TmyfPjrN8ADeCtDE=", - "requires": { - "caller": "0.0.1", - "strip-json-comments": "0.1.3" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-statistics": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/simple-statistics/-/simple-statistics-0.7.0.tgz", "integrity": "sha1-xQ8Tu9yX6aT9ICVjgtoX5o7asco=" }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "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": { - "hoek": "2.16.3" + "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" + } + } } }, - "socket.io": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", - "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.4", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.4", - "socket.io-parser": "2.3.1" + "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": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "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": { - "ms": "0.7.2" + "is-descriptor": "^1.0.0" } }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "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" + } }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + "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" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "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": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" + "kind-of": "^3.2.0" + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" } } }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, "socket.io-client": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", - "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.4", - "has-binary": "0.1.7", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", + "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "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": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" } } }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" } } }, @@ -6711,7 +8937,7 @@ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -6719,30 +8945,85 @@ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-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 + }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "requires": { - "through": "2.3.8" + "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" + } + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "requires": { + "through2": "^2.0.2" } }, "sprintf-js": { @@ -6751,18 +9032,19 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "dependencies": { "asn1": { @@ -6777,15 +9059,40 @@ } } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "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.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "stealthy-require": { "version": "1.1.1", @@ -6797,9 +9104,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-combiner": { @@ -6807,7 +9115,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" }, "dependencies": { "duplexer": { @@ -6817,153 +9125,190 @@ } } }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" + } + }, + "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" + } + } } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, "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" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "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=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "~5.1.0" + } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "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": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true }, "strip-json-comments": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", - "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "style-loader": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", - "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.3.tgz", + "integrity": "sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg==", "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, - "sugar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sugar/-/sugar-1.5.0.tgz", - "integrity": "sha1-2dP7oQ96iH4G5q37B4onrLH8BVY=" - }, "superagent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", - "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", + "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.1", - "debug": "2.6.7", - "extend": "3.0.1", - "form-data": "1.0.0-rc4", - "formidable": "1.1.1", - "methods": "1.1.2", - "mime": "1.3.4", - "qs": "6.4.0", - "readable-stream": "2.3.3" + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.1.1", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.0.5" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "form-data": { - "version": "1.0.0-rc4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", - "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", + "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": { - "async": "1.5.2", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "ms": "2.0.0" } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true } } }, "supertest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-2.0.1.tgz", - "integrity": "sha1-oFgIHXiPFRXUcA11Aogea3WeRM0=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.1.0.tgz", + "integrity": "sha512-O44AMnmJqx294uJQjfUmEyYOg7d9mylNFsMw/Wkz4evKd1njyPrtCN+U6ZIC7sKtfEVQhfTqFFijlXx8KP/Czw==", "dev": true, "requires": { - "methods": "1.1.2", - "superagent": "2.3.0" + "methods": "~1.1.2", + "superagent": "3.8.2" } }, "supports-color": { @@ -6976,13 +9321,13 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" }, "dependencies": { "colors": { @@ -7000,8 +9345,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } } } @@ -7012,33 +9357,79 @@ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", "dev": true }, - "sync-exec": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.6.2.tgz", - "integrity": "sha1-cX0izFPwzh3vVZQ2LzqJouu5EQU=" - }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "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, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "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 + }, "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, - "timespan": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=" + "titleize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.1.tgz", + "integrity": "sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==", + "dev": true + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } }, "to-array": { "version": "0.1.4", @@ -7048,51 +9439,95 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "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": { - "hoek": "2.16.3" + "kind-of": "^3.0.2" } }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "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" + } + }, + "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": { - "punycode": "1.4.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "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" + } + }, + "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 } } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } }, "traverse": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true }, "tweetnacl": { "version": "0.14.5", @@ -7106,25 +9541,45 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.15" + "mime-types": "~2.1.18" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + } } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "uglify-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.8.tgz", - "integrity": "sha512-1lnTkrJWw6LJ7n43ZyYVXx0eN2PQh0c3Inb0nY/vj5fNfwykXQFif2kvNgm/Bf0ClLA8R6SKaMHFzo9io4Q+vg==", + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz", + "integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==", "requires": { - "commander": "2.11.0", - "source-map": "0.6.1" + "commander": "~2.16.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -7138,78 +9593,278 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, "optional": true }, "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz", + "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==", + "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.0.1" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "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": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "is-extendable": "^0.1.0" } }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "requires": { + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "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, + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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, + "requires": { + "has-flag": "^3.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==", "requires": { - "macaddress": "0.2.8" + "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==" + } } }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -7218,23 +9873,33 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "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, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "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": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -7242,43 +9907,30 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "utile": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", - "requires": { - "async": "0.2.10", - "deep-equal": "0.0.0", - "i": "0.3.5", - "mkdirp": "0.5.1", - "ncp": "0.4.2", - "rimraf": "2.6.1" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - } - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8-compile-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz", + "integrity": "sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg==", + "dev": true }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -7287,202 +9939,374 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" }, "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "extsprintf": "1.0.2" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, "requires": { "indexof": "0.0.1" } }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, "requires": { - "async": "2.5.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - }, - "dependencies": { - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "requires": { - "lodash": "4.17.4" - } - } + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, - "webidl-conversions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", - "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=", - "dev": true + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } }, "webpack": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", - "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", - "requires": { - "acorn": "5.2.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.3.0", - "ajv-keywords": "2.1.0", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.0.3", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.0.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.0.1", - "yargs": "8.0.2" + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.3.tgz", + "integrity": "sha512-3VcrVoFgzSz1IYgga71YpU3HO89Al5bSnDOj9RJQPsy+FNyI1sFsUyJITn3pktNuaRBlQT0usvKZE3GgkPGAIw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/wasm-edit": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" + } + }, + "webpack-bundle-analyzer": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", + "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==", + "dev": true, + "requires": { + "acorn": "^5.3.0", + "bfj-node4": "^5.2.0", + "chalk": "^2.3.0", + "commander": "^2.13.0", + "ejs": "^2.5.7", + "express": "^4.16.2", + "filesize": "^3.5.11", + "gzip-size": "^4.1.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "opener": "^1.4.3", + "ws": "^4.0.0" }, "dependencies": { "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { - "lodash": "4.17.4" + "color-convert": "^1.9.0" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" } } } }, - "webpack-bundle-analyzer": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.1.tgz", - "integrity": "sha512-a+UcvlsXvCmclNgfThT8PVyuJKd029By7CxkYEbNNCfs0Lqj9gagjkdv3S3MBvCIKBaUGYs8l4UpiVI0bFoh2Q==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "chalk": "1.1.3", - "commander": "2.11.0", - "ejs": "2.5.7", - "express": "4.16.2", - "filesize": "3.5.11", - "gzip-size": "3.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "opener": "1.4.3", - "ws": "3.3.1" + "webpack-command": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webpack-command/-/webpack-command-0.4.1.tgz", + "integrity": "sha512-4u23PTUcjLJCcPqs53ugjFIp2c3I6rGZgYYwgD7LPPU745MzbS3tLXuOpKdgFNN+qDdWtzfLKZhMTQyf7jklcg==", + "dev": true, + "requires": { + "@webpack-contrib/config-loader": "^1.2.0", + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", + "camelcase": "^5.0.0", + "chalk": "^2.3.2", + "debug": "^3.1.0", + "decamelize": "^2.0.0", + "enhanced-resolve": "^4.0.0", + "import-local": "^1.0.0", + "isobject": "^3.0.1", + "loader-utils": "^1.1.0", + "log-symbols": "^2.2.0", + "loud-rejection": "^1.6.0", + "meant": "^1.0.1", + "meow": "^5.0.0", + "merge-options": "^1.0.0", + "object.values": "^1.0.4", + "opn": "^5.3.0", + "ora": "^2.1.0", + "plur": "^3.0.0", + "pretty-bytes": "^5.0.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "titleize": "^1.0.1", + "update-notifier": "^2.3.0", + "v8-compile-cache": "^2.0.0", + "webpack-log": "^1.1.2", + "wordwrap": "^1.0.0" }, "dependencies": { - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ultron": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", - "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", "dev": true }, - "ws": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz", - "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==", + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } + }, + "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" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.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 + }, + "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" + } + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true } } }, - "webpack-sources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", - "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "webpack-log": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", + "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", + "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.5.7" + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "whatwg-encoding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", - "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "iconv-lite": "0.4.13" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "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 } } }, - "whatwg-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.1.0.tgz", - "integrity": "sha1-X8gnm5PXVIO5ztiyYjmFSEehhXg=", - "dev": true, + "websocket-stream": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.1.2.tgz", + "integrity": "sha512-lchLOk435iDWs0jNuL+hiU14i3ERSrMA0IKSiJh7z6X/i4XNsutBZrtqu2CPOZuA4G/zabiqVAos0vW+S7GEVw==", "requires": { - "lodash.sortby": "4.7.0", - "tr46": "0.0.3", - "webidl-conversions": "4.0.1" + "duplexify": "^3.5.1", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "safe-buffer": "^5.1.1", + "ws": "^3.2.0", + "xtend": "^4.0.0" } }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "dev": true + }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", @@ -7492,65 +10316,40 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, - "which-module": { + "widest-line": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "winston": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", - "requires": { - "async": "0.2.10", - "colors": "0.6.2", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "pkginfo": "0.3.1", - "stack-trace": "0.0.10" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - } - } + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "errno": "~0.1.7" } }, "wrappy": { @@ -7558,30 +10357,43 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "ws": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", - "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "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 }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true }, "xtend": { "version": "4.0.1", @@ -7589,76 +10401,31 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - } - } + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true } } }, diff --git a/package.json b/package.json index d5fb14ef018..517d351520b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Nightscout", - "version": "0.10.2-release-20171201", + "version": "0.10.3-master-20180805", "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", @@ -27,9 +27,10 @@ "start": "node server.js", "test": "make test", "env": "env", - "postinstall": "webpack --config webpack.config.js && npm run-script update-buster", - "bundle": "webpack --config webpack.config.js && npm run-script update-buster", - "bower": "node node_modules/bower/bin/bower --allow-root install && ", + "postinstall": "webpack --mode production --config webpack.config.js && npm run-script update-buster", + "bundle": "webpack --mode production --config webpack.config.js && npm run-script update-buster", + "bundle-dev": "webpack --mode development --config webpack.config.js && npm run-script update-buster", + "bundle-analyzer": "webpack --mode development --config webpack.config.js --profile --json > stats.json && webpack-bundle-analyzer stats.json", "update-buster": "node bin/generateCacheBuster.js >tmp/cacheBusterToken" }, "config": { @@ -47,71 +48,67 @@ } }, "engines": { - "node": "8.9.x", - "npm": "5.2.0 || 5.3.0 || 5.0.3" + "node": "8.11.x", + "npm": "6.x || 5.8.x || 5.7.x || 5.6.x" }, "dependencies": { - "ajv": "^5.3.0", + "ajv": "^6.5.1", "async": "^0.9.2", - "body-parser": "^1.18.2", + "body-parser": "^1.18.3", "bootevent": "0.0.1", - "compression": "^1.7.1", - "css-loader": "^0.28.7", + "compression": "^1.7.3", + "css-loader": "^0.28.11", "cssmin": "^0.4.3", "d3": "^3.5.17", - "ejs": "^2.5.7", + "ejs": "^2.6.1", "errorhandler": "^1.5.0", "event-stream": "^3.3.4", "expand-braces": "^0.1.2", - "expose-loader": "^0.7.3", - "express": "^4.16.2", - "express-extension-to-accept": "0.0.2", - "express-minify": "^0.2.0", - "file-loader": "^0.11.2", + "expose-loader": "^0.7.5", + "express": "^4.16.3", + "express-minify": "^1.0.0", + "file-loader": "^1.1.11", "flot": "^0.8.0-alpha", - "forever": "^0.15.3", - "git-rev": "git://github.com/bewest/git-rev.git", - "jquery": "^2.2.4", - "jquery-ui-bundle": "^1.12.1", - "jquery.tipsy": "^1.0.3", - "js-storage": "^1.0.1", - "jsonwebtoken": "^7.4.3", - "lodash": "^4.17.4", + "jquery": "^3.3.1", + "jquery-ui-bundle": "^1.12.1-migrate", + "jquery.tooltips": "^1.0.0", + "js-storage": "^1.0.4", + "jsonwebtoken": "^8.3.0", + "lodash": "^4.17.10", "long": "^3.2.0", - "mfb": "^0.12.0", - "minimed-connect-to-nightscout": "git://github.com/mddub/minimed-connect-to-nightscout.git#v1.1.0", - "moment": "^2.19.1", - "moment-timezone": "^0.5.14", - "mongodb": "^2.2.33", + "mime": "^2.3.1", + "minimed-connect-to-nightscout": "^1.1.1", + "moment": "^2.22.2", + "moment-timezone": "^0.5.21", + "mongodb": "~3.0.11", "mongomock": "^0.1.2", - "mqtt": "^0.3.13", - "node-cache": "^4.1.1", + "mqtt": "^2.18.3", + "node-cache": "^4.2.0", "parse-duration": "^0.1.1", - "path": "^0.12.7", "prettyjson": "^1.2.1", "pushover-notifications": "^0.2.4", "random-token": "0.0.8", - "request": "^2.83.0", + "request": "^2.87.0", "sgvdata": "git://github.com/ktind/sgvdata.git#wip/protobuf", - "share2nightscout-bridge": "git://github.com/bewest/share2nightscout-bridge.git#wip/generalize", + "share2nightscout-bridge": "git://github.com/nightscout/share2nightscout-bridge.git#wip/generalize", "shiro-trie": "^0.3.13", "simple-statistics": "^0.7.0", - "socket.io": "^1.7.4", - "style-loader": "^0.18.2", - "sugar": "^1.5.0", - "sync-exec": "^0.6.2", + "socket.io": "^2.1.1", + "style-loader": "^0.20.2", "traverse": "^0.6.6", - "uglify-js": "^3.1.8", - "uuid": "^3.1.0", - "webpack": "^3.8.1" + "uglify-js": "^3.4.6", + "uuid": "^3.2.1" }, "devDependencies": { - "benv": "3.3.0", + "benv": "^3.3.0", "clear-require": "^2.0.0", - "istanbul": "~0.4.5", - "mocha": "~3.1.2", - "should": "~11.1.1", - "supertest": "~2.0.0", - "webpack-bundle-analyzer": "^2.9.1" + "istanbul": "^0.4.5", + "mocha": "^5.2.0", + "moment-locales-webpack-plugin": "^1.0.7", + "should": "^13.2.2", + "supertest": "^3.1.0", + "webpack": "^4.16.3", + "webpack-bundle-analyzer": "^2.13.1", + "webpack-command": "^0.4.1" } } diff --git a/server.js b/server.js index 642fe1ed73e..27d629034a2 100644 --- a/server.js +++ b/server.js @@ -45,7 +45,7 @@ function create (app) { return transport.createServer(app); } -require('./lib/bootevent')(env, language).boot(function booted (ctx) { +require('./lib/server/bootevent')(env, language).boot(function booted (ctx) { var app = require('./app')(env, ctx); var server = create(app).listen(PORT, HOSTNAME); console.log(translate('Listening on port'), PORT, HOSTNAME); @@ -55,7 +55,7 @@ require('./lib/bootevent')(env, language).boot(function booted (ctx) { } if (env.MQTT_MONITOR) { - ctx.mqtt = require('./lib/mqtt')(env, ctx); + ctx.mqtt = require('./lib/server/mqtt')(env, ctx); var es = require('event-stream'); es.pipeline(ctx.mqtt.entries, ctx.entries.map( ), ctx.mqtt.every(ctx.entries)); } @@ -63,7 +63,7 @@ require('./lib/bootevent')(env, language).boot(function booted (ctx) { /////////////////////////////////////////////////// // setup socket io for data and message transmission /////////////////////////////////////////////////// - var websocket = require('./lib/websocket')(env, ctx, server); + var websocket = require('./lib/server/websocket')(env, ctx, server); ctx.bus.on('data-processed', function() { websocket.update(); diff --git a/static/api-docs.html b/static/api-docs.html index f58fd52b0a7..dfec386b976 100644 --- a/static/api-docs.html +++ b/static/api-docs.html @@ -1,9 +1,11 @@ + - + - Nightscout API - + Swagger UI: Nightscout API + + @@ -22,89 +24,88 @@ - + + - - - - - - - - - - - - - - - - - + - - - - + + + + + - - + + + + + + + - - + + -
 
-
+
+ + + + + diff --git a/static/css/drawer.css b/static/css/drawer.css index 0217dde2a65..41afd6fd400 100644 --- a/static/css/drawer.css +++ b/static/css/drawer.css @@ -319,6 +319,10 @@ ul.navigation { display: block; } +.navigation li.multilink { + display: flex; +} + .navigation a { text-decoration: none; background-color: #808080; @@ -327,6 +331,12 @@ ul.navigation { margin: 10px 0; } +.navigation a.multilink { + display: flex; + flex-grow: 1; + justify-content: center; +} + .navigation a:hover { background-color: #989898; } diff --git a/static/css/jquery.tooltips.css b/static/css/jquery.tooltips.css new file mode 100644 index 00000000000..fe800b9b6af --- /dev/null +++ b/static/css/jquery.tooltips.css @@ -0,0 +1,109 @@ +.tooltip strong, .tooltip b { + font-weight: 700 +} +.tooltip { + position: absolute; + font-size: 10px; + padding: 3px 5px; + opacity: 0.9; + z-index: 9999; + word-wrap: break-word; +} +.tooltip .tooltip-inner { + background-color: #000; + color: #fff; + max-width: 200px; + padding: 3px 8px; + text-align: center; + box-shadow: 0 0 5px 0 black; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} +.tooltip .tooltip-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + border: 5px dashed #000; +} +.tooltip .tooltip-arrow-n { + border-bottom-color: #000; +} +.tooltip .tooltip-arrow-s { + border-top-color: #000; +} +.tooltip .tooltip-arrow-e { + border-left-color: #000; +} +.tooltip .tooltip-arrow-w { + border-right-color: #000; +} +.tooltip.tooltip-n .tooltip-arrow { + top: 0px; + left: 50%; + margin-left: -5px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} +.tooltip.tooltip-nw .tooltip-arrow { + top: 0; + left: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} +.tooltip.tooltip-ne .tooltip-arrow { + top: 0; + right: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} +.tooltip.tooltip-s .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} +.tooltip.tooltip-sw .tooltip-arrow { + bottom: 0; + left: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} +.tooltip.tooltip-se .tooltip-arrow { + bottom: 0; + right: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} +.tooltip.tooltip-e .tooltip-arrow { + right: 0; + top: 50%; + margin-top: -5px; + border-left-style: solid; + border-right: none; + border-top-color: transparent; + border-bottom-color: transparent; +} +.tooltip.tooltip-w .tooltip-arrow { + left: 0; + top: 50%; + margin-top: -5px; + border-right-style: solid; + border-left: none; + border-top-color: transparent; + border-bottom-color: transparent; +} diff --git a/static/css/main.css b/static/css/main.css index ea6541b876c..75492290675 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,5 +1,5 @@ -@import url("//fonts.googleapis.com/css?family=Ubuntu:400,600"); +@import url('https://fonts.googleapis.com/css?family=Ubuntu:400,700'); @font-face { font-family: 'nsicons'; @@ -71,7 +71,7 @@ html, body { } body { - font-family: 'Ubuntu', Verdana, Helvetica, Arial, sans-serif; + font-family: 'Ubuntu', sans-serif; background: #000; color: #bdbdbd; } diff --git a/static/profile/js/profileeditor.js b/static/profile/js/profileeditor.js index bcb26425414..94a8671e40f 100644 --- a/static/profile/js/profileeditor.js +++ b/static/profile/js/profileeditor.js @@ -327,6 +327,8 @@ GUIToObject(); var newname = $('#pe_profile_name').val(); + if (!isNaN(newname)) newname = 'Profile' + newname; + if (currentprofile !== newname) { // rename if already exists while (record.store[newname]) { diff --git a/static/report/compare.html b/static/report/compare.html deleted file mode 100644 index 76fdcd7e528..00000000000 --- a/static/report/compare.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - Nightscout performance comparison - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Nightscout performance comparison

- -
- - - - - - - - - - - - -
-
-
-
-
-
- -
-
-
-
- - from - -
-
-
-
-
-
-
- - -
- Authentication status: - - - - - - - - - - - - - diff --git a/static/report/js/compare.js b/static/report/js/compare.js deleted file mode 100644 index bfa608c0358..00000000000 --- a/static/report/js/compare.js +++ /dev/null @@ -1,639 +0,0 @@ - - - -function slippy (dom, opt) { - - var svg = { }; - var chart; - var container; - var scales = { x: { }, y: { } }; - var dom_width, dom_height, width, height; - var scaleExtent = [ 0, 200 ]; - var zoomer; - - var margin = {top: 20, right: 50, bottom: 20, left: 50}; - // get_dimensions( ); - - - function frame ( ) { - get_dimensions( ); - var range = frame.getRange( ); - // var width = dom.width( ); - // var height = dom.height( ); - svg.attr('width', dom_width) - // .attr('height', height - margin.right - margin.left) - ; - var begin = scales.x.invert(0); - var end = scales.x.invert(width); - range = frame.setRange(begin, end); - var delta = moment(begin).from(moment(end)); - // .replace(' ago', ''); - opt.controls.find('.begin-input').val(delta); - opt.controls.find('.end-input').val(end.format(Date.ISO8601_DATETIME)); - opt.controls.data('range', {begin: begin, end: end}); - // console.log(width, height, delta) - - // console.log(opt); - chart.select(".x.axis").call(frame.xAxis); - dom.trigger('refocus', [range, frame]); - - } - - frame.getRange = function _getRange ( ) { - return [frame.begin, frame.end]; - } - - frame.setRange = function _setRange (begin, end) { - frame.begin = Date.create(begin); - frame.end = Date.create(end); - return frame.getRange( ); - } - - function get_dimensions( ) { - dom_width = dom.width( ); - margin = {top: 20, right: 50, bottom: 20, left: 50}; - width = dom_width - margin.left - margin.right; - dom_height = dom.height( ); - height = dom_height - margin.top - margin.bottom; - } - - function init ( ) { - get_dimensions( ); - var begin = opt.begin || opt.controls.find('INPUT.begin-input').val( ); - var end = opt.end || opt.controls.find('INPUT.end-input').val( ); - var range = frame.setRange(begin, end); - // var width = dom.width( ); - // var height = dom.height( ); - svg = d3.select(dom.get(0)).append('svg') - .attr('class', 'slippy-chart') - ; - ; - chart = svg.append('g') - .attr('class', 'widget') - .attr("tranform", "translate(" + 0 + ", " + margin.top + ")") - ; - scales.x = d3.time.scale( ) - .domain(range) - .nice(d3.time.week) - .rangeRound([0, dom.width( )]) - ; - scales.y = d3.scale.log( ) - .domain([ 40, 400 ]) - .rangeRound([1, dom.height( )]) - ; - frame.xAxis = d3.svg.axis( ) - .scale(scales.x) - .ticks(7) - .tickSize(12, 1, 1) - ; - chart.append("g") - .attr("transform", "translate(" + 0 + ", " + (height / 2) + ")") - .attr("class", "x axis") - .call(frame.xAxis) - ; - - zoomer = d3.behavior.zoom( ) - .x(scales.x) - .scaleExtent(scaleExtent) - .on('zoom', frame); - ; - svg.call(zoomer); - - // frame.setRange(begin, end); - opt.controls.on('change', 'INPUT', refocus); - frame( ); - $(window).on('resize', resize); - return frame; - } - - function adjust_sizes (ev) { - get_dimensions( ); - scales.x - .rangeRound([0, dom.width( )]) - ; - scales.y - .rangeRound([1, dom.height( )]) - ; - chart.selectAll('.x.axis') - .call(frame.xAxis) - } - - function resize (ev) { - adjust_sizes(ev); - frame( ); - } - - function refocus (ev) { - var target = $(ev.target); - if (target.is('INPUT')) { - var begin = opt.controls.find('INPUT.begin-input').val( ); - var end = opt.controls.find('INPUT.end-input').val( ); - var range = frame.setRange(begin, end); - } - scales.x.domain(range) - .nice(d3.time.week) - ; - frame( ); - } - - return init( ); - // return frame; -} - -function cached (opts) { - var storage = opts.storage || crossfilter([ ]); - var dims = { - byDate: storage.dimension(dateStringDate) - }; - function api ( ) { - } - - function within (start, end) { - start = Date.create(start); - end = Date.create(end); - return dims.byDate.filterRange([start, end]).top(Infinity); - } - - function cx ( ) { - return storage; - } - - function get ( ) { - } - - function add (records) { - storage.add(records); - } - - function dateString (d) { return d.dateString; } - function dateStringDate (d) { return Date.create(d.dateString); } - function sgv (d) { return d.sgv; } - function is_clean (d) { return sgv(d) > 39; } - function is_in_range (d) { return sgv(d) >= range.low && sgv(d) <= range.high; } - function is_high (d) { return sgv(d) > range.high; } - function is_low (d) { return sgv(d) < range.low; } - - api.dims = dims; - api.get = get; - api.add = add; - api.within = within; - api.cx = cx; - return api; -} - -function manager (view, data, opts) { - - // var colorize = d3.scale.category20b( ); - var colorize = d3.scale.ordinal( ) - .domain([0, 10]) - .range(colorbrewer.Set3[10]); - var templates = opts.templates; - var item_opts = opts.item_opts || { }; - var pools = [ ]; - var master = { }; - var cache = opts.cache || cached({ }); - function manage ( ) { - } - - function init ( ) { - rows = view.find('.reticle'); - if (rows.length > 0) { - } else { - var item = make({ }); - pools.push(item); - } - view.on('refocus', '.reticle', on_refocus); - return manage; - } - - function make (data) { - var item = templates.find('.reticle').clone(true); - var pool = templates.find('.pool').clone(true); - var end = data.end || Date.create('now').format(Date.ISO8601_DATETIME); - var begin = data.begin || Date.create(end).rewind({weeks: 6}).format(Date.ISO8601_DATETIME); - view.find('.ranges').append(item); - view.find('.observations').append(pool); - var control = slippy(item.find('.timeline'), - { controls: item.find('.controls') - , begin: begin - , end: end - } ); - var reticle = {dom: item, control: control}; - var color = colorize(pools.length); - var lense = ranger(pool, {color: color, begin: begin, end: end, cache: cache}); - var display = { dom: pool, control: lense }; - reticle.dom.find('.timeline').css('border', '1px solid ' + color); - display.dom.css('border-color', color); - reticle.dom.find("span, :input").css('color', color); - // reticle.dom.find(".x.axis line").('styl', color); - var axis = d3.select(reticle.dom.get(0)).selectAll('.x.axis'); - axis.selectAll('line').style('stroke', color); - axis.selectAll('path').style('stroke', color); - axis.selectAll('text').style('color', color); - return { reticle: reticle, display: display, color: color }; - } - - function on_refocus (ev, range) { - var target = $(ev.target); - var pool = pools.filter(function (pool) { - var timeline = pool.reticle.dom.find('.timeline'); - return timeline.is(target); - }).pop( ); - if (pool) { - pool.display.control.setRange(range[0], range[1]); - } - } - - function add_new ( ) { - var item = make({ }); - pools.push(item); - } - - manage.add_new = add_new; - - return init( ); -} - -function pager (opts) { - var query = { }; - var url = opts.url || '/api/v1/entries.json?find[type]=sgv&find[sgv][$gt]=39&count=500000&'; - query.begin = opts.begin; - query.end = opts.end; - var payload = [ ]; - var days = { }; - var cache = opts.cache; - var DATE_FMT = "{yyyy}-{MM}-{dd}"; - - var bisect = d3.bisector(function (d) { return Date.create(d.dateString); }); - function page ( ) { - } - - function refresh (start, end) { - // console.log("PAYLOAD?", payload); - var q = { - start: Date.create(Date.create(start).format(DATE_FMT)) - , end: Date.create(Date.create(end).format(DATE_FMT)) - }; - query.begin = start; - query.end = end; - var range = d3.time.days(q.start, q.end); - days = { }; - console.log('QUERY FOR', range.length, 'days', q, query); - iter_query(range); - return; - if (payload && payload.length > 0) { - console.log("NUM DAYS", range.length); - // TODO: soft update, only get deltas against the edges of the - // cursor. - // start.isBefore - // start.isBetween - // start.isAfter - // end.isBefore - // end.isBetween - // end.isAfter - var holding = { - begin: Date.create(payload[0].dateString) - , last: Date.create(payload.slice(-1).pop( ).dateString) - } - console.log("BISECT LEFT start", bisect.left(payload, { dateString: start })); - console.log("BISECT LEFT end", end, bisect.right(payload, { dateString: end })); - do_query(start, end, first_page); - } else { - do_query(start, end, first_page); - } - query.begin = start; - query.end = end; - } - - function param_string (begin, end) { - return [ - "find[dateString][$gte]=" + Date.create(begin).format(DATE_FMT) - , "find[dateString][$lte]=" + Date.create(end).format(DATE_FMT) - ].join('&') - } - - function iter (prev, current, index, tail) { - } - - function iter_query (range) { - payload = [ ]; - range.forEach(function (day, i) { - var start = day; - var end = d3.time.day.offset(start, 1); - var data = cache.within(start, end); - if (data.length < 10) { - do_query(start, end, function _iter_ (resp) { - days[Date.create(day).format(DATE_FMT)] = true; - collate(resp); - }); - } else { - days[Date.create(day).format(DATE_FMT)] = true; - payload = payload.concat(data); - if (Object.keys(days).length >= range.length) { - do_payload( ); - } - } - }); - - } - - function accrue (begin, end, cb) { - var q = { - start: Date.create(Date.create(start).format(DATE_FMT)) - , end: Date.create(Date.create(end).format(DATE_FMT)) - }; - var range = d3.time.days(q.start, q.end); - if (range.length > 3) { - var half = range.length / 2; - var head = range.slice(0, half); - var tail = range.slice(half); - // head.reduce(iter, { }); - // tail.reduce(iter, { }); - } - } - - function collate (resp) { - console.log('payload', payload.length, 'resp', resp.length); - payload = payload.concat(resp); - cache.add(resp); - payload.sort(cmp_dateString); - var range = d3.time.days(query.start, query.end); - if (Object.keys(days).length >= range.length) { - do_payload( ); - } - } - - function cmp_dateString (a, b) { - return a.dateString > b.dateString; - } - - function do_query (begin, end, cb) { - var range = d3.time.days(Date.create(begin), Date.create(end)); - var fetch = url + param_string(begin, end); - console.log('QUERY FOR', range.length, 'days', query, fetch); - $.getJSON(fetch, cb); - } - - function first_page (resp) { - // console.log('resp', resp); - payload = resp; - do_payload( ); - } - - function do_payload ( ) { - if (opts.callback && opts.callback.call) { - opts.callback(payload); - } else { - // console.log(payload); - } - } - - function init ( ) { - if (query.begin && query.end) { - refresh(query.begin, query.end); - // do_query(query.begin, query.end, first_page); - } - page( ); - return page; - } - - page.refresh = refresh; - - return init( ); -} - -function time_in_range (data, opts) { - var range = { - high: 180 - , low: 80 - }; - - function sgv (d) { return d.sgv; } - function is_clean (d) { return sgv(d) > 39; } - function is_in_range (d) { return sgv(d) >= range.low && sgv(d) <= range.high; } - function is_high (d) { return sgv(d) > range.high; } - function is_low (d) { return sgv(d) < range.low; } - var results = [ ]; - var days = d3.nest( ) - .key(function (d) { - return Date.create(d.dateString).format('{yyyy}-{MM}-{dd}') - } ) - .rollup(function (leaves) { - var clean = leaves.filter(is_clean); - var nominal = clean.filter(is_in_range); - var highs = clean.filter(is_high); - var lows = clean.filter(is_low); - return { - length: clean.length - , color: opts.color || '#eee' - , target: nominal.length / clean.length * 100 - , highs: highs.length / clean.length * 100 - , lows: lows.length / clean.length * 100 - , mean: d3.mean(clean, sgv) - , median: d3.median(clean, sgv) - }; - } ) - .entries(data); - ; - return days; -} - -function ranger (dom, opts) { - var scales = { x: { }, y: { } }; - var dimensions = {height: null, width: null }; - var margin = {top: 20, right: 50, bottom: 20, left: 50}; - var xAxis, yAxis; - var dom_width, dom_height; - var width, height; - var root = { }; - var dots = { }; - var chart = { }; - - function my ( ) { - // dots = chart.selectAll('circle') - // dots.enter( ) - // .append("circle") - // console.log('data', my.data); - var selection = dots.selectAll('.dots').data(my.data || [ ]); - // console.log('dots', dots, selection); - selection.enter( ).append('circle').attr('class', 'dots'); - selection.exit( ).remove( ); - selection.call(render_circles) - // .exit( ).remove( ); - } - - function make_x_axis ( ) { - return d3.svg.axis( ) - .scale(scales.x) - ; - } - - function make_y_axis ( ) { - return d3.svg.axis() - .scale(scales.y) - ; - } - - function gridlines (selection) { - selection.selectAll('.x.gridlines') - // .attr("transform", "translate(0," + height + ")") - .attr("transform", "translate(" + margin.left + "," + height + ")") - // .attr("transform", "translate(" + margin.left + ", " + (margin.top) + ")") - .call(make_x_axis( ) - .tickSize(-height, 0, 0) - .tickFormat("") - ) - - selection.selectAll('.y.gridlines') - .attr("transform", "translate(" + margin.left + ", " + (margin.top) + ")") - .call(make_y_axis( ) - .tickSize(-width , 0, 0) - .tickValues([40, 80, 120, 180, 240, 300, 400]) - .tickFormat("") - .orient("left") - // .ticks(6) - ) - - } - function render_circles (dots) { - dots - .transition( ) - .attr("r", 5) - .attr("title", function (d) { return d.key; }) - .attr("fill", function (d) { return d.values.color; }) - .attr("cx", function (d) { return scales.x(d.values.target); }) - .attr("cy", function (d) { return scales.y(d.values.mean); }) - return dots; - } - - function render (selection) { - console.log('selection'); - } - - my.setRange = function _setRange (begin, end) { - adjuster(begin, end); - } - - function adjust_range (begin, end) { - my.page.refresh(begin, end); - } - - var adjuster = _.debounce(adjust_range, 1000); - - function on_data (payload) { - var days = time_in_range(payload, opts); - my.data = days; - if (dots && dots.selectAll) { - my( ); - } - // console.log('got days', days); - } - - function init ( ) { - my.page = pager({begin: opts.begin, end: opts.end, callback: on_data, cache: opts.cache}); - get_dimensions( ); - - scales.x = d3.scale.linear( ) - .domain([0, 100]) - .range([0, width]) - ; - - scales.y = d3.scale.log( ) - .domain( [40, 400] ) - .rangeRound( [height - (margin.top + margin.bottom), 1] ) - .base(12) - ; - - - // Axis - xAxis = make_x_axis( ) - .ticks(10) - .tickFormat(function(d) { return parseInt(d, 10) + "%"; }) - .orient('bottom') - ; - - - yAxis = make_y_axis( ) - .tickValues([40, 60, 70, 80, 120, 160, 180, 200, 220, 260, 300, 350, 400]) - .tickFormat(d3.format("d")) - .tickSize(6, 3, 1) - .orient('left') - ; - - root = d3.select(dom.get(0)).append('svg') - .attr('class', 'ranger') - .attr('height', dom_height) - .attr('width', dom_width) - ; - - chart = root.append('g') - .attr("transform", "translate(" + 0 + ", " + (margin.top) + ")") - .attr('class', 'ranger-chart') - ; - - chart.append('g').attr('class', 'x gridlines') - .attr("transform", "translate(" + margin.left + ", " + (margin.top) + ")") - ; - chart.append('g').attr('class', 'y gridlines') - .attr("transform", "translate(" + margin.left + ", " + (margin.top) + ")") - ; - dots = chart.append("g") - .attr("transform", "translate(" + margin.left + ", " + (margin.top) + ")") - .attr("class", "scatter") - ; - chart.append("g") - .attr("transform", "translate(" + margin.left + ", " + (height - margin.top) + ")") - .attr("class", "x axis") - .call(xAxis) - ; - chart.append("g") - .attr("transform", "translate(" + margin.left + ", " + (margin.top) + ")") - // .attr("transform", "translate(" + dom_width + ", " + (0) + ")") - .attr("class", "y axis") - .call(yAxis) - ; - // dots = chart.selectAll(".dot"); - $(window).on('resize', resize); - adjust_frames( ); - return my; - } - - function resize (ev) { - adjust_frames(ev); - my( ); - } - function adjust_frames (ev) { - get_dimensions( ); - root - .attr('class', 'ranger') - .attr('height', dom_height) - .attr('width', dom_width) - ; - chart - .attr("transform", "translate(" + 0 + ", " + (margin.top) + ")") - .attr('class', 'ranger-chart') - ; - scales.x - // .range([0, width]) - .range([0, width]) - ; - scales.y - .rangeRound( [height - (margin.top + margin.bottom), 1] ) - ; - - chart.selectAll('.x.axis').call(xAxis); - chart.selectAll('.y.axis').call(yAxis); - chart.call(gridlines) - - } - - function get_dimensions( ) { - dom_width = dom.width( ); - margin = {top: 20, right: 50, bottom: 20, left: 50}; - width = dom_width - margin.left - margin.right; - dom_height = dom.height( ) - margin.top; - height = dom_height - margin.top - margin.bottom; - } - - return init( ); -} diff --git a/swagger.json b/swagger.json new file mode 100644 index 00000000000..28ca65fc6d9 --- /dev/null +++ b/swagger.json @@ -0,0 +1,952 @@ +{ + "openapi": "3.0.0", + "servers": [ + { + "url": "/api/v1" + } + ], + "info": { + "title": "Nightscout API", + "description": "Own your DData with the Nightscout API", + "version": "0.10.3-master-20180805", + "license": { + "name": "AGPL 3", + "url": "https://www.gnu.org/licenses/agpl.txt" + } + }, + "security": [ + { + "api_secret": [], + "token_in_url": [], + "jwtoken": [] + } + ], + "paths": { + "/entries/{spec}": { + "get": { + "summary": "All Entries matching query", + "description": "The Entries endpoint returns information about the\nNightscout entries.\n", + "parameters": [ + { + "name": "spec", + "in": "path", + "description": "entry id, such as `55cf81bc436037528ec75fa5` or a type filter such\nas `sgv`, `mbg`, etc.\n", + "required": true, + "schema": { + "type": "string", + "default": "sgv" + } + }, + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for\nexample `find[dateString][$gte]=2015-08-27`. All find parameters\nare interpreted as strings.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "tags": [ + "Entries" + ], + "responses": { + "200": { + "description": "An array of entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + } + } + }, + "default": { + "description": "Entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + } + } + } + } + } + }, + "/slice/{storage}/{field}/{type}/{prefix}/{regex}": { + "get": { + "summary": "All Entries matching query", + "description": "The Entries endpoint returns information about the Nightscout entries.", + "parameters": [ + { + "name": "storage", + "in": "path", + "description": "Prefix to use in constructing a prefix-based regex, default is `entries`.", + "required": true, + "schema": { + "type": "string", + "default": "entries" + } + }, + { + "name": "field", + "in": "path", + "description": "Name of the field to use Regex against in query object, default is `dateString`.", + "required": true, + "schema": { + "type": "string", + "default": "dateString" + } + }, + { + "name": "type", + "in": "path", + "description": "The type field to search against, default is sgv.", + "required": true, + "schema": { + "type": "string", + "default": "sgv" + } + }, + { + "name": "prefix", + "in": "path", + "description": "Prefix to use in constructing a prefix-based regex.", + "required": true, + "schema": { + "type": "string", + "default": "2015" + } + }, + { + "name": "regex", + "in": "path", + "description": "Tail part of regexp to use in expanding/construccting a query object.\nRegexp also has bash-style brace and glob expansion applied to it,\ncreating ways to search for modal times of day, perhaps using\nsomething like this syntax: `T{15..17}:.*`, this would search for\nall records from 3pm to 5pm.\n", + "required": true, + "schema": { + "type": "string", + "default": ".*" + } + }, + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for\nexample `find[dateString][$gte]=2015-08-27`. All find parameters\nare interpreted as strings.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "tags": [ + "Entries" + ], + "responses": { + "200": { + "description": "An array of entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/echo/{storage}/{spec}": { + "get": { + "summary": "View generated Mongo Query object", + "description": "Information about the mongo query object created by the query.\n", + "parameters": [ + { + "name": "storage", + "in": "path", + "description": "`entries`, or `treatments` to select the storage layer.\n", + "required": true, + "schema": { + "type": "string", + "default": "sgv" + } + }, + { + "name": "spec", + "in": "path", + "description": "entry id, such as `55cf81bc436037528ec75fa5` or a type filter such\nas `sgv`, `mbg`, etc.\nThis parameter is optional.\n", + "required": true, + "schema": { + "type": "string", + "default": "sgv" + } + }, + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for\nexample `find[dateString][$gte]=2015-08-27`. All find parameters\nare interpreted as strings.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "tags": [ + "Entries", + "Debug" + ], + "responses": { + "200": { + "description": "An array of entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MongoQuery" + } + } + } + } + } + } + }, + "/times/echo/{prefix}/{regex}": { + "get": { + "summary": "Echo the query object to be used.", + "description": "Echo debug information about the query object constructed.", + "parameters": [ + { + "name": "prefix", + "in": "path", + "description": "Prefix to use in constructing a prefix-based regex.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "regex", + "in": "path", + "description": "Tail part of regexp to use in expanding/construccting a query object.\nRegexp also has bash-style brace and glob expansion applied to it,\ncreating ways to search for modal times of day, perhaps using\nsomething like this syntax: `T{15..17}:.*`, this would search for\nall records from 3pm to 5pm.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "tags": [ + "Entries", + "Debug" + ], + "responses": { + "200": { + "description": "An array of entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MongoQuery" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/times/{prefix}/{regex}": { + "get": { + "summary": "All Entries matching query", + "description": "The Entries endpoint returns information about the Nightscout entries.", + "parameters": [ + { + "name": "prefix", + "in": "path", + "description": "Prefix to use in constructing a prefix-based regex.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "regex", + "in": "path", + "description": "Tail part of regexp to use in expanding/construccting a query object.\nRegexp also has bash-style brace and glob expansion applied to it,\ncreating ways to search for modal times of day, perhaps using\nsomething like this syntax: `T{15..17}:.*`, this would search for\nall records from 3pm to 5pm.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "tags": [ + "Entries" + ], + "responses": { + "200": { + "description": "An array of entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/entries": { + "get": { + "summary": "All Entries matching query", + "description": "The Entries endpoint returns information about the Nightscout entries.", + "parameters": [ + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "tags": [ + "Entries" + ], + "responses": { + "200": { + "description": "An array of entries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + }, + "post": { + "tags": [ + "Entries" + ], + "summary": "Add new entries.", + "description": "", + "operationId": "addEntries", + "responses": { + "200": { + "description": "Rejected list of entries. Empty list is success." + }, + "405": { + "description": "Invalid input" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Entries" + } + } + }, + "description": "Entries to be uploaded.", + "required": true + } + }, + "delete": { + "tags": [ + "Entries" + ], + "summary": "Delete entries matching query.", + "description": "Remove entries, same search syntax as GET.", + "operationId": "remove", + "parameters": [ + { + "name": "find", + "in": "query", + "description": "The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Empty list is success." + } + } + } + }, + "/treatments": { + "get": { + "summary": "Treatments", + "description": "The Treatments endpoint returns information about the Nightscout treatments.", + "tags": [ + "Treatments" + ], + "parameters": [ + { + "name": "find", + "in": "query", + "description": "The query used to find entries, supports nested query syntax. Examples `find[insulin][$gte]=3` `find[carb][$gte]=100` `find[eventType]=Correction+Bolus` All find parameters are interpreted as strings.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "count", + "in": "query", + "description": "Number of entries to return.", + "required": false, + "schema": { + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "An array of treatments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Treatments" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + }, + "post": { + "tags": [ + "Treatments" + ], + "summary": "Add new treatments.", + "description": "", + "operationId": "addTreatments", + "responses": { + "200": { + "description": "Rejected list of treatments. Empty list is success." + }, + "405": { + "description": "Invalid input" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Treatments" + } + } + }, + "description": "Treatments to be uploaded.", + "required": true + } + } + }, + "/profile": { + "get": { + "summary": "Profile", + "description": "The Profile endpoint returns information about the Nightscout Treatment Profiles.", + "tags": [ + "Profile" + ], + "responses": { + "200": { + "description": "An array of treatments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Profile" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/status": { + "get": { + "summary": "Status", + "description": "Server side status, default settings and capabilities.", + "tags": [ + "Status" + ], + "responses": { + "200": { + "description": "Server capabilities and status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Status" + } + } + } + }, + "default": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "api_secret": { + "type": "apiKey", + "name": "api_secret", + "in": "header", + "description": "The hash of the API_SECRET env var" + }, + "token_in_url": { + "type": "apiKey", + "name": "token", + "in": "query", + "description": "Add token as query item in the URL. You can manage access Token in `/admin`. This uses json webtokens." + }, + "jwtoken": { + "type": "http", + "scheme": "bearer", + "description": "Use this if you know the temporary json webtoken.", + "bearerFormat": "JWT" + } + }, + "schemas": { + "Entry": { + "properties": { + "type": { + "type": "string", + "description": "sgv, mbg, cal, etc" + }, + "dateString": { + "type": "string", + "description": "dateString, prefer ISO `8601`" + }, + "date": { + "type": "number", + "description": "Epoch" + }, + "sgv": { + "type": "number", + "description": "The glucose reading. (only available for sgv types)" + }, + "direction": { + "type": "string", + "description": "Direction of glucose trend reported by CGM. (only available for sgv types)" + }, + "noise": { + "type": "number", + "description": "Noise level at time of reading. (only available for sgv types)" + }, + "filtered": { + "type": "number", + "description": "The raw filtered value directly from CGM transmitter. (only available for sgv types)" + }, + "unfiltered": { + "type": "number", + "description": "The raw unfiltered value directly from CGM transmitter. (only available for sgv types)" + }, + "rssi": { + "type": "number", + "description": "The signal strength from CGM transmitter. (only available for sgv types)" + } + } + }, + "Entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Entry" + } + }, + "Treatment": { + "properties": { + "_id": { + "type": "string", + "description": "Internally assigned id." + }, + "eventType": { + "type": "string", + "description": "The type of treatment event." + }, + "created_at": { + "type": "string", + "description": "The date of the event, might be set retroactively ." + }, + "glucose": { + "type": "string", + "description": "Current glucose." + }, + "glucoseType": { + "type": "string", + "description": "Method used to obtain glucose, Finger or Sensor." + }, + "carbs": { + "type": "number", + "description": "Number of carbs." + }, + "insulin": { + "type": "number", + "description": "Amount of insulin, if any." + }, + "units": { + "type": "string", + "description": "The units for the glucose value, mg/dl or mmol." + }, + "notes": { + "type": "string", + "description": "Description/notes of treatment." + }, + "enteredBy": { + "type": "string", + "description": "Who entered the treatment." + } + } + }, + "Treatments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Treatment" + } + }, + "Profile": { + "properties": { + "sens": { + "type": "integer", + "description": "Internally assigned id" + }, + "dia": { + "type": "integer", + "description": "Internally assigned id" + }, + "carbratio": { + "type": "integer", + "description": "Internally assigned id" + }, + "carbs_hr": { + "type": "integer", + "description": "Internally assigned id" + }, + "_id": { + "type": "string", + "description": "Internally assigned id" + } + } + }, + "Status": { + "properties": { + "apiEnabled": { + "type": "boolean", + "description": "Whether or not the REST API is enabled." + }, + "careportalEnabled": { + "type": "boolean", + "description": "Whether or not the careportal is enabled in the API." + }, + "head": { + "type": "string", + "description": "The git identifier for the running instance of the app." + }, + "name": { + "type": "string", + "description": "Nightscout (static)" + }, + "version": { + "type": "string", + "description": "The version label of the app." + }, + "settings": { + "$ref": "#/components/schemas/Settings" + }, + "extendedSettings": { + "$ref": "#/components/schemas/ExtendedSettings" + } + } + }, + "Settings": { + "properties": { + "units": { + "type": "string", + "description": "Default units for glucose measurements across the server." + }, + "timeFormat": { + "type": "string", + "description": "Default time format", + "enum": [ + 12, + 24 + ] + }, + "customTitle": { + "type": "string", + "description": "Default custom title to be displayed system wide." + }, + "nightMode": { + "type": "boolean", + "description": "Should Night mode be enabled by default?" + }, + "theme": { + "type": "string", + "description": "Default theme to be displayed system wide, `default`, `colors`, `colorblindfriendly`." + }, + "language": { + "type": "string", + "description": "Default language code to be used system wide" + }, + "showPlugins": { + "type": "string", + "description": "Plugins that should be shown by default" + }, + "showRawbg": { + "type": "string", + "description": "If Raw BG is enabled when should it be shown? `never`, `always`, `noise`" + }, + "alarmTypes": { + "type": "array", + "items": { + "type": "string" + }, + "enum": [ + "simple", + "predict" + ], + "description": "Enabled alarm types, can be multiple" + }, + "alarmUrgentHigh": { + "type": "boolean", + "description": "Enable/Disable client-side Urgent High alarms by default, for use with `simple` alarms." + }, + "alarmHigh": { + "type": "boolean", + "description": "Enable/Disable client-side High alarms by default, for use with `simple` alarms." + }, + "alarmLow": { + "type": "boolean", + "description": "Enable/Disable client-side Low alarms by default, for use with `simple` alarms." + }, + "alarmUrgentLow": { + "type": "boolean", + "description": "Enable/Disable client-side Urgent Low alarms by default, for use with `simple` alarms." + }, + "alarmTimeagoWarn": { + "type": "boolean", + "description": "Enable/Disable client-side stale data alarms by default." + }, + "alarmTimeagoWarnMins": { + "type": "number", + "description": "Number of minutes before a stale data warning is generated." + }, + "alarmTimeagoUrgent": { + "type": "boolean", + "description": "Enable/Disable client-side urgent stale data alarms by default." + }, + "alarmTimeagoUrgentMins": { + "type": "number", + "description": "Number of minutes before a stale data warning is generated." + }, + "enable": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Enabled features" + }, + "thresholds": { + "$ref": "#/components/schemas/Threshold" + } + } + }, + "Threshold": { + "properties": { + "bg_high": { + "type": "integer", + "description": "High BG range." + }, + "bg_target_top": { + "type": "integer", + "description": "Top of target range." + }, + "bg_target_bottom": { + "type": "integer", + "description": "Bottom of target range." + }, + "bg_low": { + "type": "integer", + "description": "Low BG range." + } + } + }, + "ExtendedSettings": { + "description": "Extended settings of client side plugins" + }, + "MongoQuery": { + "description": "Mongo Query object." + }, + "Error": { + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "fields": { + "type": "object" + } + } + } + } + } +} \ No newline at end of file diff --git a/swagger.yaml b/swagger.yaml index ce9204ceed9..ac39b12f695 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -1,36 +1,34 @@ -swagger: '2.0' +openapi: 3.0.0 +servers: + - url: /api/v1 info: title: Nightscout API description: Own your DData with the Nightscout API - version: "0.8.0" + version: 0.10.3-master-20180805 license: name: AGPL 3 - url: https://www.gnu.org/licenses/agpl.txt -basePath: /api/v1 -produces: - - application/json + url: 'https://www.gnu.org/licenses/agpl.txt' security: - api_secret: [] - + token_in_url: [] + jwtoken: [] paths: - - /entries/{spec}: + '/entries/{spec}': get: summary: All Entries matching query description: | The Entries endpoint returns information about the Nightscout entries. - parameters: - name: spec in: path - type: string description: | - entry id, such as `55cf81bc436037528ec75fa5` or a type filter such - as `sgv`, `mbg`, etc. - - default: sgv + entry id, such as `55cf81bc436037528ec75fa5` or a type filter such + as `sgv`, `mbg`, etc. required: true + schema: + type: string + default: sgv - name: find in: query description: | @@ -38,64 +36,83 @@ paths: example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number tags: - Entries responses: - "200": + '200': description: An array of entries - schema: - $ref: '#/definitions/Entries' + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' default: description: Entries - schema: - $ref: '#/definitions/Entries' - - /slice/{storage}/{field}/{type}/{prefix}/{regex}: + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' + '/slice/{storage}/{field}/{type}/{prefix}/{regex}': get: summary: All Entries matching query description: The Entries endpoint returns information about the Nightscout entries. parameters: - name: storage in: path - type: string - description: Prefix to use in constructing a prefix-based regex, default is `entries`. + description: >- + Prefix to use in constructing a prefix-based regex, default is + `entries`. required: true - default: entries + schema: + type: string + default: entries - name: field in: path - type: string - description: Name of the field to use Regex against in query object, default is `dateString`. - default: dateString + description: >- + Name of the field to use Regex against in query object, default is + `dateString`. required: true + schema: + type: string + default: dateString - name: type in: path - type: string - description: The type field to search against, default is sgv. + description: 'The type field to search against, default is sgv.' required: true - default: sgv + schema: + type: string + default: sgv - name: prefix in: path - type: string description: Prefix to use in constructing a prefix-based regex. required: true - default: '2015' + schema: + type: string + default: '2015' - name: regex in: path - type: string - description: | - Tail part of regexp to use in expanding/construccting a query object. + description: > + Tail part of regexp to use in expanding/construccting a query + object. + Regexp also has bash-style brace and glob expansion applied to it, + creating ways to search for modal times of day, perhaps using + something like this syntax: `T{15..17}:.*`, this would search for + all records from 3pm to 5pm. required: true - default: .* + schema: + type: string + default: .* - name: find in: query description: | @@ -103,49 +120,53 @@ paths: example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number tags: - Entries responses: - "200": + '200': description: An array of entries - schema: - $ref: '#/definitions/Entries' + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - - /echo/{storage}/{spec}: + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '/echo/{storage}/{spec}': get: summary: View generated Mongo Query object description: | Information about the mongo query object created by the query. - parameters: - name: storage in: path - type: string description: | - `entries`, or `treatments` to select the storage layer. - - default: sgv + `entries`, or `treatments` to select the storage layer. required: true + schema: + type: string + default: sgv - name: spec in: path - type: string description: | - entry id, such as `55cf81bc436037528ec75fa5` or a type filter such - as `sgv`, `mbg`, etc. - This parameter is optional. - - default: sgv + entry id, such as `55cf81bc436037528ec75fa5` or a type filter such + as `sgv`, `mbg`, etc. + This parameter is optional. required: true + schema: + type: string + default: sgv - name: find in: query description: | @@ -153,108 +174,139 @@ paths: example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number tags: - Entries - Debug responses: - "200": + '200': description: An array of entries - schema: - $ref: '#/definitions/MongoQuery' - - /times/echo/{prefix}/{regex}: + content: + application/json: + schema: + $ref: '#/components/schemas/MongoQuery' + '/times/echo/{prefix}/{regex}': get: summary: Echo the query object to be used. description: Echo debug information about the query object constructed. parameters: - name: prefix in: path - type: string description: Prefix to use in constructing a prefix-based regex. required: true + schema: + type: string - name: regex in: path - type: string - description: | - Tail part of regexp to use in expanding/construccting a query object. + description: > + Tail part of regexp to use in expanding/construccting a query + object. + Regexp also has bash-style brace and glob expansion applied to it, + creating ways to search for modal times of day, perhaps using + something like this syntax: `T{15..17}:.*`, this would search for + all records from 3pm to 5pm. required: true + schema: + type: string - name: find in: query - description: The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. + description: >- + The query used to find entries, support nested query syntax, for + example `find[dateString][$gte]=2015-08-27`. All find parameters + are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number tags: - Entries - Debug responses: - "200": + '200': description: An array of entries - schema: - $ref: '#/definitions/MongoQuery' + content: + application/json: + schema: + $ref: '#/components/schemas/MongoQuery' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - - - /times/{prefix}/{regex}: + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '/times/{prefix}/{regex}': get: summary: All Entries matching query description: The Entries endpoint returns information about the Nightscout entries. parameters: - name: prefix in: path - type: string description: Prefix to use in constructing a prefix-based regex. required: true + schema: + type: string - name: regex in: path - type: string - description: | - Tail part of regexp to use in expanding/construccting a query object. + description: > + Tail part of regexp to use in expanding/construccting a query + object. + Regexp also has bash-style brace and glob expansion applied to it, + creating ways to search for modal times of day, perhaps using + something like this syntax: `T{15..17}:.*`, this would search for + all records from 3pm to 5pm. required: true + schema: + type: string - name: find in: query - description: The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. + description: >- + The query used to find entries, support nested query syntax, for + example `find[dateString][$gte]=2015-08-27`. All find parameters + are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number tags: - Entries responses: - "200": + '200': description: An array of entries - schema: - $ref: '#/definitions/Entries' + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - - + content: + application/json: + schema: + $ref: '#/components/schemas/Error' /entries: get: summary: All Entries matching query @@ -262,376 +314,413 @@ paths: parameters: - name: find in: query - description: The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. + description: >- + The query used to find entries, support nested query syntax, for + example `find[dateString][$gte]=2015-08-27`. All find parameters + are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number tags: - Entries responses: - "200": + '200': description: An array of entries - schema: - $ref: '#/definitions/Entries' + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - + content: + application/json: + schema: + $ref: '#/components/schemas/Error' post: tags: - Entries summary: Add new entries. - description: "" + description: '' operationId: addEntries - consumes: - - application/json - - text/plain - produces: - - application/json - - text/plain - parameters: - - in: body - name: body - description: Entries to be uploaded. - required: true - schema: - $ref: "#/definitions/Entries" responses: - "405": - description: Invalid input - "200": + '200': description: Rejected list of entries. Empty list is success. + '405': + description: Invalid input + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Entries' + text/plain: + schema: + $ref: '#/components/schemas/Entries' + description: Entries to be uploaded. + required: true delete: tags: - Entries summary: Delete entries matching query. - description: "Remove entries, same search syntax as GET." + description: 'Remove entries, same search syntax as GET.' operationId: remove parameters: - name: find in: query - description: The query used to find entries, support nested query syntax, for example `find[dateString][$gte]=2015-08-27`. All find parameters are interpreted as strings. + description: >- + The query used to find entries, support nested query syntax, for + example `find[dateString][$gte]=2015-08-27`. All find parameters + are interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number responses: - "200": + '200': description: Empty list is success. - /treatments: get: summary: Treatments - description: The Treatments endpoint returns information about the Nightscout treatments. + description: >- + The Treatments endpoint returns information about the Nightscout + treatments. tags: - Treatments parameters: - name: find in: query - description: - The query used to find entries, supports nested query syntax. Examples - `find[insulin][$gte]=3` - `find[carb][$gte]=100` - `find[eventType]=Correction+Bolus` - All find parameters are interpreted as strings. + description: >- + The query used to find entries, supports nested query syntax. + Examples `find[insulin][$gte]=3` `find[carb][$gte]=100` + `find[eventType]=Correction+Bolus` All find parameters are + interpreted as strings. required: false - type: string + schema: + type: string - name: count in: query description: Number of entries to return. required: false - type: number + schema: + type: number responses: - "200": + '200': description: An array of treatments - schema: - $ref: '#/definitions/Treatments' + content: + application/json: + schema: + $ref: '#/components/schemas/Treatments' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - post: - tags: - - Treatments - summary: Add new treatments. - description: "" - operationId: addTreatments - consumes: - - application/json - produces: - - application/json - parameters: - - in: body - name: body - description: Treatments to be uploaded. - required: true + content: + application/json: schema: - $ref: "#/definitions/Treatments" - responses: - "405": - description: Invalid input - "200": - description: Rejected list of treatments. Empty list is success. - + $ref: '#/components/schemas/Error' + post: + tags: + - Treatments + summary: Add new treatments. + description: '' + operationId: addTreatments + responses: + '200': + description: Rejected list of treatments. Empty list is success. + '405': + description: Invalid input + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Treatments' + description: Treatments to be uploaded. + required: true /profile: get: summary: Profile - description: The Profile endpoint returns information about the Nightscout Treatment Profiles. + description: >- + The Profile endpoint returns information about the Nightscout Treatment + Profiles. tags: - Profile responses: - "200": + '200': description: An array of treatments - schema: - $ref: '#/definitions/Profile' + content: + application/json: + schema: + $ref: '#/components/schemas/Profile' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - + content: + application/json: + schema: + $ref: '#/components/schemas/Error' /status: get: summary: Status - description: Server side status, default settings and capabilities. + description: 'Server side status, default settings and capabilities.' tags: - Status responses: - "200": + '200': description: Server capabilities and status. - schema: - $ref: '#/definitions/Status' + content: + application/json: + schema: + $ref: '#/components/schemas/Status' default: description: Unexpected error - schema: - $ref: '#/definitions/Error' - -securityDefinitions: - api_secret: - type: apiKey - name: api_secret - in: header - description: The hash of the API_SECRET env var - -definitions: - Entry: - properties: - type: - type: string - description: "sgv, mbg, cal, etc" - dateString: - type: string - description: dateString, prefer ISO `8601` - date: - type: number - description: Epoch - sgv: - type: number - description: The glucose reading. (only available for sgv types) - direction: - type: string - description: Direction of glucose trend reported by CGM. (only available for sgv types) - noise: - type: number - description: Noise level at time of reading. (only available for sgv types) - filtered: - type: number - description: The raw filtered value directly from CGM transmitter. (only available for sgv types) - unfiltered: - type: number - description: The raw unfiltered value directly from CGM transmitter. (only available for sgv types) - rssi: - type: number - description: The signal strength from CGM transmitter. (only available for sgv types) - - Entries: - type: array - items: - $ref: '#/definitions/Entry' - - Treatment: - properties: - _id: - type: string - description: Internally assigned id. - eventType: - type: string - description: The type of treatment event. - created_at: - type: string - description: The date of the event, might be set retroactively . - glucose: - type: string - description: Current glucose. - glucoseType: - type: string - description: Method used to obtain glucose, Finger or Sensor. - carbs: - type: number - description: Number of carbs. - insulin: - type: number - description: Amount of insulin, if any. - units: - type: string - description: The units for the glucose value, mg/dl or mmol. - notes: - type: string - description: Description/notes of treatment. - enteredBy: - type: string - description: Who entered the treatment. - - Treatments: - type: array - items: - $ref: '#/definitions/Treatment' - - Profile: - properties: - sens: - type: integer - description: 'Internally assigned id' - dia: - type: integer - description: 'Internally assigned id' - carbratio: - type: integer - description: 'Internally assigned id' - carbs_hr: - type: integer - description: 'Internally assigned id' - _id: - type: string - description: 'Internally assigned id' - - Status: - properties: - apiEnabled: - type: boolean - description: 'Whether or not the REST API is enabled.' - careportalEnabled: - type: boolean - description: 'Whether or not the careportal is enabled in the API.' - head: - type: string - description: 'The git identifier for the running instance of the app.' - name: - type: string - description: Nightscout (static) - version: - type: string - description: 'The version label of the app.' - settings: - $ref: '#/definitions/Settings' - extendedSettings: - $ref: '#/definitions/ExtendedSettings' - - Settings: - properties: - units: - type: string - description: Default units for glucose measurements across the server. - timeFormat: - type: string - description: Default time format - enum: - - 12 - - 24 - customTitle: - type: string - description: Default custom title to be displayed system wide. - nightMode: - type: boolean - description: Should Night mode be enabled by default? - theme: - type: string - description: Default theme to be displayed system wide, `default`, `colors`, `colorblindfriendly`. - language: - type: string - description: Default language code to be used system wide - showPlugins: - type: string - description: Plugins that should be shown by default - showRawbg: - type: string - description: If Raw BG is enabled when should it be shown? `never`, `always`, `noise` - alarmTypes: - type: array - items: + content: + application/json: + schema: + $ref: '#/components/schemas/Error' +components: + securitySchemes: + api_secret: + type: apiKey + name: api_secret + in: header + description: The hash of the API_SECRET env var + token_in_url: + type: apiKey + name: token + in: query + description: Add token as query item in the URL. You can manage access Token in `/admin`. This uses json webtokens. + jwtoken: + type: http + scheme: bearer + description: Use this if you know the temporary json webtoken. + bearerFormat: JWT + schemas: + Entry: + properties: + type: type: string - enum: - - simple - - predict - description: Enabled alarm types, can be multiple - alarmUrgentHigh: - type: boolean - description: Enable/Disable client-side Urgent High alarms by default, for use with `simple` alarms. - alarmHigh: - type: boolean - description: Enable/Disable client-side High alarms by default, for use with `simple` alarms. - alarmLow: - type: boolean - description: Enable/Disable client-side Low alarms by default, for use with `simple` alarms. - alarmUrgentLow: - type: boolean - description: Enable/Disable client-side Urgent Low alarms by default, for use with `simple` alarms. - alarmTimeagoWarn: - type: boolean - description: Enable/Disable client-side stale data alarms by default. - alarmTimeagoWarnMins: - type: number - description: Number of minutes before a stale data warning is generated. - alarmTimeagoUrgent: - type: boolean - description: Enable/Disable client-side urgent stale data alarms by default. - alarmTimeagoUrgentMins: - type: number - description: Number of minutes before a stale data warning is generated. - enable: - type: array - items: + description: 'sgv, mbg, cal, etc' + dateString: type: string - description: Enabled features - thresholds: - $ref: '#/definitions/Threshold' - - Threshold: - properties: - bg_high: - type: integer - description: 'High BG range.' - bg_target_top: - type: integer - description: 'Top of target range.' - bg_target_bottom: - type: integer - description: 'Bottom of target range.' - bg_low: - type: integer - description: 'Low BG range.' - - ExtendedSettings: - description: Extended settings of client side plugins - - MongoQuery: - description: Mongo Query object. - - - Error: - properties: - code: - type: integer - format: int32 - message: - type: string - fields: - type: object - + description: 'dateString, prefer ISO `8601`' + date: + type: number + description: Epoch + sgv: + type: number + description: The glucose reading. (only available for sgv types) + direction: + type: string + description: >- + Direction of glucose trend reported by CGM. (only available for sgv + types) + noise: + type: number + description: Noise level at time of reading. (only available for sgv types) + filtered: + type: number + description: >- + The raw filtered value directly from CGM transmitter. (only + available for sgv types) + unfiltered: + type: number + description: >- + The raw unfiltered value directly from CGM transmitter. (only + available for sgv types) + rssi: + type: number + description: >- + The signal strength from CGM transmitter. (only available for sgv + types) + Entries: + type: array + items: + $ref: '#/components/schemas/Entry' + Treatment: + properties: + _id: + type: string + description: Internally assigned id. + eventType: + type: string + description: The type of treatment event. + created_at: + type: string + description: 'The date of the event, might be set retroactively .' + glucose: + type: string + description: Current glucose. + glucoseType: + type: string + description: 'Method used to obtain glucose, Finger or Sensor.' + carbs: + type: number + description: Number of carbs. + insulin: + type: number + description: 'Amount of insulin, if any.' + units: + type: string + description: 'The units for the glucose value, mg/dl or mmol.' + notes: + type: string + description: Description/notes of treatment. + enteredBy: + type: string + description: Who entered the treatment. + Treatments: + type: array + items: + $ref: '#/components/schemas/Treatment' + Profile: + properties: + sens: + type: integer + description: Internally assigned id + dia: + type: integer + description: Internally assigned id + carbratio: + type: integer + description: Internally assigned id + carbs_hr: + type: integer + description: Internally assigned id + _id: + type: string + description: Internally assigned id + Status: + properties: + apiEnabled: + type: boolean + description: Whether or not the REST API is enabled. + careportalEnabled: + type: boolean + description: Whether or not the careportal is enabled in the API. + head: + type: string + description: The git identifier for the running instance of the app. + name: + type: string + description: Nightscout (static) + version: + type: string + description: The version label of the app. + settings: + $ref: '#/components/schemas/Settings' + extendedSettings: + $ref: '#/components/schemas/ExtendedSettings' + Settings: + properties: + units: + type: string + description: Default units for glucose measurements across the server. + timeFormat: + type: string + description: Default time format + enum: + - 12 + - 24 + customTitle: + type: string + description: Default custom title to be displayed system wide. + nightMode: + type: boolean + description: Should Night mode be enabled by default? + theme: + type: string + description: >- + Default theme to be displayed system wide, `default`, `colors`, + `colorblindfriendly`. + language: + type: string + description: Default language code to be used system wide + showPlugins: + type: string + description: Plugins that should be shown by default + showRawbg: + type: string + description: >- + If Raw BG is enabled when should it be shown? `never`, `always`, + `noise` + alarmTypes: + type: array + items: + type: string + enum: + - simple + - predict + description: 'Enabled alarm types, can be multiple' + alarmUrgentHigh: + type: boolean + description: >- + Enable/Disable client-side Urgent High alarms by default, for use + with `simple` alarms. + alarmHigh: + type: boolean + description: >- + Enable/Disable client-side High alarms by default, for use with + `simple` alarms. + alarmLow: + type: boolean + description: >- + Enable/Disable client-side Low alarms by default, for use with + `simple` alarms. + alarmUrgentLow: + type: boolean + description: >- + Enable/Disable client-side Urgent Low alarms by default, for use + with `simple` alarms. + alarmTimeagoWarn: + type: boolean + description: Enable/Disable client-side stale data alarms by default. + alarmTimeagoWarnMins: + type: number + description: Number of minutes before a stale data warning is generated. + alarmTimeagoUrgent: + type: boolean + description: Enable/Disable client-side urgent stale data alarms by default. + alarmTimeagoUrgentMins: + type: number + description: Number of minutes before a stale data warning is generated. + enable: + type: array + items: + type: string + description: Enabled features + thresholds: + $ref: '#/components/schemas/Threshold' + Threshold: + properties: + bg_high: + type: integer + description: High BG range. + bg_target_top: + type: integer + description: Top of target range. + bg_target_bottom: + type: integer + description: Bottom of target range. + bg_low: + type: integer + description: Low BG range. + ExtendedSettings: + description: Extended settings of client side plugins + MongoQuery: + description: Mongo Query object. + Error: + properties: + code: + type: integer + format: int32 + message: + type: string + fields: + type: object \ No newline at end of file diff --git a/tests/admintools.test.js b/tests/admintools.test.js index f1851010bb1..b5be4858edb 100644 --- a/tests/admintools.test.js +++ b/tests/admintools.test.js @@ -67,7 +67,7 @@ describe('admintools', function ( ) { self.localCookieStorage = self.localStorage = self.$.localStorage = require('./fixtures/localstorage'); - self.$.fn.tipsy = function mockTipsy ( ) { }; + self.$.fn.tooltip = function mockTooltip ( ) { }; self.$.fn.dialog = function mockDialog (opts) { function maybeCall (name, obj) { diff --git a/tests/api.entries.test.js b/tests/api.entries.test.js index dd3e1eb2cec..eeb22a86e48 100644 --- a/tests/api.entries.test.js +++ b/tests/api.entries.test.js @@ -2,7 +2,7 @@ var request = require('supertest'); var load = require('./fixtures/load'); -var bootevent = require('../lib/bootevent'); +var bootevent = require('../lib/server/bootevent'); var language = require('../lib/language')(); require('should'); @@ -20,7 +20,7 @@ describe('Entries REST api', function ( ) { var self = this; bootevent(env, language).boot(function booted (ctx) { self.app.use('/', entries(self.app, self.wares, ctx)); - self.archive = require('../lib/entries')(env, ctx); + self.archive = require('../lib/server/entries')(env, ctx); var creating = load('json'); creating.push({type: 'sgv', sgv: 100, date: Date.now()}); @@ -68,6 +68,25 @@ describe('Entries REST api', function ( ) { }); }); + it('gets entries in right order', function (done) { + var defaultCount = 10; + request(this.app) + .get('/entries/sgv.json?find[dateString][$gte]=2014-07-19&find[dateString][$lte]=2014-07-20') + .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(this.app) .get('/echo/entries/sgv.json?find[dateString][$gte]=2014-07-19&find[dateString][$lte]=2014-07-20') diff --git a/tests/api.status.test.js b/tests/api.status.test.js index 1da9f793a98..51730a6f078 100644 --- a/tests/api.status.test.js +++ b/tests/api.status.test.js @@ -16,7 +16,7 @@ describe('Status REST api', function ( ) { this.app = require('express')( ); this.app.enable('api'); var self = this; - require('../lib/bootevent')(env, language).boot(function booted (ctx) { + require('../lib/server/bootevent')(env, language).boot(function booted (ctx) { self.app.use('/api', api(env, ctx)); done(); }); diff --git a/tests/api.treatments.test.js b/tests/api.treatments.test.js index 34600b66cb0..6d0d5deb933 100644 --- a/tests/api.treatments.test.js +++ b/tests/api.treatments.test.js @@ -18,7 +18,7 @@ describe('Treatment API', function ( ) { this.wares = require('../lib/middleware/')(self.env); self.app = require('express')(); self.app.enable('api'); - require('../lib/bootevent')(self.env, language).boot(function booted(ctx) { + require('../lib/server/bootevent')(self.env, language).boot(function booted(ctx) { self.ctx = ctx; self.ctx.ddata = require('../lib/data/ddata')(); self.app.use('/api', api(self.env, ctx)); diff --git a/tests/api.unauthorized.test.js b/tests/api.unauthorized.test.js index 23ff9c165c0..8c804c4244f 100644 --- a/tests/api.unauthorized.test.js +++ b/tests/api.unauthorized.test.js @@ -20,9 +20,9 @@ describe('authed REST api', function ( ) { this.app.enable('api'); var self = this; self.known_key = known; - require('../lib/bootevent')(env, language).boot(function booted (ctx) { + require('../lib/server/bootevent')(env, language).boot(function booted (ctx) { self.app.use('/', entries(self.app, self.wares, ctx)); - self.archive = require('../lib/entries')(env, ctx); + self.archive = require('../lib/server/entries')(env, ctx); var creating = load('json'); // creating.push({type: 'sgv', sgv: 100, date: Date.now()}); diff --git a/tests/api.verifyauth.test.js b/tests/api.verifyauth.test.js index 6a7514a8349..a9fd681da7b 100644 --- a/tests/api.verifyauth.test.js +++ b/tests/api.verifyauth.test.js @@ -15,7 +15,7 @@ describe('Verifyauth REST api', function ( ) { this.wares = require('../lib/middleware/')(self.env); self.app = require('express')( ); self.app.enable('api'); - require('../lib/bootevent')(self.env, language).boot(function booted (ctx) { + require('../lib/server/bootevent')(self.env, language).boot(function booted (ctx) { self.app.use('/api', api(self.env, ctx)); done(); }); diff --git a/tests/ar2.test.js b/tests/ar2.test.js index 94c494869c9..9dbf6de14cd 100644 --- a/tests/ar2.test.js +++ b/tests/ar2.test.js @@ -13,6 +13,7 @@ describe('ar2', function ( ) { }; 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); diff --git a/tests/bgnow.test.js b/tests/bgnow.test.js index 233f1c13dbc..819f3dafbfc 100644 --- a/tests/bgnow.test.js +++ b/tests/bgnow.test.js @@ -10,6 +10,9 @@ describe('BG Now', function ( ) { var ctx = { language: require('../lib/language')() }; + + ctx.levels = require('../lib/levels'); + var bgnow = require('../lib/plugins/bgnow')(ctx); var sandbox = require('../lib/sandbox')(); @@ -29,6 +32,10 @@ describe('BG Now', function ( ) { , language: { translate: function(text) { return text; } } } }; + + ctx.language = ctx.pluginBase.language; + ctx.levels = require('../lib/levels'); + var data = {sgvs: [{mills: before, mgdl: 100}, {mills: now, mgdl: 105}]}; var sbx = sandbox.clientInit(ctx, Date.now(), data); diff --git a/tests/boluswizardpreview.test.js b/tests/boluswizardpreview.test.js index c290989237a..8f494c147b3 100644 --- a/tests/boluswizardpreview.test.js +++ b/tests/boluswizardpreview.test.js @@ -138,6 +138,9 @@ describe('boluswizardpreview', function ( ) { } , pluginBase: {} }; + + ctx.language = require('../lib/language')(); + var data = {sgvs: [{mills: before, mgdl: 100}, {mills: now, mgdl: 100}]}; data.treatments = [{mills: now, insulin: '1.0'}]; data.devicestatus = []; @@ -178,6 +181,9 @@ describe('boluswizardpreview', function ( ) { } , pluginBase: {} }; + + ctx.language = require('../lib/language')(); + var data = {sgvs: [{mills: before, mgdl: 175}, {mills: now, mgdl: 153}]}; data.treatments = [{mills: now, insulin: '0.45'}]; data.devicestatus = []; @@ -233,6 +239,7 @@ 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); @@ -278,7 +285,8 @@ describe('boluswizardpreview', function ( ) { } } }; - + + ctx.language = require('../lib/language')(); var loadedProfile = require('../lib/profilefunctions')(); loadedProfile.loadData([profile]); diff --git a/tests/cannulaage.test.js b/tests/cannulaage.test.js index 824952d068c..63cf417e5fa 100644 --- a/tests/cannulaage.test.js +++ b/tests/cannulaage.test.js @@ -40,6 +40,7 @@ describe('cage', function ( ) { } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); cage.setProperties(sbx); cage.updateVisualisation(sbx); @@ -65,7 +66,7 @@ describe('cage', function ( ) { } } }; - + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); cage.setProperties(sbx); cage.updateVisualisation(sbx); diff --git a/tests/cob.test.js b/tests/cob.test.js index 9f917cb4639..dbbecda0b67 100644 --- a/tests/cob.test.js +++ b/tests/cob.test.js @@ -8,6 +8,7 @@ describe('COB', function ( ) { var ctx = {}; ctx.settings = {}; ctx.language = require('../lib/language')(); + ctx.language.set('en'); var cob = require('../lib/plugins/cob')(ctx); diff --git a/tests/direction.test.js b/tests/direction.test.js index 9a119283745..8654415fdb1 100644 --- a/tests/direction.test.js +++ b/tests/direction.test.js @@ -12,6 +12,7 @@ describe('BG direction', function ( ) { , pluginBase: pluginBase || {} }; + ctx.language = require('../lib/language')(); var sandbox = require('../lib/sandbox')(); return sandbox.clientInit(ctx, Date.now(), data); diff --git a/tests/errorcodes.test.js b/tests/errorcodes.test.js index bdb09de7eba..cf6f5d5453a 100644 --- a/tests/errorcodes.test.js +++ b/tests/errorcodes.test.js @@ -11,6 +11,7 @@ describe('errorcodes', function ( ) { var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); + ctx.language = require('../lib/language')(); it('Not trigger an alarm when in range', function (done) { diff --git a/tests/fixtures/headless.js b/tests/fixtures/headless.js index 567262ad04d..8b59b7b5dba 100644 --- a/tests/fixtures/headless.js +++ b/tests/fixtures/headless.js @@ -24,7 +24,7 @@ function headless (benv, binding) { //self.$ = require('jquery'); //self.$.localStorage = require(localStorage); - self.$.fn.tipsy = function mockTipsy ( ) { }; + self.$.fn.tooltip = function mockTooltip ( ) { }; var indexHtml = read(htmlFile, 'utf8'); self.$('body').html(indexHtml); @@ -37,7 +37,7 @@ function headless (benv, binding) { self.$.plot = function mockPlot () { }; - self.$.fn.tipsy = function mockTipsy ( ) { }; + self.$.fn.tooltip = function mockTooltip ( ) { }; self.$.fn.dialog = function mockDialog (opts) { function maybeCall (name, obj) { diff --git a/tests/hashauth.test.js b/tests/hashauth.test.js index 19fb50cc69e..011ca689d10 100644 --- a/tests/hashauth.test.js +++ b/tests/hashauth.test.js @@ -6,7 +6,7 @@ var read = require('fs').readFileSync; var serverSettings = require('./fixtures/default-server-settings'); describe('hashauth', function ( ) { - this.timeout(40000); // TODO: see why this test takes longer on Travis to complete + this.timeout(50000); // TODO: see why this test takes longer on Travis to complete var self = this; var headless = require('./fixtures/headless')(benv, this); @@ -33,7 +33,7 @@ describe('hashauth', function ( ) { self.$ = require('jquery'); self.$.localStorage = require('./fixtures/localstorage'); - self.$.fn.tipsy = function mockTipsy ( ) { }; + self.$.fn.tooltip = function mockTooltip ( ) { }; var indexHtml = read(__dirname + '/../static/index.html', 'utf8'); self.$('body').html(indexHtml); diff --git a/tests/insulinage.test.js b/tests/insulinage.test.js index f01573ec09c..36ca7368c39 100644 --- a/tests/insulinage.test.js +++ b/tests/insulinage.test.js @@ -3,7 +3,7 @@ require('should'); var levels = require('../lib/levels'); -describe('cage', function ( ) { +describe('insulinage', function ( ) { var env = require('../env')(); var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); @@ -39,6 +39,7 @@ describe('cage', function ( ) { } } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); iage.setProperties(sbx); @@ -65,6 +66,7 @@ describe('cage', function ( ) { } } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); iage.setProperties(sbx); diff --git a/tests/loop.test.js b/tests/loop.test.js index dde15daf187..805f49040ab 100644 --- a/tests/loop.test.js +++ b/tests/loop.test.js @@ -7,6 +7,7 @@ var moment = require('moment'); var ctx = { language: require('../lib/language')() }; +ctx.language.set('en'); var env = require('../env')(); var loop = require('../lib/plugins/loop')(ctx); var sandbox = require('../lib/sandbox')(); @@ -121,10 +122,10 @@ describe('loop', function ( ) { options.value.should.equal('1m ago'); var first = _.first(options.info); first.label.should.equal('1m ago'); - first.value.should.equal('Temp Basal Started 0.88U/hour for 30m, IOB: 0.17U, Predicted Eventual BG: 147'); + first.value.should.equal('Temp Basal Started 0.88U/hour for 30m, IOB: 0.17U, Predicted Min-Max BG: 147-149, Eventual BG: 147'); } , addForecastPoints: function mockAddForecastPoints (points) { - points.length.should.equal(5); + points.length.should.equal(6); done(); } } @@ -165,7 +166,8 @@ describe('loop', function ( ) { done(); } , language: require('../lib/language')() - } + }, + language: require('../lib/language')() }; var errorTime = moment(statuses[1].created_at); @@ -257,7 +259,7 @@ describe('loop', function ( ) { loop.alexa.intentHandlers[0].intentHandler(function next(title, response) { title.should.equal('Loop Forecast'); - response.should.equal('According to the loop forecast you are expected to be between 147 and 149 over the next in 20 minutes'); + response.should.equal('According to the loop forecast you are expected to be between 147 and 149 over the next in 25 minutes'); loop.alexa.intentHandlers[1].intentHandler(function next(title, response) { title.should.equal('Last loop'); diff --git a/tests/mongo-storage.test.js b/tests/mongo-storage.test.js index d8e8cc88e0b..df85766a29d 100644 --- a/tests/mongo-storage.test.js +++ b/tests/mongo-storage.test.js @@ -36,7 +36,7 @@ describe('mongo storage', function () { (function () { return require('../lib/storage/mongo-storage')(env, false, true); - }).should.throw('MongoDB connection string is missing'); + }).should.throw('MongoDB connection string is missing. Please set MONGO_CONNECTION environment variable'); done(); }); diff --git a/tests/mqtt.test.js b/tests/mqtt.test.js index 25d2a60614b..bbf801b7408 100644 --- a/tests/mqtt.test.js +++ b/tests/mqtt.test.js @@ -10,7 +10,7 @@ describe('mqtt', function ( ) { before(function () { process.env.MQTT_MONITOR = 'mqtt://user:password@localhost:12345'; - process.env.STORAGE_URI='mongodb://localhost/test_db'; + process.env.STORAGE_URI='mongodb://localhost:27017/test_db'; process.env.ENTRIES_COLLECTION='test_sgvs'; self.env = require('../env')(); self.es = require('event-stream'); @@ -25,7 +25,7 @@ describe('mqtt', function ( ) { self.results.write(data); setTimeout(fn, 5); } - self.mqtt = require('../lib/mqtt')(self.env, {entries: { persist: outputs, create: written }, devicestatus: { create: written } }); + self.mqtt = require('../lib/server/mqtt')(self.env, {entries: { persist: outputs, create: written }, devicestatus: { create: written } }); }); after(function () { @@ -38,7 +38,7 @@ describe('mqtt', function ( ) { ; it('setup env correctly', function (done) { - self.env.mqtt_client_id.should.equal('fSjoHx8buyCtAc474tg8Dt3'); + self.env.mqtt_client_id.should.equal('nGVkio2g7p9+WOoiHB9YgmM'); done(); }); diff --git a/tests/openaps.test.js b/tests/openaps.test.js index 798e3519960..ed3dd6d3b9f 100644 --- a/tests/openaps.test.js +++ b/tests/openaps.test.js @@ -7,6 +7,7 @@ var moment = require('moment'); var ctx = { language: require('../lib/language')() }; +ctx.language.set('en'); var env = require('../env')(); var openaps = require('../lib/plugins/openaps')(ctx); var sandbox = require('../lib/sandbox')(); @@ -270,6 +271,7 @@ describe('openaps', function ( ) { done(); } } + , language: require('../lib/language')() }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); @@ -300,6 +302,7 @@ describe('openaps', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -327,6 +330,7 @@ describe('openaps', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -348,7 +352,8 @@ describe('openaps', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) - }; + , language: require('../lib/language')() + }; ctx.notifications.initRequests(); diff --git a/tests/pebble.test.js b/tests/pebble.test.js index d26e5e64e77..e6e683f78a6 100644 --- a/tests/pebble.test.js +++ b/tests/pebble.test.js @@ -84,9 +84,9 @@ ctx.ddata.treatments = updateMills([ ctx.ddata.devicestatus = [{uploader: {battery: 100}}]; -var bootevent = require('../lib/bootevent'); +var bootevent = require('../lib/server/bootevent'); describe('Pebble Endpoint', function ( ) { - var pebble = require('../lib/pebble'); + var pebble = require('../lib/server/pebble'); before(function (done) { var env = require('../env')( ); env.settings.authDefaultRoles = 'readable'; @@ -221,7 +221,7 @@ describe('Pebble Endpoint', function ( ) { }); describe('Pebble Endpoint with Raw and IOB and COB', function ( ) { - var pebbleRaw = require('../lib/pebble'); + var pebbleRaw = require('../lib/server/pebble'); before(function (done) { var env = require('../env')( ); env.settings.enable = ['rawbg', 'iob', 'cob']; diff --git a/tests/pump.test.js b/tests/pump.test.js index deb2b359a5a..c6def822058 100644 --- a/tests/pump.test.js +++ b/tests/pump.test.js @@ -7,10 +7,12 @@ var moment = require('moment'); var ctx = { language: require('../lib/language')() }; +ctx.language.set('en'); var env = require('../env')(); var pump = require('../lib/plugins/pump')(ctx); var sandbox = require('../lib/sandbox')(); var levels = require('../lib/levels'); +ctx.levels = levels; var statuses = [{ created_at: '2015-12-05T17:35:00.000Z' @@ -66,6 +68,7 @@ describe('pump', function ( ) { done(); } } + , language: require('../lib/language')() }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); @@ -96,6 +99,7 @@ describe('pump', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -119,6 +123,7 @@ describe('pump', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -146,6 +151,7 @@ describe('pump', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -174,6 +180,7 @@ describe('pump', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -201,6 +208,7 @@ describe('pump', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -228,6 +236,7 @@ describe('pump', function ( ) { units: 'mg/dl' } , notifications: require('../lib/notifications')(env, ctx) + , language: require('../lib/language')() }; ctx.notifications.initRequests(); @@ -253,7 +262,7 @@ describe('pump', function ( ) { , notifications: require('../lib/notifications')(env, ctx) , language: require('../lib/language')() }; - + ctx.language.set('en'); var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); pump.setProperties(sbx); @@ -265,7 +274,7 @@ describe('pump', function ( ) { pump.alexa.intentHandlers[1].intentHandler(function next(title, response) { title.should.equal('Pump battery'); - response.should.equal('Your battery is at 1.52 volts'); + response.should.equal('Your pump battery is at 1.52 volts'); done(); }, [], sbx); diff --git a/tests/pushnotify.test.js b/tests/pushnotify.test.js index dc0bc9151eb..01a3d385f2b 100644 --- a/tests/pushnotify.test.js +++ b/tests/pushnotify.test.js @@ -29,7 +29,7 @@ describe('pushnotify', function ( ) { } }; - ctx.pushnotify = require('../lib/pushnotify')(env, ctx); + ctx.pushnotify = require('../lib/server/pushnotify')(env, ctx); ctx.pushnotify.emitNotification(notify); @@ -61,7 +61,7 @@ describe('pushnotify', function ( ) { } }; - ctx.pushnotify = require('../lib/pushnotify')(env, ctx); + ctx.pushnotify = require('../lib/server/pushnotify')(env, ctx); ctx.pushnotify.emitNotification(notify); @@ -97,7 +97,7 @@ describe('pushnotify', function ( ) { } }; - ctx.pushnotify = require('../lib/pushnotify')(env, ctx); + ctx.pushnotify = require('../lib/server/pushnotify')(env, ctx); //first send the warning ctx.pushnotify.emitNotification(notify); diff --git a/tests/rawbg.test.js b/tests/rawbg.test.js index 4697bea900a..ab91d2bf722 100644 --- a/tests/rawbg.test.js +++ b/tests/rawbg.test.js @@ -3,22 +3,21 @@ require('should'); describe('Raw BG', function ( ) { - var rawbg = require('../lib/plugins/rawbg')({ - settings: {} - , language: require('../lib/language')() - }); + var ctx = { + settings: { units: 'mg/dl'} + , language: require('../lib/language')() + , pluginBase: {} + }; + ctx.language.set('en'); + + var rawbg = require('../lib/plugins/rawbg')(ctx); var now = Date.now(); var data = { sgvs: [{unfiltered: 113680, filtered: 111232, mgdl: 110, noise: 1, mills: now}] , cals: [{scale: 1, intercept: 25717.82377004309, slope: 766.895601715918, mills: now}] }; - var ctx = { - settings: { - units: 'mg/dl' - } - , pluginBase: {} - }; + it('should calculate Raw BG', function (done) { var sandbox = require('../lib/sandbox')(); diff --git a/tests/reports.test.js b/tests/reports.test.js index 710b043c4b0..d5ae4e80e35 100644 --- a/tests/reports.test.js +++ b/tests/reports.test.js @@ -237,8 +237,8 @@ describe('reports', function ( ) { $('a.presetdates :first').click(); $('#rp_notes').val('something'); $('#rp_eventtype').val('BG Check'); - $('#rp_from').val('2015/08/08'); - $('#rp_to').val('2015/09/07'); + $('#rp_from').val('2015-08-08'); + $('#rp_to').val('2015-09-07'); $('#rp_optionsraw').prop('checked', true); $('#rp_optionsiob').prop('checked', true); $('#rp_optionscob').prop('checked', true); @@ -266,7 +266,7 @@ describe('reports', function ( ) { result.indexOf('Milk now').should.be.greaterThan(-1); // daytoday result.indexOf('50 g (1.67U)').should.be.greaterThan(-1); // daytoday result.indexOf('0%100%0%2').should.be.greaterThan(-1); //dailystats - result.indexOf('td class="tdborder" style="background-color:#8f8">Normal: 64.7%6').should.be.greaterThan(-1); // distribution + //TODO FIXME result.indexOf('td class="tdborder" style="background-color:#8f8">Normal: 64.7%6').should.be.greaterThan(-1); // distribution result.indexOf('16 (100%)').should.be.greaterThan(-1); // hourlystats result.indexOf('
').should.be.greaterThan(-1); //success result.indexOf('CAL: Scale: 1.10 Intercept: 31102 Slope: 776.91').should.be.greaterThan(-1); //calibrations diff --git a/tests/sandbox.test.js b/tests/sandbox.test.js index d1be11b1eb1..966589a3129 100644 --- a/tests/sandbox.test.js +++ b/tests/sandbox.test.js @@ -18,6 +18,8 @@ describe('sandbox', function ( ) { } , pluginBase: {} }; + + ctx.language = require('../lib/language')(); var data = {sgvs: [{mgdl: 100, mills: now}]}; @@ -35,6 +37,7 @@ describe('sandbox', function ( ) { var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); + ctx.language = require('../lib/language')(); return sandbox.serverInit(env, ctx); } diff --git a/tests/security.test.js b/tests/security.test.js index 80959cfeed3..6b612f1bc6e 100644 --- a/tests/security.test.js +++ b/tests/security.test.js @@ -10,7 +10,7 @@ describe('API_SECRET', function ( ) { var scope = this; function setup_app (env, fn) { - require('../lib/bootevent')(env, language).boot(function booted (ctx) { + require('../lib/server/bootevent')(env, language).boot(function booted (ctx) { ctx.app = api(env, ctx); scope.app = ctx.app; scope.entries = ctx.entries; diff --git a/tests/sensorage.test.js b/tests/sensorage.test.js index 87705866d33..2c7548598a4 100644 --- a/tests/sensorage.test.js +++ b/tests/sensorage.test.js @@ -44,6 +44,7 @@ describe('sage', function ( ) { } } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); sage.setProperties(sbx); @@ -71,6 +72,7 @@ describe('sage', function ( ) { } } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); sage.setProperties(sbx); @@ -98,6 +100,7 @@ describe('sage', function ( ) { } } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); sage.setProperties(sbx); @@ -127,6 +130,7 @@ describe('sage', function ( ) { } } }; + ctx.language = require('../lib/language')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); sage.setProperties(sbx); diff --git a/tests/treatmentnotify.test.js b/tests/treatmentnotify.test.js index d88722783d6..e9bc8abbd46 100644 --- a/tests/treatmentnotify.test.js +++ b/tests/treatmentnotify.test.js @@ -10,6 +10,8 @@ describe('treatmentnotify', function ( ) { var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); + ctx.levels = levels; + ctx.language = require('../lib/language')().set('en'); var now = Date.now(); diff --git a/tests/upbat.test.js b/tests/upbat.test.js index 0d70e581721..9b48c3b845e 100644 --- a/tests/upbat.test.js +++ b/tests/upbat.test.js @@ -9,7 +9,11 @@ describe('Uploader Battery', function ( ) { var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} + , language: require('../lib/language')() }; + ctx.language.set('en'); + ctx.levels = require('../lib/levels'); + var sbx = sandbox.clientInit(ctx, Date.now(), data); sbx.offerProperty = function mockedOfferProperty (name, setter) { @@ -22,7 +26,7 @@ describe('Uploader Battery', function ( ) { done(); }; - var upbat = require('../lib/plugins/upbat')(); + var upbat = require('../lib/plugins/upbat')(ctx); upbat.setProperties(sbx); }); @@ -38,11 +42,13 @@ describe('Uploader Battery', function ( ) { done(); } } + , language: require('../lib/language')() }; + ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); - var upbat = require('../lib/plugins/upbat')(); + var upbat = require('../lib/plugins/upbat')(ctx); upbat.setProperties(sbx); upbat.updateVisualisation(sbx); @@ -57,11 +63,13 @@ describe('Uploader Battery', function ( ) { done(); } } + , language: require('../lib/language')() }; + ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), {}); - var upbat = require('../lib/plugins/upbat')(); + var upbat = require('../lib/plugins/upbat')(ctx); upbat.setProperties(sbx); upbat.updateVisualisation(sbx); }); @@ -74,12 +82,13 @@ describe('Uploader Battery', function ( ) { options.hide.should.equal(true); done(); } - } + }, language: require('../lib/language')() }; + ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), {devicestatus: [{uploader: {battery: -1}}]}); - var upbat = require('../lib/plugins/upbat')(); + var upbat = require('../lib/plugins/upbat')(ctx); upbat.setProperties(sbx); upbat.updateVisualisation(sbx); }); @@ -88,11 +97,13 @@ describe('Uploader Battery', function ( ) { var ctx = { settings: {} + , language: require('../lib/language')() }; + ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), data); - var upbat = require('../lib/plugins/upbat')(); + var upbat = require('../lib/plugins/upbat')(ctx); upbat.setProperties(sbx); upbat.alexa.intentHandlers.length.should.equal(1); diff --git a/tests/verifyauth.test.js b/tests/verifyauth.test.js index 871dd56f176..36624e03023 100644 --- a/tests/verifyauth.test.js +++ b/tests/verifyauth.test.js @@ -2,13 +2,14 @@ var request = require('supertest'); var language = require('../lib/language')(); +require('should'); describe('verifyauth', function ( ) { var api = require('../lib/api/'); var scope = this; function setup_app (env, fn) { - require('../lib/bootevent')(env, language).boot(function booted (ctx) { + require('../lib/server/bootevent')(env, language).boot(function booted (ctx) { ctx.app = api(env, ctx); scope.app = ctx.app; fn(ctx); diff --git a/views/bgclock.html b/views/bgclock.html index 183a5bb829f..903a395d56a 100644 --- a/views/bgclock.html +++ b/views/bgclock.html @@ -1,83 +1,142 @@ - - Nightscout BG NOW - - - + -
-

-

-
- - - + + + + init( ); + diff --git a/views/clock.html b/views/clock.html index 95f56a1e3f5..c0ac35d64be 100644 --- a/views/clock.html +++ b/views/clock.html @@ -1,78 +1,132 @@ - - Nightscout BG NOW - - - + + + + Nightscout + + + + + + + + + + + + + + +
-
-

+
+
+
+
+
+ - + init( ); + diff --git a/views/index.html b/views/index.html index fec1c6f0f7e..6a0237f0983 100644 --- a/views/index.html +++ b/views/index.html @@ -27,9 +27,10 @@ - - + + +