From e132c5774592e688ffd9f77db2939709757c06ea Mon Sep 17 00:00:00 2001 From: Dave Schumaker Date: Tue, 25 Aug 2020 20:58:53 -0700 Subject: [PATCH] initial commit --- .eslintrc.js | 251 + .gitignore | 5 + README.md | 31 + bin/controllers/apiController.js | 34 + bin/controllers/dataStoreController.js | 14 + bin/controllers/notificationController.js | 43 + bin/controllers/sensorDataController.js | 71 + bin/controllers/viewController.js | 14 + bin/main.js | 26 + bin/models/SensorData.js | 28 + bin/models/SensorHistory.js | 19 + bin/tasks/cronJobs.js | 27 + bin/tasks/onBoot.js | 29 + bin/utils/calcAqi.js | 55 + bin/utils/timeUtils.js | 5 + bin/views/renderHtml.js | 219 + config-example.js | 30 + media/local-air-screenshot.png | Bin 0 -> 93327 bytes package-lock.json | 5191 +++++++++++++++++++++ package.json | 87 + 20 files changed, 6179 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 README.md create mode 100644 bin/controllers/apiController.js create mode 100644 bin/controllers/dataStoreController.js create mode 100644 bin/controllers/notificationController.js create mode 100644 bin/controllers/sensorDataController.js create mode 100644 bin/controllers/viewController.js create mode 100644 bin/main.js create mode 100644 bin/models/SensorData.js create mode 100644 bin/models/SensorHistory.js create mode 100644 bin/tasks/cronJobs.js create mode 100644 bin/tasks/onBoot.js create mode 100644 bin/utils/calcAqi.js create mode 100644 bin/utils/timeUtils.js create mode 100644 bin/views/renderHtml.js create mode 100644 config-example.js create mode 100644 media/local-air-screenshot.png create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..252f626 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,251 @@ +module.exports = { + parserOptions: { + ecmaVersion: 8, + ecmaFeatures: { + jsx: true + }, + sourceType: 'module' + }, + + env: { + browser: true, + node: true, + es6: true + }, + + globals: { + __DEV__: true, + __PRODUCTION__: true + }, + + rules: { + // Possible Errors + 'comma-dangle': [1, 'never'], + 'no-cond-assign': [1, 'always'], + 'no-console': 0, + 'no-constant-condition': 1, + 'no-control-regex': 0, + 'no-debugger': 1, + 'no-dupe-args': 1, + 'no-dupe-keys': 1, + 'no-duplicate-case': 0, + 'no-empty-character-class': 1, + 'no-empty': 1, + 'no-ex-assign': 1, + 'no-extra-boolean-cast': 1, + 'no-extra-parens': 0, + 'no-extra-semi': 1, + 'no-func-assign': 1, + 'no-inner-declarations': 0, + 'no-invalid-regexp': 1, + 'no-irregular-whitespace': 1, + 'no-negated-in-lhs': 1, + 'no-obj-calls': 0, + 'no-regex-spaces': 1, + 'no-sparse-arrays': 1, + 'no-unexpected-multiline': 1, + 'no-unreachable': 1, + 'use-isnan': 1, + 'valid-jsdoc': 0, + 'valid-typeof': 1, + + // Best Practices + 'accessor-pairs': 0, + 'block-scoped-var': 1, + complexity: 0, + 'consistent-return': 0, + curly: ['warn'], + 'default-case': 0, + 'dot-location': [1, 'property'], + 'dot-notation': 1, + eqeqeq: [1, 'smart'], + 'guard-for-in': 1, + 'no-alert': 1, + 'no-caller': 0, + 'no-case-declarations ': 0, + 'no-div-regex': 1, + 'no-else-return': 0, + 'no-empty-label': 0, + 'no-empty-pattern': 0, + 'no-eq-null': 1, + 'no-eval': 1, + 'no-extend-native': 0, + 'no-extra-bind': 1, + 'no-fallthrough': 0, + 'no-floating-decimal': 1, + 'no-implicit-coercion': 1, + 'no-implied-eval': 1, + 'no-invalid-this': 0, + 'no-iterator': 0, + 'no-labels': 0, + 'no-lone-blocks': 1, + 'no-loop-func': 1, + 'no-magic-numbers': 0, + 'no-multi-spaces': 1, + 'no-multi-str': 1, + 'no-native-reassign': 1, + 'no-new-func': 0, + 'no-new-wrappers': 1, + 'no-new': 1, + 'no-octal-escape': 0, + 'no-octal': 0, + 'no-param-reassign': 0, + 'no-process-env': 0, + 'no-proto': 0, + 'no-redeclare': 1, + 'no-return-assign': 0, + 'no-script-url': 0, + 'no-self-compare': 1, + 'no-sequences': 1, + 'no-throw-literal': 0, + 'no-unused-expressions': 1, + 'no-useless-call': 0, + 'no-useless-concat': 1, + 'no-void': 0, + 'no-warning-comments': 0, + 'no-with': 0, + radix: 0, + 'vars-on-top': 0, + 'wrap-iife': 0, + yoda: 0, + + // Strict Mode + strict: 0, + + // Variables + 'init-declarations': 0, + 'no-catch-shadow': 0, + 'no-delete-var': 0, + 'no-label-var': 1, + 'no-shadow-restricted-names': 0, + 'no-shadow': 1, + 'no-undef-init': 0, + 'no-undef': 'error', + 'no-undefined': 1, + 'no-unused-vars': [ + 1, + { + varsIgnorePattern: 'StyleSheet' + } + ], + 'no-use-before-define': 1, + + // Node.js and CommonJS + 'callback-return': 0, + 'global-require': 0, + 'handle-callback-err': 0, + 'no-mixed-requires': [0], + 'no-new-require': 1, + 'no-path-concat': 0, + 'no-process-exit': 0, + 'no-restricted-modules': 0, + 'no-sync': 0, + + // Stlistic Issues + 'array-bracket-spacing': [1, 'never', { objectsInArrays: false }], + 'block-spacing': [1, 'always'], + 'brace-style': 1, + camelcase: [ + 1, + { + properties: 'always' + } + ], + 'comma-spacing': [ + 1, + { + before: false, + after: true + } + ], + 'comma-style': [1, 'last'], + 'computed-property-spacing': [1, 'never'], + 'consistent-this': [1, 'self'], + 'eol-last': 0, + 'func-names': 0, + 'func-style': [0, 'expression'], + 'id-length': 0, + 'id-match': 0, + indent: 0, + 'jsx-quotes': [1, 'prefer-double'], + 'key-spacing': [ + 1, + { + beforeColon: false, + afterColon: true + } + ], + 'linebreak-style': 0, + 'lines-around-comment': 0, + 'max-depth': 0, + 'max-len': 0, + 'max-nested-callbacks': 0, + 'max-params': 0, + 'max-statements': 0, + 'new-cap': 0, + 'new-parens': 1, + 'newline-after-var': 0, + 'no-array-constructor': 0, + 'no-bitwise': 0, + 'no-continue': 0, + 'no-inline-comments': 0, + 'no-lonely-if': 0, + 'no-mixed-spaces-and-tabs': 1, + 'no-multiple-empty-lines': 0, + 'no-nested-ternary': 1, + 'no-new-object': 1, + 'no-plusplus': 0, + 'no-restricted-syntax': 0, + 'no-spaced-func': 1, + 'no-ternary': 0, + 'no-trailing-spaces': 1, + 'no-underscore-dangle': 0, + 'no-unneeded-ternary': 1, + 'object-curly-spacing': ['warn', 'always'], + 'one-var': 0, + 'operator-assignment': 0, + 'operator-linebreak': 0, + 'padded-blocks': 0, + 'quote-props': 0, + quotes: [0, 'single', { allowTemplateLiterals: true }], + 'require-jsdoc': 0, + 'semi-spacing': [ + 1, + { + before: false, + after: true + } + ], + semi: [1, 'always'], + 'sort-vars': 0, + 'space-before-blocks': 1, + 'space-before-function-paren': 0, + 'keyword-spacing': [1, { before: true }], + 'space-in-parens': [1, 'never'], + 'space-infix-ops': 0, + 'space-unary-ops': 0, + 'spaced-comment': 0, + 'wrap-regex': 0, + + // ECMAScript 6 + 'no-confusing-arrow': 'error', + 'arrow-body-style': 0, + 'arrow-parens': 0, + 'arrow-spacing': 0, + 'constructor-super': 0, + 'generator-star-spacing': 0, + 'no-arrow-condition': 0, + 'no-class-assign': 0, + 'no-const-assign': 0, + 'no-dupe-class-members': 0, + 'no-this-before-super': 0, + 'no-var': 0, + 'object-shorthand': 'warn', + 'prefer-arrow-callback': 'warn', + 'prefer-const': 0, + 'prefer-reflect': 0, + 'prefer-spread': 0, + 'prefer-template': 0, + 'require-yield': 0 + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..81a683c --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ + +config.js +dataStore +dist +node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000..639e133 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# Local Air Quality Monitor + +![](/media/local-air-screenshot.png?raw=true) + +## Introduction + +This simple Node app uses the PurpleAir API to display hyper-local air quality information based on PurpleAir IoT sensors located near where you live. You can check check the abundance of sensors near your place by visiting [https://www.purpleair.com/map?mylocation](https://www.purpleair.com/map?mylocation). + +## Setup + +The best way to start using this app is to clone the project into your local machine's project directory. + +1. `cd ~/projects && git clone https://github.com/daveschumaker/local-air.git` +2. `cd local-air && npm install` +3. Rename `config-example.js` to `config.js` and enter appropriate details. You can find the ID for the PurpleAir sensor closest to your house by visiting the [PurpleAir map](https://www.purpleair.com/map?mylocation). +4. Run project using either `npm run dev` or `npm run build && npm run start` +5. View the node app's webpage in your browser by visiting `http://localhost:3000` (PORT 3000 is default, you can change this later) + +## Contributions + +If you're interested in contributing to the codebase, thank you! +Pull requests are the best way to propose changes and I welcome your pull requests: + +1. Fork the repo and create your branch from `master`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Make sure your code lints using the project rules. +6. Issue that pull request. + +Note that any contributions you make will be under the same [MIT License](http://choosealicense.com/licenses/mit/) that covers the project. diff --git a/bin/controllers/apiController.js b/bin/controllers/apiController.js new file mode 100644 index 0000000..482a4c9 --- /dev/null +++ b/bin/controllers/apiController.js @@ -0,0 +1,34 @@ +import fetch from 'node-fetch'; +import config from '../../config'; +const { sensorId } = config; + +const fetchData = async () => { + try { + if (!sensorId) { + console.log('Error: Missing sensorId inside config.js'); + process.exit(); + } + + const endpoint = `https://www.purpleair.com/json?show=${sensorId}`; + const res = await fetch(endpoint); + const data = await res.json(); + + if (data.results && data.results.length > 0) { + /** + * In some cases, PurpleAir can return array of sensor data + * based on parent / child sensors. For my purposes, I only + * care about the parent sensor. + */ + return data.results[0]; + } else { + return false; + } + } catch (err) { + console.log('Error fetching data'); + console.log(err); + + return false; + } +}; + +export { fetchData }; diff --git a/bin/controllers/dataStoreController.js b/bin/controllers/dataStoreController.js new file mode 100644 index 0000000..ea1e016 --- /dev/null +++ b/bin/controllers/dataStoreController.js @@ -0,0 +1,14 @@ +import { LocalStorage } from 'node-localstorage'; +const localStorage = new LocalStorage('./dataStore'); + +const writeData = (key, data) => { + const jsonString = JSON.stringify(data); + localStorage.setItem(key, jsonString); +}; + +const getData = key => { + const dataToParse = localStorage.getItem(key); + return JSON.parse(dataToParse); +}; + +export default { getData, writeData }; diff --git a/bin/controllers/notificationController.js b/bin/controllers/notificationController.js new file mode 100644 index 0000000..8e7c4ef --- /dev/null +++ b/bin/controllers/notificationController.js @@ -0,0 +1,43 @@ +import nodemailer from 'nodemailer'; +import config from '../../config'; + +const { enabled, EMAIL_TO, EMAIL_FROM, EMAIL_PASSWORD, EMAIL_HOST, EMAIL_PORT } = config.email; + +const transporter = nodemailer.createTransport({ + host: EMAIL_HOST, + port: EMAIL_PORT, + secure: true, + auth: { + user: EMAIL_FROM, + pass: EMAIL_PASSWORD + } +}); + +const initMailOptions = { + from: `Air Quality Alert <${EMAIL_FROM}>`, + to: EMAIL_TO, + subject: '', + html: '' // email body +}; + +const mailer = { + send({ subject, body } = {}) { + if (!enabled) { + return; + } + + let mailOptions = Object.assign({}, initMailOptions); + + mailOptions.subject = subject || 'Air Quality Alert'; + mailOptions.html = `${body}`; + + transporter.sendMail(mailOptions, error => { + if (error) { + console.log('Error: Unable to send email'); + console.log(error); + } + }); + } +}; + +export default mailer; diff --git a/bin/controllers/sensorDataController.js b/bin/controllers/sensorDataController.js new file mode 100644 index 0000000..7ea7168 --- /dev/null +++ b/bin/controllers/sensorDataController.js @@ -0,0 +1,71 @@ +import { fetchData } from './apiController'; +import SensorData from '../models/SensorData'; +import SensorHistory from '../models/SensorHistory'; +import dataStoreController from './dataStoreController'; +import notificationController from './notificationController'; +import { currentTimeSecs } from '../utils/timeUtils'; + +// Prevent inadvertently flooding PurpleAir API. +const TIMEOUT_SECONDS = 60; + +// Store time of last notification to prevent too many notifications. +let lastEmailNotificationTime = null; + +const getCachedData = () => { + const cachedData = dataStoreController.getData('sensorData'); + return new SensorData(cachedData); +}; + +const writeSensorData = sensorData => { + const currentTime = currentTimeSecs(); + + if (!sensorData) { + return; + } + + sensorData.fetchTime = currentTime; + dataStoreController.writeData('fetchTime', currentTime); + dataStoreController.writeData('sensorData', sensorData); +}; + +const getSensorData = () => { + return new Promise(resolve => { + const currentTime = currentTimeSecs(); + const lastFetchTime = dataStoreController.getData('fetchTime'); + + if (!lastFetchTime || currentTime - Number(lastFetchTime) > TIMEOUT_SECONDS) { + fetchData().then(data => { + if (!data) { + return; + } + + writeSensorData(data); + resolve(new SensorData(data)); + }); + } else { + resolve(getCachedData()); + } + }); +}; + +const sendEmailAlert = () => { + const AQI_THRESHOLD = 100; // Cutoff threshold to send notifications. + const NOTIFICATION_TIMEOUT_SECS = 3600; // Only send alert emails once an hour. + const currentTime = currentTimeSecs(); + const historicalValues = SensorHistory.getHistory(); + const shouldSendAlert = + historicalValues[0] >= AQI_THRESHOLD && historicalValues[1] < AQI_THRESHOLD; + + if ( + shouldSendAlert && + (!lastEmailNotificationTime || + currentTime - lastEmailNotificationTime >= NOTIFICATION_TIMEOUT_SECS) + ) { + lastEmailNotificationTime = currentTime; + notificationController.send({ + body: `AQI is ${historicalValues[0]}. You should close your windows now.` + }); + } +}; + +export { getCachedData, getSensorData, sendEmailAlert, writeSensorData }; diff --git a/bin/controllers/viewController.js b/bin/controllers/viewController.js new file mode 100644 index 0000000..19580d5 --- /dev/null +++ b/bin/controllers/viewController.js @@ -0,0 +1,14 @@ +import { getCachedData } from '../controllers/sensorDataController'; +import { renderHtmlView } from '../views/renderHtml'; + +const viewController = async ctx => { + try { + const sensorData = getCachedData(); + ctx.body = renderHtmlView(sensorData); + } catch (err) { + ctx.body = 'Error'; + console.log(err); + } +}; + +export default viewController; diff --git a/bin/main.js b/bin/main.js new file mode 100644 index 0000000..056ad72 --- /dev/null +++ b/bin/main.js @@ -0,0 +1,26 @@ +// core-js and regenerator-runtime should be the first line in +// entry point of app, so that async generators are useable +// when babel compiles and builds the app. +import 'core-js/stable'; +import 'regenerator-runtime/runtime'; + +import Koa from 'koa'; +import config from '../config'; +import cronJobs from './tasks/cronJobs'; +import onBoot from './tasks/onBoot'; +import viewController from './controllers/viewController'; + +console.log('--== Local Air Quality Monitor Online ==--'); + +const app = new Koa(); +const port = process.env.PORT || config.PORT || 3000; + +onBoot.run(); +cronJobs.run(); + +/** + * Display a very basic webpage with + * the most recently fetched sensor data + */ +app.use(viewController); +app.listen(port); diff --git a/bin/models/SensorData.js b/bin/models/SensorData.js new file mode 100644 index 0000000..b974b1b --- /dev/null +++ b/bin/models/SensorData.js @@ -0,0 +1,28 @@ +/* eslint-disable camelcase */ +import calcAqi from '../utils/calcAqi'; + +function SensorData({ + PM2_5Value = '', + temp_f = '', + humidity = '', + pressure = '', + fetchTime = '', + Stats = {} +} = {}) { + this.fetchTime = Number(fetchTime) * 1000; + this.currentTemp = Math.floor(Number(temp_f)); + this.currentHumidity = Math.floor(Number(humidity)); + this.currentPressure = Math.floor(Number(pressure)); + + const stats = JSON.parse(Stats); + + // For some reason, all values need to be multiplied by 3. + this.currentPM25 = Math.floor(calcAqi(Number(PM2_5Value))); + this.avg10Min = Math.floor(calcAqi(Number(stats.v1))); + this.avg30Min = Math.floor(calcAqi(Number(stats.v2))); + this.avg1Hr = Math.floor(calcAqi(Number(stats.v3))); + this.avg6Hr = Math.floor(calcAqi(Number(stats.v4))); + this.avg1Day = Math.floor(calcAqi(Number(stats.v5))); +} + +export default SensorData; diff --git a/bin/models/SensorHistory.js b/bin/models/SensorHistory.js new file mode 100644 index 0000000..a14f375 --- /dev/null +++ b/bin/models/SensorHistory.js @@ -0,0 +1,19 @@ +import dataStoreController from '../controllers/dataStoreController'; + +// On initial load, fetch history from data store, +// otherwise load with an empty array. +let history = dataStoreController.getData('history') || []; +const HISTORY_TO_KEEP = 24; + +const addHistory = pm25Value => { + const currentTime = Date.now(); + history.unshift([currentTime, pm25Value]); + history = history.slice(0, HISTORY_TO_KEEP); + dataStoreController.writeData('history', history); +}; + +const getHistory = () => { + return history; +}; + +export default { addHistory, getHistory }; diff --git a/bin/tasks/cronJobs.js b/bin/tasks/cronJobs.js new file mode 100644 index 0000000..1987b91 --- /dev/null +++ b/bin/tasks/cronJobs.js @@ -0,0 +1,27 @@ +import cron from 'cron'; +import { getSensorData, sendEmailAlert } from '../controllers/sensorDataController'; +import SensorHistory from '../models/SensorHistory'; + +const CronJob = cron.CronJob; +const tenMinuteJob = new CronJob( + '0 */10 * * * *', + async () => { + try { + const sensorData = await getSensorData(); + SensorHistory.addHistory(sensorData.currentPM25); + sendEmailAlert(); + } catch (err) { + console.log('Some error occurred...'); + console.log(err); + } + }, + null, + true, + 'America/Los_Angeles' +); + +export default { + run() { + tenMinuteJob.start(); + } +}; diff --git a/bin/tasks/onBoot.js b/bin/tasks/onBoot.js new file mode 100644 index 0000000..478a0b1 --- /dev/null +++ b/bin/tasks/onBoot.js @@ -0,0 +1,29 @@ +import { fetchData } from '../controllers/apiController'; +import { writeSensorData } from '../controllers/sensorDataController'; + +/** + * Fetch latest data from Purple Air sensors when + * app boots up, rather than waiting 5 minutes for + * cron job start. + */ + +const run = async () => { + try { + let sensorData = await fetchData(); + + if (!sensorData) { + return; + } + + writeSensorData(sensorData); + } catch (err) { + console.log('onBoot error:'); + console.log(err); + + return; + } +}; + +export default { + run +}; diff --git a/bin/utils/calcAqi.js b/bin/utils/calcAqi.js new file mode 100644 index 0000000..cced21d --- /dev/null +++ b/bin/utils/calcAqi.js @@ -0,0 +1,55 @@ +/** + * + * Converstion values to go from PM25 concentration to AQI. + * This results in a slightly different value than what PurpleAir returns, + * but is usually within 3 - 5 integers of their value. Not sure why this is. + * I use the AQI equation from here: + * https://forum.airnowtech.org/t/the-aqi-equation/169 + */ +const breakPoints = value => { + let obj = {}; + + if (value <= 12) { + obj.cLo = 0; + obj.cHi = 12; + obj.aLo = 0; + obj.aHi = 50; + } else if (value <= 35.4) { + obj.cLo = 12.1; + obj.cHi = 35.4; + obj.aLo = 51; + obj.aHi = 100; + } else if (value <= 55.4) { + obj.cLo = 35.5; + obj.cHi = 55.4; + obj.aLo = 101; + obj.aHi = 150; + } else if (value <= 150.4) { + obj.cLo = 55.5; + obj.cHi = 150.4; + obj.aLo = 151; + obj.aHi = 200; + } else if (value <= 250.4) { + obj.cLo = 150.5; + obj.cHi = 250.4; + obj.aLo = 201; + obj.aHi = 300; + } else { + obj.cLo = 250.5; + obj.cHi = 500.4; + obj.aLo = 301; + obj.aHi = 500; + } + + return obj; +}; + +const calcAqi = value => { + const values = breakPoints(value); + const diff = value - values.cLo; + const aqi = ((values.aHi - values.aLo) / (values.cHi - values.cLo)) * diff + values.aLo; + + return aqi; +}; + +export default calcAqi; diff --git a/bin/utils/timeUtils.js b/bin/utils/timeUtils.js new file mode 100644 index 0000000..924db93 --- /dev/null +++ b/bin/utils/timeUtils.js @@ -0,0 +1,5 @@ +const currentTimeSecs = () => { + return Math.floor(Date.now() / 1000); +}; + +export { currentTimeSecs }; diff --git a/bin/views/renderHtml.js b/bin/views/renderHtml.js new file mode 100644 index 0000000..b5ba9f9 --- /dev/null +++ b/bin/views/renderHtml.js @@ -0,0 +1,219 @@ +import SensorHistory from '../models/SensorHistory'; +import config from '../../config'; +const { mapUrl } = config; + +const getDetails = value => { + value = Number(value); + let detailsObj = {}; + + if (value < 50) { + detailsObj.backgroundColor = 'rgba(104,225,67,1.0)'; + detailsObj.shortDescript = 'Good'; + detailsObj.longDescript = + 'Air quality is satisfactory, and air pollution poses little or no risk.'; + } else if (value < 100) { + detailsObj.backgroundColor = 'rgba(255,255,85,1.0)'; + detailsObj.shortDescript = 'Moderate'; + detailsObj.longDescript = + 'Air quality is acceptable. However, there may be a risk for some people, particularly those who are unusually sensitive to air pollution.'; + } else if (value < 150) { + detailsObj.backgroundColor = 'rgba(239,133,51,1.0)'; + detailsObj.shortDescript = 'Unhealthy for Sensitive Groups'; + detailsObj.longDescript = + 'Members of sensitive groups may experience health effects. The general public is less likely to be affected.'; + } else if (value < 200) { + detailsObj.backgroundColor = 'rgba(234,51,36,1.0)'; + detailsObj.shortDescript = 'Unhealthy'; + detailsObj.longDescript = + 'Some members of the general public may experience health effects; members of sensitive groups may experience more serious health effects.'; + } else if (value < 300) { + detailsObj.backgroundColor = 'rgba(140,26,75,1.0)'; + detailsObj.shortDescript = 'Very Unhealthy'; + detailsObj.longDescript = + 'Health alert: The risk of health effects is increased for everyone.'; + } else { + detailsObj.backgroundColor = 'rgba(115,20,37,1.0)'; + detailsObj.shortDescript = 'Hazardous'; + detailsObj.longDescript = + 'Health warning of emergency conditions: everyone is more likely to be affected.'; + } + + detailsObj.shortDescript = detailsObj.shortDescript.toUpperCase(); + + return detailsObj; +}; + +const renderHtmlView = sensorData => { + const date = new Date(sensorData.fetchTime); + + const measurementData = SensorHistory.getHistory().map((measurent = []) => { + const dateMeasure = new Date(measurent[0]); + return ` +
+ ${dateMeasure.toLocaleTimeString()}: + ${measurent[1]} +
+ `; + }); + + return ` + + + + + + Local Air Quality Monitor + + + + + + + + + + + + + + + +
+
Fetched at ${date.toLocaleDateString()} ${date.toLocaleTimeString()}
+
${getDetails(sensorData.currentPM25).shortDescript}
+
+ ${Math.floor(sensorData.currentPM25)} +
+
${getDetails(sensorData.currentPM25).longDescript}
+
+ Rolling Averages +
+
+
+ 10 min
${sensorData.avg10Min} +
+
+ 30 min
${sensorData.avg30Min} +
+
+ 1 hour
${sensorData.avg1Hr} +
+
+ 6 hour
${sensorData.avg6Hr} +
+
+ 1 day
${sensorData.avg1Day} +
+
+ +
Recent measurements
+
+ ${measurementData.join('')} +
+
+ + + + `; +}; + +export { renderHtmlView }; diff --git a/config-example.js b/config-example.js new file mode 100644 index 0000000..2946406 --- /dev/null +++ b/config-example.js @@ -0,0 +1,30 @@ +// Rename to `config.js`; + +module.exports = { + PORT: 3000, // port that app will listen to connections on. + sensorId: null, // id of PurpleAir sensor that you're interested in. + + /** + * Set the map URL for your local area to view air sensors relevant + * to you. This is used for generating link when clicking on the + * "PurpleAir Map link inside the renderHtml method. + */ + mapUrl: 'https://www.purpleair.com/map?opt=1/mAQI/a10/cC0#8.85/37.7435/-122.3694', + + /** + * Enter SMS Relay Email Address for text message or normal + * email address if preferred. You can find your SMS gateway + * address here: https://www.digitaltrends.com/mobile/how-to-send-a-text-from-your-email-account/ + * + * Multiple email addresses and / or SMS Email Relays can be added. + * Seperate addresses with a comma. + */ + email: { + enabled: false, // Change to true when ready for notifications. + EMAIL_TO: '', + EMAIL_FROM: '', + EMAIL_PASSWORD: '', + EMAIL_HOST: '', + EMAIL_PORT: '' + } +}; diff --git a/media/local-air-screenshot.png b/media/local-air-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..6d33edb30a1dfc0f8250de05d4885e92fb2a706e GIT binary patch literal 93327 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 1.5.0 < 2", + "toidentifier": "1.0.0" + } + } + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + } + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "husky": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", + "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^6.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "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, + "optional": 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, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-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, + "optional": 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, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz", + "integrity": "sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "requires": { + "tsscmp": "1.0.6" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true + }, + "koa": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.0.tgz", + "integrity": "sha512-i/XJVOfPw7npbMv67+bOeXr3gPqOAw6uh5wFyNs3QvJ47tUx3M3V9rIE0//WytY42MKz4l/MXKyGkQ2LQTfLUQ==", + "requires": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^1.1.2", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + } + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.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 + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true + }, + "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, + "optional": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": 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" + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "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" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, + "moment-timezone": { + "version": "0.5.31", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", + "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "mri": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", + "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "node-localstorage": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.1.6.tgz", + "integrity": "sha512-yE7AycE5G2hU55d+F7Ona9nx97C+enJzWWx6jrsji7fuPZFJOvuW3X/LKKAcXRBcEIJPDOKt8ZiFWFmShR/irg==", + "requires": { + "write-file-atomic": "^1.1.4" + }, + "dependencies": { + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "dev": true + }, + "nodemailer": { + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.11.tgz", + "integrity": "sha512-BVZBDi+aJV4O38rxsUh164Dk1NCqgh6Cm0rQSb9SK/DHGll/DrCMnycVDD7msJgZCnmVa8ASo8EZzR7jsgTukQ==" + }, + "nodemon": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", + "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^4.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "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, + "optional": 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.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "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, + "optional": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.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, + "optional": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "prettier": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", + "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", + "dev": true + }, + "pretty-quick": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.0.0.tgz", + "integrity": "sha512-oIXlGQUcUxt3XpoNfQECEWvH1Q9PtKfelF2pdp6UvC1CSQ5QcB7gUYKu0kuJGlm3LMBZzJaO/vbRkxA61pWlcg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "execa": "^4.0.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.5", + "multimatch": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "optional": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "registry-auth-token": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", + "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "optional": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true + }, + "reselect": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", + "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==", + "dev": true + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "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, + "optional": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "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, + "optional": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, + "requires": { + "ret": "~0.1.10" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "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, + "optional": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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, + "optional": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": 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, + "optional": 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, + "optional": 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, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true, + "optional": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "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-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-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 + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "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, + "optional": 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, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "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, + "optional": 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, + "optional": 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, + "optional": 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, + "optional": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true + }, + "update-notifier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", + "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "optional": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2a23c24 --- /dev/null +++ b/package.json @@ -0,0 +1,87 @@ +{ + "name": "local-air", + "version": "1.0.0", + "description": "", + "main": "bin/main.js", + "scripts": { + "build": "rm -rf build && babel bin --out-dir ./dist --source-maps", + "dev": "nodemon --exec babel-node ./bin/main.js", + "start": "node ./dist/main.js", + "start-pm2": "pm2 start npm --name local-air -- start", + "stop-pm2": "pm2 stop local-air", + "restart-pm2": "pm2 restart local-air" + }, + "keywords": [ + "air quality", + "node" + ], + "author": "Dave Schumaker (https://dave.ly)", + "license": "MIT", + "babel": { + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "10" + } + } + ] + ], + "plugins": [ + "@babel/plugin-transform-regenerator", + [ + "module-resolver", + { + "alias": { + "~": ".", + "bin": "./bin" + } + } + ] + ] + }, + "mocha": { + "require": [ + "@babel/register", + "chai/register-expect" + ] + }, + "prettier": { + "arrowParens": "avoid", + "bracketSpacing": true, + "printWidth": 100, + "semi": true, + "singleQuote": true, + "tabWidth": 4, + "trailingComma": "none" + }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } + }, + "devDependencies": { + "@babel/cli": "7.10.5", + "@babel/core": "7.11.4", + "@babel/node": "7.10.5", + "@babel/plugin-transform-regenerator": "7.10.4", + "@babel/preset-env": "7.11.0", + "@babel/register": "7.10.5", + "babel-plugin-module-resolver": "4.0.0", + "chai": "4.2.0", + "husky": "4.2.5", + "nodemon": "2.0.4", + "prettier": "2.1.1", + "pretty-quick": "3.0.0" + }, + "dependencies": { + "core-js": "3.6.5", + "cron": "1.8.2", + "koa": "2.13.0", + "node-fetch": "2.6.0", + "node-localstorage": "2.1.6", + "nodemailer": "6.4.11", + "regenerator-runtime": "0.13.7" + } +}