From c4251e1afcb183e6e8ffdc6a22f586a85a1141c8 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 10 Mar 2019 13:25:56 -0400 Subject: [PATCH 001/855] Merge v2 to master: Google oauth fix for Google+ shutdown (#411) * Fix google auth for google+ shutdown (#410) * Install and use passport-google-oauth20 * Update google auth for new API * Update CHANGELOG * 2.8.1 * Install passport-google-oauth20 (merge conflict fix) --- CHANGELOG.md | 6 ++++++ server/middleware/passport.js | 23 ++++++++++++++--------- server/package-lock.json | 10 +++++----- server/package.json | 2 +- server/routes/oauth.js | 2 +- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d20c81672..3ee0842f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 2.8.1 + +### March 7, 2019 + +* Fix Google oauth for Google+ API shutdown + ## 2.8.0 ### October 17, 2018 diff --git a/server/middleware/passport.js b/server/middleware/passport.js index 80ba4d42a..d42097785 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -1,6 +1,6 @@ const passport = require('passport') const PassportLocalStrategy = require('passport-local').Strategy -const PassportGoogleStrategy = require('passport-google-oauth2').Strategy +const PassportGoogleStrategy = require('passport-google-oauth20').Strategy const BasicStrategy = require('passport-http').BasicStrategy const User = require('../models/User.js') const configUtil = require('../lib/config') @@ -89,7 +89,8 @@ if (googleClientId && googleClientSecret && publicUrl) { clientID: googleClientId, clientSecret: googleClientSecret, callbackURL: publicUrl + baseUrl + '/auth/google/callback', - passReqToCallback: true + // This option tells the strategy to use the userinfo endpoint instead + userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo?alt=json' }, passportGoogleStrategyHandler ) @@ -97,15 +98,22 @@ if (googleClientId && googleClientSecret && publicUrl) { } function passportGoogleStrategyHandler( - request, accessToken, refreshToken, profile, done ) { + const email = profile && profile._json && profile._json.email + + if (!email) { + return done(null, false, { + message: 'email not provided from Google' + }) + } + return Promise.all([ User.adminRegistrationOpen(), - User.findOneByEmail(profile.email), + User.findOneByEmail(email), configUtil.getHelper(db) ]) .then(data => { @@ -118,12 +126,9 @@ function passportGoogleStrategyHandler( }) } const whitelistedDomains = config.get('whitelistedDomains') - if ( - openAdminRegistration || - checkWhitelist(whitelistedDomains, profile.email) - ) { + if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { user = new User({ - email: profile.email, + email, role: openAdminRegistration ? 'admin' : 'editor', signupDate: new Date() }) diff --git a/server/package-lock.json b/server/package-lock.json index 654286742..58780b77b 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1871,12 +1871,12 @@ "pause": "0.0.1" } }, - "passport-google-oauth2": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/passport-google-oauth2/-/passport-google-oauth2-0.1.6.tgz", - "integrity": "sha1-39cBasdEn+J8/rJSrpdK/CMleg0=", + "passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", "requires": { - "passport-oauth2": "^1.1.2" + "passport-oauth2": "1.x.x" } }, "passport-http": { diff --git a/server/package.json b/server/package.json index 4016bfe1c..eb70d2185 100644 --- a/server/package.json +++ b/server/package.json @@ -58,7 +58,7 @@ "node-xlsx": "^0.11.2", "nodemailer": "^4.7.0", "passport": "^0.4.0", - "passport-google-oauth2": "^0.1.6", + "passport-google-oauth20": "^2.0.0", "passport-http": "^0.3.0", "passport-local": "^1.0.0", "pg": "^7.8.0", diff --git a/server/routes/oauth.js b/server/routes/oauth.js index eedcde7ba..98c07b2cc 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -4,7 +4,7 @@ const { baseUrl } = require('../lib/config').getPreDbConfig() router.get( '/auth/google', - passport.authenticate('google', { scope: ['email'] }) + passport.authenticate('google', { scope: ['profile email'] }) ) router.get( From 48024c3c6ad9019e63f33c1aadc29b0d5a225476 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 10 Mar 2019 20:22:59 -0400 Subject: [PATCH 002/855] Add mock driver (#412) * Initial mock implementation * Wrap up mock driver * Only show mock driver if in debug mode (or test) * Remove docker file and update readme * Update tests to use mock driver --- .travis.yml | 6 +- README.md | 38 ++-- docker-compose.yml | 11 - server/drivers/index.js | 4 + server/drivers/mock/index.js | 324 +++++++++++++++++++++++++++++ server/drivers/mock/test.js | 48 +++++ server/drivers/mock/test.sh | 2 + server/package.json | 2 +- server/test/api/query-result.js | 17 +- server/test/api/schema-info.js | 4 +- server/test/api/test-connection.js | 6 +- server/test/lib/config.js | 5 +- 12 files changed, 415 insertions(+), 52 deletions(-) delete mode 100644 docker-compose.yml create mode 100644 server/drivers/mock/index.js create mode 100644 server/drivers/mock/test.js create mode 100755 server/drivers/mock/test.sh diff --git a/.travis.yml b/.travis.yml index 0dbaa88b0..46d486b14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,13 +3,11 @@ language: node_js services: - docker node_js: - - '6' + - '8' before_install: - sudo service mysql stop - sudo service postgresql stop - - docker-compose pull - - docker-compose up -d - - npm i -g npm@5 + - npm i -g npm@6 cache: directories: - 'node_modules' diff --git a/README.md b/README.md index bd2922cb2..80b93813a 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ A docker image may be built using the Dockerfile located in `server` directory. npm start --prefix server ``` - In the other install frontend dependencies and start the devleopment server + In the other install frontend dependencies and start the development server ```sh npm start --prefix client @@ -109,35 +109,27 @@ npm run lint npm run fixlint ``` -### Optional step +### Mock driver -A docker-compose file with is provided to provide an empty postgres database to test with. -If you have docker installed, in a third terminal session you can do the following: +When SQLPad server is run in debug mode, a mock driver implementation is available to generate data. The data returned by the query run is determined by information parsed from the comment block. The rest of the query may be anything. -```sh -# Bring database containers up in background -docker-compose up - -# control-c will stop the databases in docker compose +Measure fields will contain random data. -# If you would like to run this in the background, run -docker-compose up -d +```sql +-- At least one dimension field is required. MUST include number of unique values +-- orderdate and orderdatetime should not be used at same time +-- dimensions = department 10, color 10, product 10, orderdate|orderdatetime 500 -# To bring database down from background -docker-compose down +-- Optional measures +-- measures = cost, revenue, profit -# To remove dangling containers volumes etc -docker system prune -``` +-- Optional order by. MUST be a dimension or measure returned and MUST include direction +-- orderby = department asc, product desc -To connect to the database within SQLPad during development use the following settings: +-- Optional limit +-- limit = 100 -``` -driver: postgres -host: localhost -database: sqlpad -username: sqlpad -password: sqlpad +SELECT * FROM the_actual_query_doesnt_matter ``` ## License diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 31b1643b9..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ -# This file is for development/test purposes only -# Eventually this will be replaced by mock driver implementation to not require docker for dev/tests -version: '3' -services: - postgres: - image: postgres:9.6-alpine - environment: - POSTGRES_USER: sqlpad - POSTGRES_DB: sqlpad - ports: - - "5432:5432" \ No newline at end of file diff --git a/server/drivers/index.js b/server/drivers/index.js index 1fe197633..c8ad465cf 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -95,6 +95,10 @@ requireValidate('../drivers/unixodbc', true) requireValidate('../drivers/vertica') requireValidate('../drivers/cassandra') +if (debug || process.env.SQLPAD_TEST === 'true') { + requireValidate('../drivers/mock') +} + /** * Run query using driver implementation of connection * @param {*} query diff --git a/server/drivers/mock/index.js b/server/drivers/mock/index.js new file mode 100644 index 000000000..465081fff --- /dev/null +++ b/server/drivers/mock/index.js @@ -0,0 +1,324 @@ +const _ = require('lodash') +const moment = require('moment') +const { formatSchemaQueryResults } = require('../utils') + +const id = 'mock' +const name = 'Mock driver' + +const fieldValues = { + color: [ + 'azure', + 'cyan', + 'indigo', + 'lime', + 'orchid', + 'red', + 'tan', + 'turquoise', + 'violet', + 'white' + ], + department: [ + 'Automotive', + 'Beauty', + 'Computers', + 'Games', + 'Health', + 'Industrial', + 'Kids', + 'Music', + 'Shoes', + 'Toys' + ], + product: [ + 'Awesome Wooden Ball', + 'Fantastic Rubber Tuna', + 'Generic Wooden Keyboard', + 'Handmade Granite Tuna', + 'Incredible Fresh Mouse', + 'Incredible Rubber Pants', + 'Refined Frozen Fish', + 'Rustic Concrete Chips', + 'Rustic Metal Bacon', + 'Unbranded Granite Shirt' + ], + orderdate: Array(500) + .fill(true) + .map((value, index) => + moment + .utc('2019-01-01') + .add(index, 'day') + .toDate() + ), + orderdatetime: Array(500) + .fill(true) + .map((value, index) => + moment + .utc('2019-01-01') + .add(index, 'hour') + .toDate() + ) +} + +function cartesianify(rows, field) { + const newRows = [] + if (!rows.length) { + field.values.forEach(value => { + newRows.push({ [field.name]: value }) + }) + } else { + rows.forEach(row => { + field.values.forEach(value => { + const newRow = Object.assign({}, row, { [field.name]: value }) + newRows.push(newRow) + }) + }) + } + + return newRows +} + +/** + * Run query for connection + * Should return { rows, incomplete } + * @param {string} query + * @param {object} connection + */ +async function runQuery(query, connection) { + // Connection here doesn't actually matter. + // Someday this mock could get fancy and change output based on some connection value + // For now validate that it is getting passed + const { maxRows } = connection + + // To determine the content of this mock query, inspect values from comments + // Example format + // -- dimensions = department 10, color 10, product 10, orderdate|orderdatetime 500 + // -- measures = cost, revenue, profit, + // -- orderby = department asc, product desc + // -- limit = 100 + const dimensions = [] + const measures = [] + const orderByFields = [] + const orderByDirections = [] + let limit + + query + .split('\n') + .map(line => line.trim()) + .filter(line => line.startsWith('--')) + .map(line => line.replace('--', '')) + .forEach(line => { + const [fieldType, fieldData] = line + .split('=') + .map(p => p.trim().toLowerCase()) + + if (!fieldData) { + return + } + + // fieldData is something like , + // or 100 + fieldData + .split(',') + .map(p => p.trim()) + .forEach(part => { + if (fieldType === 'limit') { + limit = parseInt(part) + } else if (fieldType === 'dimensions') { + const [fieldName, numString] = part.split(' ').map(p => p.trim()) + if (!fieldValues[fieldName]) { + throw new Error( + `Unknown ${fieldName}. must be one of: ${Object.keys( + fieldValues + ).join(', ')}` + ) + } + dimensions.push({ + name: fieldName, + values: fieldValues[fieldName].slice(0, parseInt(numString)) + }) + } else if (fieldType === 'measures') { + measures.push(part) + } else if (fieldType === 'orderby') { + const [fieldName, direction] = part.split(' ').map(p => p.trim()) + if (!direction) { + throw new Error('direction required. Must be asc or desc') + } + orderByFields.push(fieldName) + orderByDirections.push(direction) + } else { + throw new Error( + `Unknown ${fieldType}. Must be dimensions, measures, orderby, or limit` + ) + } + }) + }) + + if (!dimensions.length) { + throw new Error('dimensions required') + } + + // Assemble dimensions and things + let rows = [] + dimensions.forEach(dimension => { + rows = cartesianify(rows, dimension) + }) + + if (measures.length) { + rows.forEach((row, rowIndex) => { + measures.forEach((measure, measureIndex) => { + const date = row.orderdate || row.orderdatetime + if (date) { + const doy = moment.utc(date).dayOfYear() + row[measure] = 10 + Math.round(doy * Math.random()) + } else { + row[measure] = Math.round(Math.random() * 1000) + } + }) + }) + } + + if (orderByFields.length) { + rows = _.orderBy(rows, orderByFields, orderByDirections) + } + + if (limit) { + rows = rows.slice(0, limit) + } + + return { rows: rows.slice(0, maxRows), incomplete: rows.length > maxRows } +} + +/** + * Test connectivity of connection + * @param {*} connection + */ +function testConnection(connection) { + const query = ` + -- dimensions = department 1 + -- measures = price + ` + return runQuery(query, connection) +} + +const schemaRows = [] +const columns = [ + { name: 'product', type: 'TEXT', description: 'item sold' }, + { name: 'color', type: 'TEXT', description: 'color of item' }, + { name: 'department', type: 'TEXT', description: 'department of sale' }, + { name: 'orderdate', type: 'TIMESTAMP', description: 'date of order' }, + { + name: 'orderdatetime', + type: 'TIMESTAMP', + description: 'date and time of order' + } +] +Array(500) + .fill(true) + .forEach((value, tableIndex) => { + columns.forEach(column => { + schemaRows.push({ + table_schema: 'public', + table_name: 'fake_sales_table_' + tableIndex, + column_name: column.name, + data_type: column.type, + column_description: column.description + }) + }) + }) + +/** + * Get schema for connection + * @param {*} connection + */ +function getSchema(connection) { + const fakeSchemaQueryResult = { + rows: schemaRows, + incomplete: false + } + return Promise.resolve().then(() => + formatSchemaQueryResults(fakeSchemaQueryResult) + ) +} + +const fields = [ + { + key: 'host', + formType: 'TEXT', + label: 'Host/Server/IP Address' + }, + { + key: 'port', + formType: 'TEXT', + label: 'Port (optional)' + }, + { + key: 'database', + formType: 'TEXT', + label: 'Database' + }, + { + key: 'username', + formType: 'TEXT', + label: 'Database Username' + }, + { + key: 'password', + formType: 'PASSWORD', + label: 'Database Password' + }, + { + key: 'useSsl', + formType: 'CHECKBOX', + label: 'Use SSL' + }, + { + key: 'certPath', + formType: 'TEXT', + label: 'Database Certificate Path' + }, + { + key: 'keyPath', + formType: 'TEXT', + label: 'Database Key Path' + }, + { + key: 'caPath', + formType: 'TEXT', + label: 'Database CA Path' + }, + { + key: 'useSocks', + formType: 'CHECKBOX', + label: 'Connect through SOCKS proxy' + }, + { + key: 'socksHost', + formType: 'TEXT', + label: 'Proxy hostname' + }, + { + key: 'socksPort', + formType: 'TEXT', + label: 'Proxy port' + }, + { + key: 'socksUsername', + formType: 'TEXT', + label: 'Username for socks proxy' + }, + { + key: 'socksPassword', + formType: 'TEXT', + label: 'Password for socks proxy' + } +] + +module.exports = { + id, + name, + fields, + getSchema, + runQuery, + testConnection +} diff --git a/server/drivers/mock/test.js b/server/drivers/mock/test.js new file mode 100644 index 000000000..1ec29372b --- /dev/null +++ b/server/drivers/mock/test.js @@ -0,0 +1,48 @@ +const assert = require('assert') +const mock = require('./index.js') + +const connection = { + name: 'test postgres', + driver: 'mock', + host: 'localhost', + database: 'sqlpad', + username: 'sqlpad', + password: 'sqlpad', + maxRows: 100 +} + +describe('drivers/mock', function() { + it('tests connection', function() { + return mock.testConnection(connection) + }) + + it('getSchema()', function() { + return mock.getSchema(connection).then(schemaInfo => { + // Should probably create tables and validate them here + // For now this is a smoke test of sorts + assert(schemaInfo) + }) + }) + + it('runQuery under limit', function() { + const c = Object.assign({}, connection, { maxRows: 10000 }) + const query = ` + -- dimensions = product 5 + ` + return mock.runQuery(query, c).then(results => { + assert(!results.incomplete, 'not incomplete') + assert.equal(results.rows.length, 5, 'row length') + }) + }) + + it('runQuery over limit', function() { + const c = Object.assign({}, connection, { maxRows: 10 }) + const query = ` + -- dimensions = product 10, color 10, orderdate 500 + ` + return mock.runQuery(query, c).then(results => { + assert(results.incomplete, 'incomplete') + assert.equal(results.rows.length, 10, 'row length') + }) + }) +}) diff --git a/server/drivers/mock/test.sh b/server/drivers/mock/test.sh new file mode 100755 index 000000000..565d7fe89 --- /dev/null +++ b/server/drivers/mock/test.sh @@ -0,0 +1,2 @@ +#!/bin/bash +npx mocha ./test.js \ No newline at end of file diff --git a/server/package.json b/server/package.json index eb70d2185..c929711c9 100644 --- a/server/package.json +++ b/server/package.json @@ -29,7 +29,7 @@ "scripts": { "prepublishOnly": "../scripts/build.sh", "start": "node-dev server.js --dir ../db --port 3010 --debug --base-url '/sqlpad'", - "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' mocha test --timeout 10000 --recursive --exit" + "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_TEST='true' mocha test --timeout 10000 --recursive --exit" }, "dependencies": { "bcrypt-nodejs": "0.0.3", diff --git a/server/test/api/query-result.js b/server/test/api/query-result.js index 684bb911b..f4fdef7b4 100644 --- a/server/test/api/query-result.js +++ b/server/test/api/query-result.js @@ -1,7 +1,12 @@ const assert = require('assert') const utils = require('../utils') -const queryText = 'SELECT * FROM generate_series(1, 10) gs' +const queryText = ` + -- dimensions = department 10, orderdate 10 + -- measures = cost, revenue, profit + -- orderby = department desc, orderdate asc + -- limit = 100 +` function validateQueryResult(queryResult) { assert(queryResult.id, 'id') @@ -10,13 +15,13 @@ function validateQueryResult(queryResult) { assert(queryResult.stopTime, 'stopTime') assert(queryResult.queryRunTime >= 0, 'queryRunTime') assert(Array.isArray(queryResult.fields), 'fields') - assert.equal(queryResult.fields.length, 1, 'fields length') - assert.equal(queryResult.fields[0], 'gs', 'field gs') + assert.equal(queryResult.fields.length, 5, 'fields length') + assert.equal(queryResult.fields[0], 'department', 'field department') assert.equal(queryResult.incomplete, false, 'incomplete') assert(queryResult.meta, 'meta') - assert(queryResult.meta.gs, 'meta.gs') + assert(queryResult.meta.department, 'meta.department') assert(Array.isArray(queryResult.rows), 'rows is array') - assert.equal(queryResult.rows.length, 10, 'rows length') + assert.equal(queryResult.rows.length, 100, 'rows length') } describe('api/query-result', function() { @@ -29,7 +34,7 @@ describe('api/query-result', function() { return utils .post('admin', '/api/connections', { name: 'test postgres', - driver: 'postgres', + driver: 'mock', host: 'localhost', database: 'sqlpad', username: 'sqlpad', diff --git a/server/test/api/schema-info.js b/server/test/api/schema-info.js index 967dda682..732a97bc3 100644 --- a/server/test/api/schema-info.js +++ b/server/test/api/schema-info.js @@ -8,7 +8,7 @@ describe('api/schema-info', function() { return utils.resetWithUser().then(() => { return utils .post('admin', '/api/connections', { - driver: 'postgres', + driver: 'mock', name: 'sqlpad', host: 'localhost', database: 'sqlpad', @@ -22,8 +22,6 @@ describe('api/schema-info', function() { }) }) - // This test fails in TravisCI during Cache.findOneByCacheKey(cacheKey) - // This works locally however it('Gets schema-info', function() { return utils .get('admin', `/api/schema-info/${connection._id}`) diff --git a/server/test/api/test-connection.js b/server/test/api/test-connection.js index 300494bc0..04e7d600c 100644 --- a/server/test/api/test-connection.js +++ b/server/test/api/test-connection.js @@ -6,11 +6,11 @@ describe('api/test-connection', function() { return utils.resetWithUser() }) - it('tests postgres', function() { + it('tests connection', function() { return utils .post('admin', '/api/test-connection', { - name: 'test postgres', - driver: 'postgres', + name: 'test mock', + driver: 'mock', host: 'localhost', database: 'sqlpad', username: 'sqlpad', diff --git a/server/test/lib/config.js b/server/test/lib/config.js index 122f5f279..764ecf8f5 100644 --- a/server/test/lib/config.js +++ b/server/test/lib/config.js @@ -43,9 +43,12 @@ describe('lib/config', function() { // process.env.SQLPAD_DEBUG = 'FALSE' // process.env.GOOGLE_CLIENT_ID = 'google-client-id' + // TODO current config helper test will pick up saved sqlpad config on system if it exists + // This makes testing difficult when a sqlpad configuration is saved. + // Loading a config should likely be explicit it('.get() should get a value provided by default', function() { return configUtil.getHelper(db).then(config => { - assert.equal(config.get('port'), 80, 'port=80') + assert.equal(config.get('httpsPort'), 443, 'httpsPort=443') }) }) it('.get() should only accept key in config items', function() { From 872136bfd4df1e61755bf40aee1dd32c2c855247 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 10 Mar 2019 20:32:14 -0400 Subject: [PATCH 003/855] Update dependencies --- client/package-lock.json | 5624 +++++++++++++++++--------------------- client/package.json | 14 +- package-lock.json | 312 +-- package.json | 10 +- server/package-lock.json | 92 +- server/package.json | 10 +- 6 files changed, 2672 insertions(+), 3390 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index a15167972..51a6ddc53 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@ant-design/icons": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-1.1.16.tgz", - "integrity": "sha512-0zNVP5JYBJkfMi9HotN6QBQjF3SFmUlumJNJXZIH+pZWp/5EbrCczzlG3YTmBWoyRHAsuOGIjSFIy8v/76DTPg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-1.2.1.tgz", + "integrity": "sha512-gQx3nH6m1xvebOWh5xibhzVK02aoqHY7JUXUS4doAidSDRWsj5iwKC8Gq9DemDZ4T+bW6xO7jJZN1UsbvcW7Uw==" }, "@ant-design/icons-react": { "version": "1.1.2", @@ -27,17 +27,17 @@ } }, "@babel/core": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.6.tgz", - "integrity": "sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", + "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.6", - "@babel/helpers": "^7.1.5", - "@babel/parser": "^7.1.6", - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.1.6", + "@babel/generator": "^7.2.2", + "@babel/helpers": "^7.2.0", + "@babel/parser": "^7.2.2", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.2.2", + "@babel/types": "^7.2.2", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", @@ -48,13 +48,13 @@ } }, "@babel/generator": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", - "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", + "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", "requires": { - "@babel/types": "^7.2.2", + "@babel/types": "^7.3.4", "jsesc": "^2.5.1", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -77,11 +77,11 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", - "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", "requires": { - "@babel/types": "^7.0.0", + "@babel/types": "^7.3.0", "esutils": "^2.0.0" } }, @@ -95,6 +95,19 @@ "@babel/types": "^7.0.0" } }, + "@babel/helper-create-class-features-plugin": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz", + "integrity": "sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.0.0" + } + }, "@babel/helper-define-map": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", @@ -203,14 +216,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", - "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz", + "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==", "requires": { "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.2.3", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.3.4", + "@babel/types": "^7.3.4" } }, "@babel/helper-simple-access": { @@ -242,13 +255,13 @@ } }, "@babel/helpers": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz", - "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", "requires": { "@babel/template": "^7.1.2", "@babel/traverse": "^7.1.5", - "@babel/types": "^7.2.0" + "@babel/types": "^7.3.0" } }, "@babel/highlight": { @@ -262,9 +275,9 @@ } }, "@babel/parser": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", - "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", + "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -277,27 +290,22 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz", - "integrity": "sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz", + "integrity": "sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/plugin-syntax-class-properties": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-proposal-decorators": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.6.tgz", - "integrity": "sha512-U42f8KhUbtlhUDyV/wK4Rq/wWh8vWyttYABckG/v0vVnMPvayOewZC/83CbVdmyP+UhEqI368FEQ7hHMfhBpQA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz", + "integrity": "sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==", "requires": { + "@babel/helper-create-class-features-plugin": "^7.3.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/plugin-syntax-decorators": "^7.1.0" + "@babel/plugin-syntax-decorators": "^7.2.0" } }, "@babel/plugin-proposal-json-strings": { @@ -310,9 +318,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz", + "integrity": "sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -345,14 +353,6 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz", - "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, "@babel/plugin-syntax-decorators": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", @@ -362,9 +362,9 @@ } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz", - "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -410,9 +410,9 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz", - "integrity": "sha512-WhKr6yu6yGpGcNMVgIBuI9MkredpVc7Y3YR4UzEZmDztHoL6wV56YBHLhWnjO1EvId1B32HrD3DRFc+zSoKI1g==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", + "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -426,9 +426,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz", + "integrity": "sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -444,25 +444,25 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz", + "integrity": "sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz", + "integrity": "sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-define-map": "^7.1.0", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-replace-supers": "^7.3.4", "@babel/helper-split-export-declaration": "^7.0.0", "globals": "^11.1.0" } @@ -476,9 +476,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", - "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", + "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -511,12 +511,12 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.1.6.tgz", - "integrity": "sha512-0tyFAAjJmnRlr8MVJV39ASn1hv+PbdVP71hf7aAseqLfQ0o9QXk9htbMbq7/ZYXnUIp6gDw0lUUP0+PQMbbtmg==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz", + "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0" + "@babel/plugin-syntax-flow": "^7.2.0" } }, "@babel/plugin-transform-for-of": { @@ -564,9 +564,9 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", - "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz", + "integrity": "sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw==", "requires": { "@babel/helper-hoist-variables": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -581,6 +581,14 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", + "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", + "requires": { + "regexp-tree": "^0.1.0" + } + }, "@babel/plugin-transform-new-target": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", @@ -599,9 +607,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz", + "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==", "requires": { "@babel/helper-call-delegate": "^7.1.0", "@babel/helper-get-function-arity": "^7.0.0", @@ -626,11 +634,11 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz", - "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", "requires": { - "@babel/helper-builder-react-jsx": "^7.0.0", + "@babel/helper-builder-react-jsx": "^7.3.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.2.0" } @@ -654,17 +662,17 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz", + "integrity": "sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==", "requires": { - "regenerator-transform": "^0.13.3" + "regenerator-transform": "^0.13.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz", - "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", + "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -715,9 +723,9 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz", - "integrity": "sha512-EnI7i2/gJ7ZNr2MuyvN2Hu+BHJENlxWte5XygPvfj/MbvtOkWor9zcnHpMMQL2YYaaCcqtIvJUyJ7QVfoGs7ew==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.3.2.tgz", + "integrity": "sha512-Pvco0x0ZSCnexJnshMfaibQ5hnK8aUHSvjCQhC1JR8eeg+iBwt0AtCO7gWxJ358zZevuf9wPSO5rv+WJcbHPXQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" @@ -734,25 +742,26 @@ } }, "@babel/preset-env": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz", - "integrity": "sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", "@babel/plugin-transform-computed-properties": "^7.2.0", "@babel/plugin-transform-destructuring": "^7.2.0", "@babel/plugin-transform-dotall-regex": "^7.2.0", @@ -763,12 +772,13 @@ "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.2.0", "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", "@babel/plugin-transform-new-target": "^7.0.0", "@babel/plugin-transform-object-super": "^7.2.0", "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.3.4", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", "@babel/plugin-transform-sticky-regex": "^7.2.0", @@ -828,28 +838,28 @@ } }, "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", + "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", + "@babel/generator": "^7.3.4", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", + "@babel/parser": "^7.3.4", + "@babel/types": "^7.3.4", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/types": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", - "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", + "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "to-fast-properties": "^2.0.0" } }, @@ -872,199 +882,329 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.0.0.tgz", + "integrity": "sha512-PDvHV2WhSGCSExp+eIMEKxYd1Q0SBvXLb4gAOXbdh0dswHFFgXWzxGjCmx5aln4qGrhkuN81khzYzR/44DYaMA==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.0.3.tgz", + "integrity": "sha512-fpG7AzzJxz1tc8ITYS1jCAt1cq4ydK2R+sx//BMTJgvOjfk91M5GiqFolP8aYTzLcum92IGNAVFS3zEcucOQEA==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.0.0.tgz", + "integrity": "sha512-nBGVl6LzXTdk1c6w3rMWcjq3mYGz+syWc5b3CdqAiEeY/nswYDoW/cnGUKKC8ofD6/LaG+G/IUnfv3jKoHz43A==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.0.0.tgz", + "integrity": "sha512-ejQqpTfORy6TT5w1x/2IQkscgfbtNFjitcFDu63GRz7qfhVTYhMdiJvJ1+Aw9hmv9bO4tXThGQDr1IF5lIvgew==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.0.0.tgz", + "integrity": "sha512-OE6GT9WRKWqd0Dk6NJ5TYXTF5OxAyn74+c/D+gTLbCXnK2A0luEXuwMbe5zR5Px4A/jow2OeEBboTENl4vtuQg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.0.0.tgz", + "integrity": "sha512-QeDRGHXfjYEBTXxV0TsjWmepsL9Up5BOOlMFD557x2JrSiVGUn2myNxHIrHiVW0+nnWnaDcrkjg/jUvbJ5nKCg==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.0.0.tgz", + "integrity": "sha512-c6eE6ovs14k6dmHKoy26h7iRFhjWNnwYVrDWIPfouVm/gcLIeMw/ME4i91O5LEfaDHs6kTRCcVpbAVbNULZOtw==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.1.0.tgz", + "integrity": "sha512-uulxdx2p3nrM2BkrtADQHK8IhEzCxdUILfC/ddvFC8tlFWuKiA3ych8C6q0ulyQHq34/3hzz+3rmUbhWF9redg==" + }, + "@svgr/babel-preset": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.1.0.tgz", + "integrity": "sha512-Nat5aJ3VO3LE8KfMyIbd3sGWnaWPiFCeWIdEV+lalga0To/tpmzsnPDdnrR9fNYhvSSLJbwhU/lrLYt9wXY0ZQ==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^4.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^4.0.3", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^4.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^4.0.0", + "@svgr/babel-plugin-transform-svg-component": "^4.1.0" + } + }, "@svgr/core": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-2.4.1.tgz", - "integrity": "sha512-2i1cUbjpKt1KcIP05e10vkmu9Aedp32EFqVcSQ08onbB8lVxJqMPci3Hr54aI14S9cLg4JdcpO0D35HHUtT8oQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.1.0.tgz", + "integrity": "sha512-ahv3lvOKuUAcs0KbQ4Jr5fT5pGHhye4ew8jZVS4lw8IQdWrbG/o3rkpgxCPREBk7PShmEoGQpteeXVwp2yExuQ==", "requires": { + "@svgr/plugin-jsx": "^4.1.0", "camelcase": "^5.0.0", - "cosmiconfig": "^5.0.6", - "h2x-core": "^1.1.0", - "h2x-plugin-jsx": "^1.1.0", + "cosmiconfig": "^5.0.7" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.1.0.tgz", + "integrity": "sha512-tdkEZHmigYYiVhIEzycAMKN5aUSpddUnjr6v7bPwaNTFuSyqGUrpCg1JlIGi7PUaaJVHbn6whGQMGUpKOwT5nw==", + "requires": { + "@babel/types": "^7.1.6" + } + }, + "@svgr/plugin-jsx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.1.0.tgz", + "integrity": "sha512-xwu+9TGziuN7cu7p+vhCw2EJIfv8iDNMzn2dR0C7fBYc8q+SRtYTcg4Uyn8ZWh6DM+IZOlVrS02VEMT0FQzXSA==", + "requires": { + "@babel/core": "^7.1.6", + "@svgr/babel-preset": "^4.1.0", + "@svgr/hast-util-to-babel-ast": "^4.1.0", + "rehype-parse": "^6.0.0", + "unified": "^7.0.2", + "vfile": "^3.0.1" + } + }, + "@svgr/plugin-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.0.3.tgz", + "integrity": "sha512-MgL1CrlxvNe+1tQjPUc2bIJtsdJOIE5arbHlPgW+XVWGjMZTUcyNNP8R7/IjM2Iyrc98UJY+WYiiWHrinnY9ZQ==", + "requires": { + "cosmiconfig": "^5.0.7", "merge-deep": "^3.0.2", - "prettier": "^1.14.2", - "svgo": "^1.0.5" + "svgo": "^1.1.1" } }, "@svgr/webpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-2.4.1.tgz", - "integrity": "sha512-sMHYq0zbMtSHcc9kVfkYI2zrl88u4mKGyQLgKt7r+ul5nITcncm/EPBhzEUrJY5izdlaU6EvyH8zOhZnfaSmOA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", + "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", "requires": { - "@babel/core": "^7.0.1", + "@babel/core": "^7.1.6", "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.0.0", + "@babel/preset-env": "^7.1.6", "@babel/preset-react": "^7.0.0", - "@svgr/core": "^2.4.1", + "@svgr/core": "^4.1.0", + "@svgr/plugin-jsx": "^4.1.0", + "@svgr/plugin-svgo": "^4.0.3", "loader-utils": "^1.1.0" } }, + "@types/node": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.0.tgz", + "integrity": "sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==" + }, + "@types/prop-types": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.0.tgz", + "integrity": "sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==" + }, "@types/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" }, + "@types/react": { + "version": "16.8.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.7.tgz", + "integrity": "sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA==", + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/react-slick": { + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.3.tgz", + "integrity": "sha512-B6wU5ynINOolrByhoeJ448qZPjCFPcuhyQI5sjihjG8gQJuoTH6a4YQhuDm4umvbRVielJQANhptc8hmxA85IA==", + "requires": { + "@types/react": "*" + } + }, "@types/tapable": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==" }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } + }, + "@types/vfile-message": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", + "requires": { + "@types/node": "*", + "@types/unist": "*" + } + }, "@webassemblyjs/ast": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", - "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", "requires": { - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", - "mamacro": "^0.0.3" + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", - "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==" }, "@webassemblyjs/helper-api-error": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", - "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==" }, "@webassemblyjs/helper-buffer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", - "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", - "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", "requires": { - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/wast-printer": "1.7.11" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", - "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==" }, "@webassemblyjs/helper-module-context": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", - "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", - "requires": { - "mamacro": "^0.0.3" - } + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==" }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", - "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", - "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" } }, "@webassemblyjs/ieee754": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", - "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", - "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", "requires": { "@xtuc/long": "4.2.1" } }, "@webassemblyjs/utf8": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", - "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", - "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/helper-wasm-section": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-opt": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", - "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", - "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", - "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", - "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", - "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/floating-point-hex-parser": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-code-frame": "1.7.6", - "@webassemblyjs/helper-fsm": "1.7.6", - "@xtuc/long": "4.2.1", - "mamacro": "^0.0.3" + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", - "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", "@xtuc/long": "4.2.1" } }, @@ -1093,9 +1233,9 @@ } }, "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==" + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==" }, "acorn-dynamic-import": { "version": "3.0.0", @@ -1145,9 +1285,9 @@ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" }, "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -1161,9 +1301,9 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" }, "alphanum-sort": { "version": "1.0.2", @@ -1171,14 +1311,14 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-html": { "version": "0.0.7", @@ -1207,22 +1347,24 @@ } }, "antd": { - "version": "3.12.3", - "resolved": "https://registry.npmjs.org/antd/-/antd-3.12.3.tgz", - "integrity": "sha512-fKLqE5rqiAqKwi3nT8lopYZFj/Kbc3UCEkX4EsZOh8ZZHVNGirvZofRxLt4smpHmpj6NLbhR6va/kXLFe35RiQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/antd/-/antd-3.15.0.tgz", + "integrity": "sha512-gSoVmQN7rfYmhfpv0dL2sL9gk0Pu9JHgGiExjLJZaSnbPjpCOTAYjIzxG/oo8GzCSeK5abgN5F1saWR5ggLVFQ==", "requires": { - "@ant-design/icons": "~1.1.16", + "@ant-design/icons": "~1.2.0", "@ant-design/icons-react": "~1.1.2", + "@types/react-slick": "^0.23.3", "array-tree-filter": "^2.1.0", "babel-runtime": "6.x", "classnames": "~2.2.6", + "copy-to-clipboard": "^3.0.8", "create-react-class": "^15.6.3", "create-react-context": "0.2.2", "css-animation": "^1.5.0", "dom-closest": "^0.2.0", "enquire.js": "^2.1.6", "lodash": "^4.17.11", - "moment": "^2.22.2", + "moment": "^2.24.0", "omit.js": "^1.0.0", "prop-types": "^15.6.2", "raf": "^3.4.0", @@ -1230,28 +1372,28 @@ "rc-calendar": "~9.10.3", "rc-cascader": "~0.17.0", "rc-checkbox": "~2.1.5", - "rc-collapse": "~1.10.2", + "rc-collapse": "~1.11.1", "rc-dialog": "~7.3.0", "rc-drawer": "~1.7.6", "rc-dropdown": "~2.4.1", "rc-editor-mention": "^1.1.7", "rc-form": "^2.4.0", - "rc-input-number": "~4.3.7", + "rc-input-number": "~4.4.0", "rc-menu": "~7.4.12", "rc-notification": "~3.3.0", "rc-pagination": "~1.17.7", - "rc-progress": "~2.2.6", + "rc-progress": "~2.3.0", "rc-rate": "~2.5.0", - "rc-select": "^8.6.7", - "rc-slider": "~8.6.3", + "rc-select": "~9.0.0", + "rc-slider": "~8.6.5", "rc-steps": "~3.3.0", - "rc-switch": "~1.8.0", + "rc-switch": "~1.9.0", "rc-table": "~6.4.0", - "rc-tabs": "~9.5.2", - "rc-time-picker": "~3.5.0", + "rc-tabs": "~9.6.0", + "rc-time-picker": "~3.6.1", "rc-tooltip": "~3.7.3", "rc-tree": "~1.14.6", - "rc-tree-select": "~2.5.0", + "rc-tree-select": "~2.6.0", "rc-trigger": "^2.6.2", "rc-upload": "~2.6.0", "rc-util": "^4.5.1", @@ -1462,6 +1604,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -1707,11 +1854,11 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "async-each": { @@ -1743,42 +1890,22 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { - "version": "9.4.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.5.tgz", - "integrity": "sha512-M602C0ZxzFpJKqD4V6eq2j+K5CkzlhekCrcQupJmAOrPEZjWJyj/wSeo6qRSNoN6M3/9mtLPQqTTrABfReytQg==", + "version": "9.4.10", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.10.tgz", + "integrity": "sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==", "requires": { - "browserslist": "^4.4.0", - "caniuse-lite": "^1.0.30000928", + "browserslist": "^4.4.2", + "caniuse-lite": "^1.0.30000940", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.11", + "postcss": "^7.0.14", "postcss-value-parser": "^3.3.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -1924,11 +2051,11 @@ } }, "babel-loader": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz", - "integrity": "sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", + "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", "requires": { - "find-cache-dir": "^1.0.0", + "find-cache-dir": "^2.0.0", "loader-utils": "^1.0.2", "mkdirp": "^0.5.1", "util.promisify": "^1.0.0" @@ -1967,18 +2094,18 @@ "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=" }, "babel-plugin-macros": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz", - "integrity": "sha512-NBVpEWN4OQ/bHnu1fyDaAaTPAjnhXCEPqr1RwqxrU7b6tZ2hypp+zX4hlNfmVGfClD5c3Sl6Hfj5TJNF5VG5aA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.0.tgz", + "integrity": "sha512-BWw0lD0kVZAXRD3Od1kMrdmfudqzDzYv2qrN3l2ISR1HVp1EgLKfbOrYV9xmY5k3qx3RIu5uPAUZZZHpo0o5Iw==", "requires": { "cosmiconfig": "^5.0.5", "resolve": "^1.8.1" } }, "babel-plugin-named-asset-import": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.0.tgz", - "integrity": "sha512-to6Shd/r8fMRRg/MaOhDNfqpuXfjlQx3ypWDG6jh4ESCVZDJCgdgIalZbrnVlBPGgH/QeyHMjnGb2W+JJiy+NQ==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.1.tgz", + "integrity": "sha512-vzZlo+yEB5YHqI6CRRTDojeT43J3Wf3C/MVkZW5UlbSeIIVUYRKtxaFT2L/VTv9mbIyatCW39+9g/SZolvwRUQ==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -1995,9 +2122,9 @@ } }, "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.20.tgz", - "integrity": "sha512-bWQ8e7LsgdFpyHU/RabjDAjVhL7KLAJXEt0nb0LANFje8YAGA8RlZv88a72aCswOxELWULkYuJqfFoKgs58Tng==" + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-jest": { "version": "23.2.0", @@ -2009,44 +2136,44 @@ } }, "babel-preset-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-7.0.0.tgz", - "integrity": "sha512-LQKCB3xxdhAlRbk6IIZdO4ry1yA8gKGVV4phjOIgCEQr3oyaLPXf2j+lfD0zljOE2wkN2axRGOLTzdUPzVDO4w==", - "requires": { - "@babel/core": "7.1.6", - "@babel/plugin-proposal-class-properties": "7.1.0", - "@babel/plugin-proposal-decorators": "7.1.6", - "@babel/plugin-proposal-object-rest-spread": "7.0.0", - "@babel/plugin-syntax-dynamic-import": "7.0.0", - "@babel/plugin-transform-classes": "7.1.0", - "@babel/plugin-transform-destructuring": "7.1.3", - "@babel/plugin-transform-flow-strip-types": "7.1.6", - "@babel/plugin-transform-react-constant-elements": "7.0.0", - "@babel/plugin-transform-react-display-name": "7.0.0", - "@babel/plugin-transform-runtime": "7.1.0", - "@babel/preset-env": "7.1.6", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-7.0.2.tgz", + "integrity": "sha512-mwCk/u2wuiO8qQqblN5PlDa44taY0acq7hw6W+a70W522P7a9mIcdggL1fe5/LgAT7tqCq46q9wwhqaMoYKslQ==", + "requires": { + "@babel/core": "7.2.2", + "@babel/plugin-proposal-class-properties": "7.3.0", + "@babel/plugin-proposal-decorators": "7.3.0", + "@babel/plugin-proposal-object-rest-spread": "7.3.2", + "@babel/plugin-syntax-dynamic-import": "7.2.0", + "@babel/plugin-transform-classes": "7.2.2", + "@babel/plugin-transform-destructuring": "7.3.2", + "@babel/plugin-transform-flow-strip-types": "7.2.3", + "@babel/plugin-transform-react-constant-elements": "7.2.0", + "@babel/plugin-transform-react-display-name": "7.2.0", + "@babel/plugin-transform-runtime": "7.2.0", + "@babel/preset-env": "7.3.1", "@babel/preset-react": "7.0.0", "@babel/preset-typescript": "7.1.0", - "@babel/runtime": "7.1.5", - "babel-loader": "8.0.4", + "@babel/runtime": "7.3.1", + "babel-loader": "8.0.5", "babel-plugin-dynamic-import-node": "2.2.0", - "babel-plugin-macros": "2.4.2", - "babel-plugin-transform-react-remove-prop-types": "0.4.20" + "babel-plugin-macros": "2.5.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { "@babel/plugin-proposal-object-rest-spread": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz", - "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", + "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0" + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" } }, "@babel/plugin-transform-classes": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz", - "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", + "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-define-map": "^7.1.0", @@ -2058,78 +2185,68 @@ "globals": "^11.1.0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz", - "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.0.0.tgz", - "integrity": "sha512-z8yrW4KCVcqPYr0r9dHXe7fu3daLzn0r6TQEFoGbXahdrzEwT1d1ux+/EnFcqIHv9uPilUlnRnPIUf7GMO0ehg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", - "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, "@babel/preset-env": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.6.tgz", - "integrity": "sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", + "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.1.0", - "@babel/plugin-proposal-json-strings": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.0.0", - "@babel/plugin-syntax-async-generators": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.1.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.1.5", - "@babel/plugin-transform-classes": "^7.1.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-dotall-regex": "^7.0.0", - "@babel/plugin-transform-duplicate-keys": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.1.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.1.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-amd": "^7.1.0", - "@babel/plugin-transform-modules-commonjs": "^7.1.0", - "@babel/plugin-transform-modules-systemjs": "^7.0.0", - "@babel/plugin-transform-modules-umd": "^7.1.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.2.0", + "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.1.0", - "@babel/plugin-transform-parameters": "^7.1.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typeof-symbol": "^7.0.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "browserslist": "^4.1.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.3.0" } + }, + "@babel/runtime": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", + "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" } } }, @@ -2273,6 +2390,11 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "bail": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2368,9 +2490,9 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==" }, "bluebird": { "version": "3.5.3", @@ -2566,13 +2688,13 @@ } }, "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", + "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" + "caniuse-lite": "^1.0.30000939", + "electron-to-chromium": "^1.3.113", + "node-releases": "^1.1.8" } }, "bser": { @@ -2620,11 +2742,6 @@ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -2728,9 +2845,9 @@ } }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" }, "caniuse-api": { "version": "3.0.0", @@ -2744,9 +2861,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000929", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000929.tgz", - "integrity": "sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==" + "version": "1.0.30000943", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000943.tgz", + "integrity": "sha512-nJMjU4UaesbOHTcmz6VS+qaog++Fdepg4KAya5DL/AZrL/aaAZDGOOQ0AECtsJa09r4cJBdHZMive5mw8lnQ5A==" }, "capture-exit": { "version": "1.2.0", @@ -2757,19 +2874,24 @@ } }, "case-sensitive-paths-webpack-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", - "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", + "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "ccount": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==" + }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2787,23 +2909,22 @@ "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==" }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", - "inherits": "^2.0.1", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "readdirp": "^2.2.1", + "upath": "^1.1.0" }, "dependencies": { "array-unique": { @@ -2847,60 +2968,546 @@ "to-regex-range": "^2.1.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "optional": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, "requires": { - "is-extglob": "^2.1.0" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" - }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", - "requires": { - "tslib": "^1.9.0" - } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": 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" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "requires": { + "tslib": "^1.9.0" + } }, "ci-info": { "version": "1.6.0", @@ -3072,11 +3679,6 @@ "simple-swizzle": "^0.2.2" } }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -3085,6 +3687,14 @@ "delayed-stream": "~1.0.0" } }, + "comma-separated-tokens": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz", + "integrity": "sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA==", + "requires": { + "trim": "0.0.1" + } + }, "commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", @@ -3119,11 +3729,11 @@ "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.38.0 < 2" } }, "compression": { @@ -3172,9 +3782,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz", - "integrity": "sha512-tHo1tQL/9Ox5RELbkCAJhnViqWlzBz3MG1bB2czbHjH2mWd4aYUgNCNLfysFL7c4LoDws7pjg2tj48Gmpw4QHA==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz", + "integrity": "sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg==" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -3264,13 +3874,14 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", + "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==", "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", "js-yaml": "^3.9.0", + "lodash.get": "^4.4.2", "parse-json": "^4.0.0" } }, @@ -3366,6 +3977,39 @@ "component-classes": "^1.2.5" } }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -3380,30 +4024,44 @@ "timsort": "^0.3.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "dependencies": { "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -3444,6 +4102,39 @@ "source-list-map": "^2.0.0" } }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "css-select": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", @@ -3520,14 +4211,14 @@ "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" }, "cssdb": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.3.0.tgz", - "integrity": "sha512-VHPES/+c9s+I0ryNj+PXvp84nz+ms843z/efpaEINwP/QfGsINL3gpLp5qjapzDNzNzbXxur8uxKxSXImrg4ag==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" }, "cssesc": { "version": "0.1.0", @@ -3535,40 +4226,20 @@ "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" }, "cssnano": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", - "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.6", + "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -3591,66 +4262,46 @@ } }, "cssnano-preset-default": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", - "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "requires": { "css-declaration-sorter": "^4.0.1", "cssnano-util-raw-cache": "^4.0.1", "postcss": "^7.0.0", - "postcss-calc": "^7.0.0", - "postcss-colormin": "^4.0.2", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.1", + "postcss-discard-comments": "^4.0.2", "postcss-discard-duplicates": "^4.0.2", "postcss-discard-empty": "^4.0.1", "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.10", - "postcss-merge-rules": "^4.0.2", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.1", - "postcss-minify-params": "^4.0.1", - "postcss-minify-selectors": "^4.0.1", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.1", - "postcss-normalize-positions": "^4.0.1", - "postcss-normalize-repeat-style": "^4.0.1", - "postcss-normalize-string": "^4.0.1", - "postcss-normalize-timing-functions": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", "postcss-normalize-unicode": "^4.0.1", "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.1", - "postcss-ordered-values": "^4.1.1", - "postcss-reduce-initial": "^4.0.2", - "postcss-reduce-transforms": "^4.0.1", - "postcss-svgo": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", "postcss-unique-selectors": "^4.0.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -3690,30 +4341,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -3760,18 +4391,23 @@ } }, "cssom": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==" + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==" }, "cssstyle": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", - "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", + "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", "requires": { "cssom": "0.3.x" } }, + "csstype": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz", + "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==" + }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -3816,6 +4452,18 @@ "abab": "^2.0.0", "whatwg-mimetype": "^2.2.0", "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } } }, "date-now": { @@ -4060,10 +4708,11 @@ } }, "dir-glob": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.1.tgz", - "integrity": "sha512-UN6X6XwRjllabfRhBdkVSo63uurJ8nSvMGrwl94EYVz6g+exhTV+yVSYk5VC/xl3MBFBTtC0J20uFKce4Brrng==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "requires": { + "arrify": "^1.0.1", "path-type": "^3.0.0" }, "dependencies": { @@ -4113,9 +4762,9 @@ } }, "dom-align": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.8.0.tgz", - "integrity": "sha512-B85D4ef2Gj5lw0rK0KM2+D5/pH7yqNxg2mB+E8uzFaolpm7RQmsxEfjyEuNiF8UBBkffumYDeKRzTzc3LePP+w==" + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.8.2.tgz", + "integrity": "sha512-17vInOylbB7H4qua7QRsmQT05FFTZemO8BhnOPgF9BPqjAPDyQr/9V8fmJbn05vQ31m2gu3EJSSYN2u94szUZg==" }, "dom-closest": { "version": "0.2.0", @@ -4152,19 +4801,12 @@ "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -4186,9 +4828,9 @@ } }, "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { "domelementtype": "1" } @@ -4251,9 +4893,9 @@ } }, "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -4276,9 +4918,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.103", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.103.tgz", - "integrity": "sha512-tObPqGmY9X8MUM8i3MEimYmbnLLf05/QV5gPlkR8MQ3Uj8G8B2govE1U4cQcBYtv3ymck9Y8cIOu4waoiykMZQ==" + "version": "1.3.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==" }, "elliptic": { "version": "6.4.1", @@ -4295,9 +4937,9 @@ } }, "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "emojis-list": { "version": "2.1.0", @@ -4420,20 +5062,20 @@ } }, "eslint": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz", - "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.0.tgz", + "integrity": "sha512-LntwyPxtOHrsJdcSwyQKVtHofPHdv+4+mFwEe91r2V13vqpM8yLr7b1sW+Oo/yheOPkWYsYlYJCkzlFAt8KV7g==", "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.5.3", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", - "debug": "^3.1.0", + "debug": "^4.0.1", "doctrine": "^2.1.0", "eslint-scope": "^4.0.0", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", + "espree": "^5.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", @@ -4441,9 +5083,9 @@ "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", @@ -4455,12 +5097,11 @@ "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^2.0.0", - "require-uncached": "^1.0.3", + "regexpp": "^2.0.1", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^4.0.3", + "table": "^5.0.2", "text-table": "^0.2.0" }, "dependencies": { @@ -4469,23 +5110,29 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "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==" + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -4497,11 +5144,11 @@ } }, "eslint-config-react-app": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz", - "integrity": "sha512-VL5rA1EBZv7f9toc9x71or7nr4jRmwCH4V9JKB9DFVaTLOLI9+vjWLgQLjMu3xR9iUT80dty86RbCfNaKyrFFg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", + "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", "requires": { - "confusing-browser-globals": "^1.0.5" + "confusing-browser-globals": "^1.0.6" } }, "eslint-import-resolver-node": { @@ -4541,12 +5188,12 @@ } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", "requires": { "debug": "^2.6.8", - "pkg-dir": "^1.0.0" + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { @@ -4557,34 +5204,17 @@ "ms": "2.0.0" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { - "find-up": "^1.0.0" + "find-up": "^2.1.0" } } } @@ -4707,18 +5337,37 @@ "emoji-regex": "^6.5.1", "has": "^1.0.3", "jsx-ast-utils": "^2.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" + } } }, "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", "has": "^1.0.3", "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } + } } }, "eslint-scope": { @@ -4741,11 +5390,11 @@ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" }, "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -4802,11 +5451,11 @@ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" }, "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "requires": { - "original": ">=0.0.5" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -4873,14 +5522,6 @@ "fill-range": "^2.1.0" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "expect": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", @@ -5248,6 +5889,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -5488,13 +6134,13 @@ } }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", + "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "requires": { "commondir": "^1.0.1", "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -5522,34 +6168,29 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "requires": { - "debug": "=3.1.0" + "debug": "^3.2.6" }, "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } } } }, @@ -5576,18 +6217,17 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, - "fork-ts-checker-webpack-plugin-alt": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin-alt/-/fork-ts-checker-webpack-plugin-alt-0.4.14.tgz", - "integrity": "sha512-s0wjOBuPdylMRBzZ4yO8LSJuzem3g0MYZFxsjRXrFDQyL5KJBVSq30+GoHM/t/r2CRU4tI6zi04sq6OXK0UYnw==", + "fork-ts-checker-webpack-plugin": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.0.0-alpha.6.tgz", + "integrity": "sha512-s/V+58nLrUjuXyzYk8AL11XG8bxIirTbafDLMn26sL59HQx8QvvsRTqOkhq4MV0coIkog1jZuH/E9Abm8zFZ2g==", "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", "chokidar": "^2.0.4", - "lodash": "^4.17.11", "micromatch": "^3.1.10", "minimatch": "^3.0.4", - "resolve": "^1.5.0", + "semver": "^5.6.0", "tapable": "^1.0.0" }, "dependencies": { @@ -5781,6 +6421,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -5887,9 +6532,9 @@ } }, "fs-extra": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", - "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -5929,7 +6574,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5947,11 +6593,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5964,15 +6612,18 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6075,7 +6726,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6085,6 +6737,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6097,17 +6750,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -6124,6 +6780,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6196,7 +6853,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6206,6 +6864,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6281,7 +6940,8 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6311,6 +6971,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6328,6 +6989,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6366,11 +7028,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -6448,39 +7112,42 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.0.0" } }, "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } } }, "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==" + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" }, "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "requires": { "array-union": "^1.0.1", - "dir-glob": "^2.0.0", + "dir-glob": "2.0.0", "fast-glob": "^2.0.2", "glob": "^7.1.2", "ignore": "^3.3.5", @@ -6531,54 +7198,6 @@ } } }, - "h2x-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/h2x-core/-/h2x-core-1.1.1.tgz", - "integrity": "sha512-LdXe4Irs731knLtHgLyFrnJCumfiqXXQwKN1IMUhi37li29PLfLbMDvfK7Rk4wmgHLKP+sIITT1mcJV4QsC3nw==", - "requires": { - "h2x-generate": "^1.1.0", - "h2x-parse": "^1.1.1", - "h2x-traverse": "^1.1.0" - } - }, - "h2x-generate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/h2x-generate/-/h2x-generate-1.1.0.tgz", - "integrity": "sha512-L7Hym0yb20QIjvqeULUPOeh/cyvScdOAyJ6oRlh5dF0+w92hf3OiTk1q15KBijde7jGEe+0R4aOmtW8gkPNIzg==", - "requires": { - "h2x-traverse": "^1.1.0" - } - }, - "h2x-parse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/h2x-parse/-/h2x-parse-1.1.1.tgz", - "integrity": "sha512-WRSmPF+tIWuUXVEZaYRhcZx/JGEJx8LjZpDDtrvMr5m/GTR0NerydCik5dRzcKXPWCtfXxuJRLR4v2P4HB2B1A==", - "requires": { - "h2x-types": "^1.1.0", - "jsdom": ">=11.0.0" - } - }, - "h2x-plugin-jsx": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/h2x-plugin-jsx/-/h2x-plugin-jsx-1.2.0.tgz", - "integrity": "sha512-a7Vb3BHhJJq0dPDNdqguEyQirENkVsFtvM2YkiaT5h/fmGhmM1nDy3BLeJeSKi2tL2g9v4ykm2Z+GG9QrhDgPA==", - "requires": { - "h2x-types": "^1.1.0" - } - }, - "h2x-traverse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/h2x-traverse/-/h2x-traverse-1.1.0.tgz", - "integrity": "sha512-1ND8ZbISLSUgpLHYJRvhvElITvs0g44L7RxjeXViz5XP6rooa+FtXTFLByl2Yg01zj2txubifHIuU4pgvj8l+A==", - "requires": { - "h2x-types": "^1.1.0" - } - }, - "h2x-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/h2x-types/-/h2x-types-1.1.0.tgz", - "integrity": "sha512-QdH5qfLcdF209UsCdM0ZNZ9Dwm2PHvMfeLZtivBrjX3Y/df4US2pwsUC4HBfWhye/mx/t6puODeC7Oacb/Ol8g==" - }, "hammerjs": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", @@ -6590,9 +7209,9 @@ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" }, "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", "requires": { "async": "^2.5.0", "optimist": "^0.6.1", @@ -6671,6 +7290,11 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -6717,6 +7341,34 @@ "minimalistic-assert": "^1.0.1" } }, + "hast-util-from-parse5": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.0.tgz", + "integrity": "sha512-A7ev5OseS/J15214cvDdcI62uwovJO2PB60Xhnq7kaxvvQRFDEccuqbkrFXU03GPBGopdPqlpQBRqIcDS/Fjbg==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "hast-util-parse-selector": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz", + "integrity": "sha512-Xyh0v+nHmQvrOqop2Jqd8gOdyQtE8sIP9IQf7mlVDqp924W4w/8Liuguk2L2qei9hARnQSG2m+wAOCxM7npJVw==" + }, + "hastscript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.0.0.tgz", + "integrity": "sha512-xJtuJ8D42Xtq5yJrnDg/KAIxl2cXBXKoiIJwmWX9XMf8113qHTGl/Bf7jEsxmENJ4w6q4Tfl8s/Y6mEZo8x8qw==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.2.0", + "property-information": "^5.0.1", + "space-separated-tokens": "^1.0.0" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -6778,14 +7430,6 @@ "os-tmpdir": "^1.0.1" } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "requires": { - "parse-passwd": "^1.0.0" - } - }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -6871,39 +7515,27 @@ } }, "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "requires": { - "domelementtype": "1" - } - }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, @@ -7139,6 +7771,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -7280,9 +7917,9 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "immer": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.7.2.tgz", - "integrity": "sha512-4Urocwu9+XLDJw4Tc6ZCg7APVjjLInCFvO4TwGsAYV5zT6YYSor14dsZR0+0tHlDIN92cFUOq+i7fC00G5vTxA==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" }, "immutable": { "version": "3.8.2", @@ -7321,6 +7958,16 @@ "requires": { "pkg-dir": "^2.0.0", "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + } } }, "imurmurhash": { @@ -7358,36 +8005,36 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" } } } @@ -7456,17 +8103,9 @@ } }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" }, "is-callable": { "version": "1.1.4", @@ -7617,6 +8256,11 @@ "path-is-inside": "^1.0.1" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -8025,69 +8669,6 @@ "jest-mock": "^23.2.0", "jest-util": "^23.4.0", "jsdom": "^11.5.1" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } } }, "jest-environment-node": { @@ -8174,9 +8755,9 @@ "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=" }, "jest-pnp-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.1.tgz", - "integrity": "sha512-kzhvJQp+9k0a/hpvIIzOJgOwfOqmnohdrAMZW2EscH3kxR2VWD7EcPa10cio8EK9V7PcD75bhG1pFnO70zGwSQ==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.2.tgz", + "integrity": "sha512-H2DvUlwdMedNGv4FOliPDnxani6ATWy70xe2eckGJgkLoMaWzRPqpSlc5ShqX0Ltk5OhRQvPQY2LLZPOpgcc7g==" }, "jest-regex-util": { "version": "23.3.0", @@ -8372,6 +8953,39 @@ "pretty-format": "^23.6.0" } }, + "jest-watch-typeahead": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz", + "integrity": "sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.4.1", + "jest-watcher": "^23.1.0", + "slash": "^2.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "jest-watcher": { "version": "23.4.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", @@ -8411,9 +9025,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -8425,36 +9039,48 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdom": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.1.0.tgz", - "integrity": "sha512-C2Kp0qNuopw0smXFaHeayvharqF3kkcNqlcIlSX71+3XrsOFwkEPLt/9f5JksMmaul2JZYIQuY+WTpqHpQQcLg==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "requires": { "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", "domexception": "^1.0.1", - "escodegen": "^1.11.0", + "escodegen": "^1.9.1", "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.0.9", - "parse5": "5.1.0", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", "pn": "^1.1.0", - "request": "^2.88.0", + "request": "^2.87.0", "request-promise-native": "^1.0.5", - "saxes": "^3.1.4", + "sax": "^1.2.4", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", + "tough-cookie": "^2.3.4", "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.0.1", "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + } } }, "jsesc": { @@ -8564,6 +9190,13 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + } } }, "kleur": { @@ -8869,11 +9502,6 @@ "tmpl": "1.0.x" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -9018,16 +9646,16 @@ "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { @@ -9036,9 +9664,9 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "mini-css-extract-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz", - "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", + "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", "requires": { "loader-utils": "^1.1.0", "schema-utils": "^1.0.0", @@ -9147,9 +9775,9 @@ } }, "moment": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", - "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==" + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "move-concurrently": { "version": "1.0.1", @@ -9319,33 +9947,44 @@ } }, "node-notifier": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", - "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", "requires": { "growly": "^1.3.0", + "is-wsl": "^1.1.0", "semver": "^5.5.0", "shellwords": "^0.1.1", "which": "^1.3.0" } }, "node-releases": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", - "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.10.tgz", + "integrity": "sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ==", "requires": { "semver": "^5.3.0" } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } + } } }, "normalize-path": { @@ -9393,9 +10032,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", - "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.1.tgz", + "integrity": "sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg==" }, "oauth-sign": { "version": "0.9.0", @@ -9461,6 +10100,17 @@ "object-keys": "^1.0.11" } }, + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" + } + }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -9520,9 +10170,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, "once": { "version": "1.4.0", @@ -9635,9 +10285,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "1.3.0", @@ -9666,9 +10316,9 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" }, "parallel-transform": { "version": "1.1.0", @@ -9688,10 +10338,25 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==" + } + } + }, "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -9721,11 +10386,6 @@ "json-parse-better-errors": "^1.0.1" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, "parse5": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", @@ -9830,11 +10490,51 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + } } }, "pkg-up": { @@ -9856,9 +10556,12 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "pnp-webpack-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.1.0.tgz", - "integrity": "sha512-CPCdcFxx7fEcDMWTDjXe2Wypt4JuMt4q5Q2UrpTcyBBkLiCIyPEh/mCGmUWIcNkKGyXwQ9Y2wVhlKm6ketiBNQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz", + "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==", + "requires": { + "ts-pnp": "^1.0.0" + } }, "portfinder": { "version": "1.0.20", @@ -9921,30 +10624,10 @@ "postcss-selector-parser": "^5.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -9977,30 +10660,10 @@ "postcss-value-parser": "^3.3.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10031,30 +10694,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10086,30 +10729,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10140,30 +10763,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10195,30 +10798,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10249,30 +10832,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10295,9 +10858,9 @@ } }, "postcss-colormin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", - "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "requires": { "browserslist": "^4.0.0", "color": "^3.0.0", @@ -10306,30 +10869,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10360,30 +10903,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10413,30 +10936,10 @@ "postcss": "^7.0.5" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10467,30 +10970,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10521,30 +11004,10 @@ "postcss-selector-parser": "^5.0.0-rc.3" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10575,30 +11038,10 @@ "postcss-selector-parser": "^5.0.0-rc.3" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10621,37 +11064,17 @@ } }, "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "requires": { "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10681,30 +11104,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10734,30 +11137,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10787,30 +11170,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10841,30 +11204,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10895,30 +11238,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10948,30 +11271,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11001,30 +11304,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11054,30 +11337,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11107,30 +11370,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11160,30 +11403,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11211,33 +11434,13 @@ "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", "requires": { "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11268,30 +11471,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11323,30 +11506,10 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11401,30 +11564,10 @@ "schema-utils": "^1.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11454,30 +11597,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11507,30 +11630,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11553,9 +11656,9 @@ } }, "postcss-merge-longhand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", - "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "requires": { "css-color-names": "0.0.4", "postcss": "^7.0.0", @@ -11563,30 +11666,10 @@ "stylehacks": "^4.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11609,9 +11692,9 @@ } }, "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "requires": { "browserslist": "^4.0.0", "caniuse-api": "^3.0.0", @@ -11621,30 +11704,10 @@ "vendors": "^1.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11685,30 +11748,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11731,9 +11774,9 @@ } }, "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "requires": { "cssnano-util-get-arguments": "^4.0.0", "is-color-stop": "^1.0.0", @@ -11741,30 +11784,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11787,9 +11810,9 @@ } }, "postcss-minify-params": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", - "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "requires": { "alphanum-sort": "^1.0.0", "browserslist": "^4.0.0", @@ -11799,30 +11822,10 @@ "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11845,9 +11848,9 @@ } }, "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "requires": { "alphanum-sort": "^1.0.0", "has": "^1.0.0", @@ -11855,30 +11858,10 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11953,30 +11936,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12006,30 +11969,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12052,39 +11995,19 @@ } }, "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "requires": { "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12107,9 +12030,9 @@ } }, "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "requires": { "cssnano-util-get-arguments": "^4.0.0", "has": "^1.0.0", @@ -12117,30 +12040,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12163,9 +12066,9 @@ } }, "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "requires": { "cssnano-util-get-arguments": "^4.0.0", "cssnano-util-get-match": "^4.0.0", @@ -12173,30 +12076,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12219,39 +12102,19 @@ } }, "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "requires": { "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12274,39 +12137,19 @@ } }, "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "requires": { "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12338,30 +12181,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12394,30 +12217,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12440,38 +12243,18 @@ } }, "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12494,39 +12277,19 @@ } }, "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "requires": { "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12556,30 +12319,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12609,30 +12352,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12657,36 +12380,16 @@ "postcss-place": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12709,15 +12412,18 @@ } }, "postcss-preset-env": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.3.1.tgz", - "integrity": "sha512-erl+OcCTr1+jsfJNQjBweyb8Y1s6KngUBwoqJnRXO197PmEE6u9HxZfnpKkTQqasxZljxNHzXR5hMb7MdD0Zdw==", - "requires": { - "autoprefixer": "^9.3.1", - "browserslist": "^4.3.4", - "caniuse-lite": "^1.0.30000905", - "cssdb": "^4.1.0", - "postcss": "^7.0.5", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.5.0.tgz", + "integrity": "sha512-RdsIrYJd9p9AouQoJ8dFP5ksBJEIegA4q4WzJDih8nevz3cZyIP/q1Eaw3pTVpUAu3n7Y32YmvAW3X07mSRGkw==", + "requires": { + "autoprefixer": "^9.4.2", + "browserslist": "^4.3.5", + "caniuse-lite": "^1.0.30000918", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.3.0", + "postcss": "^7.0.6", "postcss-attribute-case-insensitive": "^4.0.0", "postcss-color-functional-notation": "^2.0.1", "postcss-color-gray": "^5.0.0", @@ -12749,30 +12455,10 @@ "postcss-selector-not": "^4.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12803,30 +12489,10 @@ "postcss-selector-parser": "^5.0.0-rc.3" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12849,9 +12515,9 @@ } }, "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "requires": { "browserslist": "^4.0.0", "caniuse-api": "^3.0.0", @@ -12859,30 +12525,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12905,9 +12551,9 @@ } }, "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "requires": { "cssnano-util-get-match": "^4.0.0", "has": "^1.0.0", @@ -12915,30 +12561,10 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12968,30 +12594,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -13021,30 +12627,10 @@ "postcss": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -13075,30 +12661,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -13129,30 +12695,10 @@ "postcss": "^7.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -13192,9 +12738,9 @@ } }, "postcss-svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", - "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "requires": { "is-svg": "^3.0.0", "postcss": "^7.0.0", @@ -13202,30 +12748,10 @@ "svgo": "^1.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -13257,30 +12783,10 @@ "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -13328,9 +12834,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", - "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==" + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==" }, "pretty-bytes": { "version": "4.0.2", @@ -13405,12 +12911,21 @@ } }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "property-information": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.0.1.tgz", + "integrity": "sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw==", + "requires": { + "xtend": "^4.0.1" } }, "proxy-addr": { @@ -13551,9 +13066,9 @@ } }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } @@ -13594,9 +13109,9 @@ } }, "rc-align": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.3.tgz", - "integrity": "sha512-h5KgyB5IXYR7iKpYFcMr54cuQ2eozPCZ11kbXPG5+6CWvmyJ+c0R/yjndVndiNk2G3MKcTMbJNdDv5DIckLAxQ==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", + "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", "requires": { "babel-runtime": "^6.26.0", "dom-align": "^1.7.0", @@ -13618,9 +13133,9 @@ } }, "rc-calendar": { - "version": "9.10.6", - "resolved": "https://registry.npmjs.org/rc-calendar/-/rc-calendar-9.10.6.tgz", - "integrity": "sha512-me3A+4sCm4xXifLSXIVnRyd1udsMGehkojcVFGwmYmutiok6x2A6ZTQRLpKBIbEyhIrKOMz0O7H9JHngEX9+0A==", + "version": "9.10.10", + "resolved": "https://registry.npmjs.org/rc-calendar/-/rc-calendar-9.10.10.tgz", + "integrity": "sha512-WFnxpXGzIt2cPCJjFmrju/w2jZHAO9jW3JSDZovaJuBtVciu1p8brL6PSjWCo4flD3jVurL9LO8tJwgajELj2w==", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -13657,15 +13172,16 @@ } }, "rc-collapse": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.10.2.tgz", - "integrity": "sha512-AtEE4rMXEBT05gScduc+NQf/257wqE0xk4tNX4N1DBq0qTx19xGcwX3EXDD+ZF8KuZ/A25pgmviXad/hthNQSg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.11.1.tgz", + "integrity": "sha512-9HA8f7aWE0yabnzfE2v/7IyMb6dTmj052A9cyEMB0aT1sdLESpetMAzT3FkLcPT5fl7YNRkyVZ3zwkC5qMmzmA==", "requires": { "classnames": "2.x", "css-animation": "1.x", "prop-types": "^15.5.6", "rc-animate": "2.x", - "react-is": "^16.7.0" + "react-is": "^16.7.0", + "shallowequal": "^1.1.0" } }, "rc-dialog": { @@ -13702,9 +13218,9 @@ } }, "rc-editor-core": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/rc-editor-core/-/rc-editor-core-0.8.8.tgz", - "integrity": "sha512-4zT4Z8BtQSDcdh9mGXrsVCzUXmXKpe2U2VJSKOAErh5J4yTzJxSOfJon+nHxZyJZEKXg7rZvwrnhogXZzYNIng==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/rc-editor-core/-/rc-editor-core-0.8.9.tgz", + "integrity": "sha512-fGTkTm96Kil/i9n5a3JwAzJcl2TkfjO1r1WBWf6NIOxXiJXpC3Lajkf3j6E5K7iz5AW0QRaSGnNQFBrwvXKKWA==", "requires": { "babel-runtime": "^6.26.0", "classnames": "^2.2.5", @@ -13731,23 +13247,31 @@ } }, "rc-form": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.1.tgz", - "integrity": "sha512-ZWnAR5w63fNUdeY/EuSpmrScM9EDxtgUbsSnao2BS9HIKIjqSCu6bJNX6SKvU7jRnklLOfEf8nCEMzibFZwplA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.3.tgz", + "integrity": "sha512-59KeQat5TU4YzpfXYpFlyQ1/5uFXm0SV7VokRr+i8bPMhimpKpZl5gt0J7dNiKLTsGnkCqBLSL88d9ufPJ+EQQ==", "requires": { "async-validator": "~1.8.5", "babel-runtime": "6.x", "create-react-class": "^15.5.3", "dom-scroll-into-view": "1.x", - "hoist-non-react-statics": "^2.3.1", + "hoist-non-react-statics": "^3.3.0", "lodash": "^4.17.4", - "warning": "^3.0.0" + "warning": "^4.0.3" }, "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + }, "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "requires": { "loose-envify": "^1.0.0" } @@ -13765,9 +13289,9 @@ } }, "rc-input-number": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.3.8.tgz", - "integrity": "sha512-xqaghe3gfa2z4ObSn9p/EqnEXNBENDCcTtGxUP+RgS1Q3sWomBNFrnR6Nv5NEwp2zel8gapXy+u5Fwp/047FOw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.4.0.tgz", + "integrity": "sha512-AsXLVaQZ7rCU71B8zzP3nviL8/CkFGDcp5kIlpMzBdGIHoLyRnXcxei3itH9PfFSgMBixEnb5hFVoTikFbNWSQ==", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.0", @@ -13796,9 +13320,9 @@ } }, "rc-notification": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.0.tgz", - "integrity": "sha512-T7wUryaKTNTO9gsWPCwRyC9P4FcKFTrIRsiNVXJhjlRbHKT0xZF3ag/gxXxZzPBDAf0l1vfgIrT+11cfWtZW0g==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz", + "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -13818,9 +13342,9 @@ } }, "rc-progress": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.2.7.tgz", - "integrity": "sha512-uLHHpQO4/yFa/AX6Uw2dJFUIfAkfI6430h0a1XJX/A0Ja0wmuwjEa03biuKfKwwqz2skFiAaXco1GlgaJK9mKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.3.0.tgz", + "integrity": "sha512-hYBKFSsNgD7jsF8j+ZC1J8y5UIC2X/ktCYI/OQhQNSX6mGV1IXnUCjAd9gbLmzmpChPvKyymRNfckScUNiTpFQ==", "requires": { "babel-runtime": "6.x", "prop-types": "^15.5.8" @@ -13838,9 +13362,9 @@ } }, "rc-select": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-8.7.0.tgz", - "integrity": "sha512-YaNO4peulgvrqQCHGB2kdmS61enJUyQzxrpVKGDJkc+9wjnZ59X2O62QYyy8c/AcE/DNYawUmRVwN9xE3e0kVQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.0.2.tgz", + "integrity": "sha512-lwFz/aINmbznQmKvq/jFipc922h+RhA+iKCicxAglTqC4qmXg2REKWzviT5Tk0kqVe4mHcfNX8PyvMEHSmkaLA==", "requires": { "babel-runtime": "^6.23.0", "classnames": "2.x", @@ -13857,9 +13381,9 @@ } }, "rc-slider": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.4.tgz", - "integrity": "sha512-CV2i2Ww6ib0EjFuBKvgjw3PgT6QwvWKC93iEpqPtrztZrx5wO9Iw//AUri4KHRqptW13AuBvFdEHovqLi6XFTw==", + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.6.tgz", + "integrity": "sha512-byfnq1LbBFyZ0HURWo22sjeiKIxLyzSnIiNUsUf6SWu1ZhQe/Qt24JnE/ZJsqKoUirXxlX+d577ptfAybZHm+Q==", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.5", @@ -13867,13 +13391,13 @@ "rc-tooltip": "^3.7.0", "rc-util": "^4.0.4", "shallowequal": "^1.0.1", - "warning": "^3.0.0" + "warning": "^4.0.3" }, "dependencies": { "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "requires": { "loose-envify": "^1.0.0" } @@ -13892,13 +13416,13 @@ } }, "rc-switch": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-1.8.0.tgz", - "integrity": "sha512-n4H+K2XJCqGwVQKwWOjbxl1kpdov0PVE9DGhzs/S20gk65s/nAOkpdO9tBD7IM/20KRNTBh0fEWkEedByrqh6w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-1.9.0.tgz", + "integrity": "sha512-Isas+egaK6qSk64jaEw4GgPStY4umYDbT7ZY93bZF1Af+b/JEsKsJdNOU2qG3WI0Z6tXo2DDq0kJCv8Yhu0zww==", "requires": { - "babel-runtime": "^6.23.0", "classnames": "^2.2.1", - "prop-types": "^15.5.6" + "prop-types": "^15.5.6", + "react-lifecycles-compat": "^3.0.4" } }, "rc-table": { @@ -13929,9 +13453,9 @@ } }, "rc-tabs": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.5.8.tgz", - "integrity": "sha512-fvkM5FLa0Kq9jz7YNE72T9WeMEbF264FIhqRnKyvmKtaam2lI81qxbofMEfBGhNxcv1whWlZStHj9b1Wi3Q24w==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.6.1.tgz", + "integrity": "sha512-3/Ip9yCEERFFvCjU0ZoQqvn6unMo0XOQESygNLq1DyOAYRcukpq8Q28awpXWqh8l8NBcyw1sVfrs6SZN/zmAKg==", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -13955,9 +13479,9 @@ } }, "rc-time-picker": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.5.0.tgz", - "integrity": "sha512-swJyFZgR3P4UgFix5DP0fQQPKHP7WYEKlzbAWXd72TmFV80VCxmR+l0OWyCOjZgXfo9VJ/mEDzUnMSjP8/xyrg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.6.2.tgz", + "integrity": "sha512-SyGEVXO0ImeG2mz+7fkVmDoVM0+OrX6uYGpKYijNr/lAah7c5p310ZR6fVrblXOl4TpqVnfWR67RMJ3twAyM7w==", "requires": { "classnames": "2.x", "moment": "2.x", @@ -13976,9 +13500,9 @@ } }, "rc-tree": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-1.14.9.tgz", - "integrity": "sha512-+B4657b3H0mTB4Jcd9EorydI1fevfJRukaTk/KYcbNzYhKgZFIEuT3PZrhJZoH/e+sBOEx04zSNA0uf6G6S/BA==", + "version": "1.14.10", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-1.14.10.tgz", + "integrity": "sha512-iOn7+SpWzM4OQoF/7wJeFiuRpBGJ3ndTe6YVGnfIhsWqDd7S6a7z0anDQcBpPsW/PvisjNDXr4zKchZvx+0iCA==", "requires": { "babel-runtime": "^6.23.0", "classnames": "2.x", @@ -14015,16 +13539,16 @@ } }, "rc-tree-select": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.5.1.tgz", - "integrity": "sha512-Oz0YyrDK8Gjz1n7ra/7qqH2HzcdMlPmFdVploQXCuMnp3m42kOhetwW0PlO6+NxTvapMws/MVwS8UUXIy0KajQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.6.0.tgz", + "integrity": "sha512-9svioSjzqqGeIK9XTuM5yNe0WteSro2Hc8/Go+CTGth6P/mflVC7vC0jTJlFVpFz+Aw1LzXcJFsbAyRwUiSaag==", "requires": { - "babel-runtime": "^6.23.0", "classnames": "^2.2.1", + "dom-scroll-into-view": "^1.2.1", "prop-types": "^15.5.8", "raf": "^3.4.0", "rc-animate": "^3.0.0-rc.4", - "rc-tree": "~1.14.3", + "rc-tree": "~1.15.0", "rc-trigger": "^3.0.0-rc.2", "rc-util": "^4.5.0", "react-lifecycles-compat": "^3.0.4", @@ -14047,6 +13571,30 @@ "react-lifecycles-compat": "^3.0.4" } }, + "rc-tree": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-1.15.2.tgz", + "integrity": "sha512-VPXLA/GdV6U9N8evpl4rmjRsBkw5BoweqWjcVBVwYGzBtonNIFpdc+bnb7TDmd6S3mKOM7mXPbiSr2GKYdj4hA==", + "requires": { + "babel-runtime": "^6.23.0", + "classnames": "2.x", + "prop-types": "^15.5.8", + "rc-animate": "^3.0.0-rc.5", + "rc-util": "^4.5.1", + "react-lifecycles-compat": "^3.0.4", + "warning": "^3.0.0" + }, + "dependencies": { + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, "rc-trigger": { "version": "3.0.0-rc.3", "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-3.0.0-rc.3.tgz", @@ -14077,24 +13625,14 @@ } }, "rc-upload": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-2.6.1.tgz", - "integrity": "sha512-cYuHgy+wZZfQwwbuJuIBPdTmRYcfMddukZ9ayzuxlUJT77BUf6kgImfCj2CYTvpnTeIlDn8Wh79AAaC2PF1dIQ==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-2.6.3.tgz", + "integrity": "sha512-wM57UH/EEqW2/EcWz5nwnU07d4LHDHjBgxRin2Q56TW9JcFVnaQVq/JHycVFumsgSFV5CZfNW8PBROsKT9VFMw==", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.5", "prop-types": "^15.5.7", - "warning": "2.x" - }, - "dependencies": { - "warning": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", - "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", - "requires": { - "loose-envify": "^1.0.0" - } - } + "warning": "4.x" } }, "rc-util": { @@ -14119,20 +13657,20 @@ } }, "react": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", - "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.4.tgz", + "integrity": "sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.12.0" + "scheduler": "^0.13.4" } }, "react-ace": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-6.3.2.tgz", - "integrity": "sha512-eSk0fWvrBe2oqYIYX0njLddLG5H0hemWv5VVoQi5yDSPTjGlSSnzFwdgPyfuwRe8mSARZuRdprPQa5p61hKirw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-6.4.0.tgz", + "integrity": "sha512-woTTgGk9x4GRRWiM4QLNOspjaJAYLX3UZ3J2XRYQvJiN6wyxrFY9x7rdOKc+4Tj+khb/ccPiDj/kll4UeJEDPw==", "requires": { "brace": "^0.11.1", "diff-match-patch": "^1.0.4", @@ -14142,21 +13680,21 @@ } }, "react-app-polyfill": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.0.tgz", - "integrity": "sha512-uBfocjRsBNqhTaEywUZ2buzhHbor2jBbnhZY8VUZ7VZ3PXucIPZrPDAAmbclELhvl+x08PbynAGQfMYcBmqZ2w==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.2.tgz", + "integrity": "sha512-mAYn96B/nB6kWG87Ry70F4D4rsycU43VYTj3ZCbKP+SLJXwC0x6YCbwcICh3uW8/C9s1VgP197yx+w7SCWeDdQ==", "requires": { - "core-js": "2.5.7", + "core-js": "2.6.4", "object-assign": "4.1.1", "promise": "8.0.2", - "raf": "3.4.0", + "raf": "3.4.1", "whatwg-fetch": "3.0.0" }, "dependencies": { "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", + "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==" }, "promise": { "version": "8.0.2", @@ -14166,14 +13704,6 @@ "asap": "~2.0.6" } }, - "raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", - "requires": { - "performance-now": "^2.1.0" - } - }, "whatwg-fetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", @@ -14191,54 +13721,50 @@ } }, "react-dev-utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-7.0.1.tgz", - "integrity": "sha512-AN/RKZKHsyB2FebKSyMLOecvjuzZ54lzsLYF8wNmwwgRA3dVC4vhYsafvME7JD4q7RUB0bejqFWjOS9QtN48Zg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-8.0.0.tgz", + "integrity": "sha512-TK8cj7eghvxfe7bfBluLGpI/upo4EXC+G74hYmPucAG8C2XcbT+vKnlWPwLnABb75Zk+mR6D556Da+yvDjljrw==", "requires": { "@babel/code-frame": "7.0.0", "address": "1.0.3", - "browserslist": "4.1.1", - "chalk": "2.4.1", + "browserslist": "4.4.1", + "chalk": "2.4.2", "cross-spawn": "6.0.5", "detect-port-alt": "1.1.6", "escape-string-regexp": "1.0.5", "filesize": "3.6.1", "find-up": "3.0.0", - "global-modules": "1.0.0", - "globby": "8.0.1", + "fork-ts-checker-webpack-plugin": "1.0.0-alpha.6", + "global-modules": "2.0.0", + "globby": "8.0.2", "gzip-size": "5.0.0", - "immer": "1.7.2", - "inquirer": "6.2.0", + "immer": "1.10.0", + "inquirer": "6.2.1", "is-root": "2.0.0", - "loader-utils": "1.1.0", + "loader-utils": "1.2.3", "opn": "5.4.0", "pkg-up": "2.0.0", - "react-error-overlay": "^5.1.2", + "react-error-overlay": "^5.1.4", "recursive-readdir": "2.2.2", "shell-quote": "1.6.1", - "sockjs-client": "1.1.5", - "strip-ansi": "4.0.0", + "sockjs-client": "1.3.0", + "strip-ansi": "5.0.0", "text-table": "0.2.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "browserslist": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", - "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", + "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", "requires": { - "caniuse-lite": "^1.0.30000884", - "electron-to-chromium": "^1.3.62", - "node-releases": "^1.0.0-alpha.11" + "caniuse-lite": "^1.0.30000929", + "electron-to-chromium": "^1.3.103", + "node-releases": "^1.1.3" } }, "find-up": { @@ -14250,9 +13776,9 @@ } }, "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -14265,25 +13791,10 @@ "run-async": "^2.2.0", "rxjs": "^6.1.0", "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.0.0", "through": "^2.3.6" } }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - } - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -14294,9 +13805,9 @@ } }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "requires": { "p-try": "^2.0.0" } @@ -14315,44 +13826,44 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.0.0" } } } }, "react-dom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", - "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.4.tgz", + "integrity": "sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.12.0" + "scheduler": "^0.13.4" } }, "react-draggable": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.1.1.tgz", - "integrity": "sha512-tqIgDUm4XPSFbxelYpcsnayPU79P26ChnszDl5/RDFKfMuHnRxypS+OFfEyAEO1CtqaB3lrecQ2dyNIE2G0TlQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.2.1.tgz", + "integrity": "sha512-r+3Bs9InID2lyIEbR8UIRVtpn4jgu1ArFEZgIy8vibJjijLSdNLX7rH9U68BBVD4RD9v44RXbaK4EHLyKXzNQw==", "requires": { "classnames": "^2.2.5", "prop-types": "^15.6.0" } }, "react-error-overlay": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.2.tgz", - "integrity": "sha512-7kEBKwU9R8fKnZJBRa5RSIfay4KJwnYvKB6gODGicUmDSAhQJ7Tdnll5S0RLtYrzRfMVXlqYw61rzrSpP4ThLQ==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.4.tgz", + "integrity": "sha512-fp+U98OMZcnduQ+NSEiQa4s/XMsbp+5KlydmkbESOw4P69iWZ68ZMFM5a2BuE0FgqPBKApJyRuYHR95jM8lAmg==" }, "react-is": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", - "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==" + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz", + "integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==" }, "react-lazy-load": { "version": "3.0.13", @@ -14398,58 +13909,67 @@ } }, "react-scripts": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.1.3.tgz", - "integrity": "sha512-JASD0QVVgSVleVhA9TeA+UBx+shq887hm/L+09qjZLrqIUvJZHZU+oOnhMFGot02Yop+LKfkvf9KSsTNlu/Rwg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.1.8.tgz", + "integrity": "sha512-mDC8fYWCyuB9VROti8OCPdHE79UEchVVZmuS/yaIs47VkvZpgZqUvzghYBswZRchqnW0aARNY8xXrzoFRhhK7A==", "requires": { - "@babel/core": "7.1.6", - "@svgr/webpack": "2.4.1", + "@babel/core": "7.2.2", + "@svgr/webpack": "4.1.0", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", "babel-jest": "23.6.0", - "babel-loader": "8.0.4", - "babel-plugin-named-asset-import": "^0.3.0", - "babel-preset-react-app": "^7.0.0", + "babel-loader": "8.0.5", + "babel-plugin-named-asset-import": "^0.3.1", + "babel-preset-react-app": "^7.0.2", "bfj": "6.1.1", - "case-sensitive-paths-webpack-plugin": "2.1.2", - "chalk": "2.4.1", + "case-sensitive-paths-webpack-plugin": "2.2.0", "css-loader": "1.0.0", "dotenv": "6.0.0", "dotenv-expand": "4.2.0", - "eslint": "5.6.0", - "eslint-config-react-app": "^3.0.6", + "eslint": "5.12.0", + "eslint-config-react-app": "^3.0.8", "eslint-loader": "2.1.1", "eslint-plugin-flowtype": "2.50.1", "eslint-plugin-import": "2.14.0", "eslint-plugin-jsx-a11y": "6.1.2", - "eslint-plugin-react": "7.11.1", + "eslint-plugin-react": "7.12.4", "file-loader": "2.0.0", - "fork-ts-checker-webpack-plugin-alt": "0.4.14", - "fs-extra": "7.0.0", + "fs-extra": "7.0.1", "fsevents": "1.2.4", "html-webpack-plugin": "4.0.0-alpha.2", "identity-obj-proxy": "3.0.0", "jest": "23.6.0", - "jest-pnp-resolver": "1.0.1", + "jest-pnp-resolver": "1.0.2", "jest-resolve": "23.6.0", - "mini-css-extract-plugin": "0.4.3", + "jest-watch-typeahead": "^0.2.1", + "mini-css-extract-plugin": "0.5.0", "optimize-css-assets-webpack-plugin": "5.0.1", - "pnp-webpack-plugin": "1.1.0", + "pnp-webpack-plugin": "1.2.1", "postcss-flexbugs-fixes": "4.1.0", "postcss-loader": "3.0.0", - "postcss-preset-env": "6.3.1", + "postcss-preset-env": "6.5.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^0.2.0", - "react-dev-utils": "^7.0.1", - "resolve": "1.8.1", + "react-app-polyfill": "^0.2.2", + "react-dev-utils": "^8.0.0", + "resolve": "1.10.0", "sass-loader": "7.1.0", - "style-loader": "0.23.0", - "terser-webpack-plugin": "1.1.0", - "url-loader": "1.1.1", - "webpack": "4.19.1", + "style-loader": "0.23.1", + "terser-webpack-plugin": "1.2.2", + "url-loader": "1.1.2", + "webpack": "4.28.3", "webpack-dev-server": "3.1.14", "webpack-manifest-plugin": "2.0.4", "workbox-webpack-plugin": "3.6.3" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } + } } }, "react-slick": { @@ -14757,6 +14277,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -14826,9 +14351,9 @@ } }, "realpath-native": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", - "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", "requires": { "util.promisify": "^1.0.0" } @@ -14847,9 +14372,9 @@ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.1.tgz", + "integrity": "sha512-HTjMafphaH5d5QDHuwW8Me6Hbc/GhXg8luNqTkPVwZ/oCZhnoifjWhGYsu2BzepMELTlbnoVcXvV0f+2uDDvoQ==", "requires": { "regenerate": "^1.4.0" } @@ -14860,9 +14385,9 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", "requires": { "private": "^0.1.6" } @@ -14884,22 +14409,27 @@ "safe-regex": "^1.1.0" } }, + "regexp-tree": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", + "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==" + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.3.tgz", + "integrity": "sha512-LON8666bTAlViVEPXMv65ZqiaR3rMNLz36PIaQ7D+er5snu93k0peR7FSvO0QteYbZ3GOkvfHKbGr/B1xDu9FA==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", + "regenerate-unicode-properties": "^8.0.1", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" + "unicode-match-property-value-ecmascript": "^1.1.0" } }, "regjsgen": { @@ -14922,6 +14452,16 @@ } } }, + "rehype-parse": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.0.tgz", + "integrity": "sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA==", + "requires": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.1" + } + }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -14933,13 +14473,13 @@ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "renderkid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", - "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "requires": { "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", "strip-ansi": "^3.0.0", "utila": "^0.4.0" }, @@ -14984,6 +14524,11 @@ "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -15028,21 +14573,21 @@ } }, "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "requires": { - "lodash": "^4.13.1" + "lodash": "^4.17.11" } }, "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -15060,35 +14605,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" - } - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -15115,15 +14631,6 @@ "resolve-from": "^3.0.0" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -15216,9 +14723,9 @@ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "^1.9.0" } @@ -15447,6 +14954,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -15581,18 +15093,10 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "saxes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.6.tgz", - "integrity": "sha512-LAYs+lChg1v5uKNzPtsgTxSS5hLo8aIhSMCJt1WMpefAxm3D1RTpMwSpb6ebdL31cubiLTnhokVktBW+cv9Y9w==", - "requires": { - "xmlchars": "^1.3.1" - } - }, "scheduler": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", - "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", + "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -15767,6 +15271,11 @@ "mixin-object": "^2.0.1" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "kind-of": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", @@ -15788,9 +15297,9 @@ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" }, "shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.0.0.tgz", - "integrity": "sha1-UI0YOLPeWQq4dXsBGyXkMJAJRfc=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.1.0.tgz", + "integrity": "sha512-0SW1nWo1hnabO62SEeHsl8nmTVVEzguVWZCj5gaQrgWAxz/BaCja4OWdJBWLVPDxdtE/WU7c98uUCCXyPHSCvw==" }, "shallowequal": { "version": "1.1.0", @@ -15892,10 +15401,12 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -16024,30 +15535,25 @@ } }, "sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", "json3": "^3.3.2", - "url-parse": "^1.1.8" + "url-parse": "^1.4.3" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -16086,6 +15592,14 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, + "space-separated-tokens": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz", + "integrity": "sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA==", + "requires": { + "trim": "0.0.1" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -16140,9 +15654,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16173,9 +15687,9 @@ } }, "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -16290,9 +15804,9 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -16431,59 +15945,28 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz", - "integrity": "sha512-uCcN7XWHkqwGVt7skpInW6IGO1tG6ReyFQ1Cseh0VcN6VdcFQi62aG/2F3Y9ueA8x4IVlfaSUxpmQXQD9QrEuQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "requires": { "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "schema-utils": "^1.0.0" } }, "stylehacks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", - "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "requires": { "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", - "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -16524,22 +16007,22 @@ } }, "svgo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", - "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", + "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", "requires": { - "coa": "~2.0.1", - "colors": "~1.1.2", + "chalk": "^2.4.1", + "coa": "^2.0.2", "css-select": "^2.0.0", - "css-select-base-adapter": "~0.1.0", + "css-select-base-adapter": "^0.1.1", "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", - "csso": "^3.5.0", + "csso": "^3.5.1", "js-yaml": "^3.12.0", "mkdirp": "~0.5.1", - "object.values": "^1.0.4", + "object.values": "^1.1.0", "sax": "~1.2.4", - "stable": "~0.1.6", + "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" } @@ -16550,16 +16033,39 @@ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" }, "table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", - "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "requires": { - "ajv": "^6.0.1", - "ajv-keywords": "^3.0.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "tachyons": { @@ -16582,20 +16088,15 @@ } }, "terser": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", - "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "source-map-support": "~0.5.10" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16613,76 +16114,20 @@ } }, "terser-webpack-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz", - "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", "requires": { "cacache": "^11.0.2", "find-cache-dir": "^2.0.0", "schema-utils": "^1.0.0", "serialize-javascript": "^1.4.0", "source-map": "^0.6.1", - "terser": "^3.8.1", + "terser": "^3.16.1", "webpack-sources": "^1.1.0", "worker-farm": "^1.5.2" }, "dependencies": { - "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "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==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" - }, - "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==", - "requires": { - "find-up": "^3.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16868,16 +16313,31 @@ "punycode": "^2.1.0" } }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, + "trough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", + "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==" + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "ts-pnp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.0.1.tgz", + "integrity": "sha512-Zzg9XH0anaqhNSlDRibNC8Kp+B9KNM0uRIpLpGkGyrgRIttA7zZBhotTSEoEyuDrz3QW2LGtu2dxuk34HzIGnQ==" + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -16949,110 +16409,6 @@ } } }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - } - } - }, "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", @@ -17068,14 +16424,29 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" }, "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + }, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "requires": { + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" + } }, "union-value": { "version": "1.0.0", @@ -17135,6 +16506,11 @@ "imurmurhash": "^0.1.4" } }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -17192,9 +16568,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.1.tgz", + "integrity": "sha512-D0yetkpIOKiZQquxjM2Syvy48Y1DbZ0SWxgsZiwd9GCWRpc75vN8ytzem14WDSg+oiX6+Qt31FpiS/ExODCrLg==" }, "upper-case": { "version": "1.1.3", @@ -17231,9 +16607,9 @@ } }, "url-loader": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.1.tgz", - "integrity": "sha512-vugEeXjyYFBCUOpX+ZuaunbK3QXMKaQ3zUnRfIpRBlGkY7QizCnzyyn2ASfcxsvyU3ef+CJppVywnl3Kgf13Gg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", "requires": { "loader-utils": "^1.1.0", "mime": "^2.0.3", @@ -17325,6 +16701,25 @@ "extsprintf": "^1.2.0" } }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", @@ -17346,16 +16741,6 @@ "browser-process-hrtime": "^0.1.2" } }, - "w3c-xmlserializer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.0.1.tgz", - "integrity": "sha512-XZGI1OH/OLQr/NaJhhPmzhngwcAnZDLytsvXnRmlYeRkmbb0I7sqFFA22erq4WQR0sUu17ZSQOAV9mFwCqKRNg==", - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -17399,20 +16784,25 @@ "minimalistic-assert": "^1.0.0" } }, + "web-namespaces": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.2.tgz", + "integrity": "sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==" + }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.1.tgz", - "integrity": "sha512-j7Q/5QqZRqIFXJvC0E59ipLV5Hf6lAnS3ezC3I4HMUybwEDikQBVad5d+IpPtmaQPQArvgUZLXIN6lWijHBn4g==", - "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/wasm-edit": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.3.tgz", + "integrity": "sha512-vLZN9k5I7Nr/XB1IDG9GbZB4yQd1sPuvufMFgJkx0b31fi2LD97KQIjwjxE7xytdruAYfu5S0FLBLjdxmwGJCg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", "acorn": "^5.6.2", "acorn-dynamic-import": "^3.0.0", "ajv": "^6.1.0", @@ -17430,9 +16820,9 @@ "node-libs-browser": "^2.0.0", "schema-utils": "^0.4.4", "tapable": "^1.1.0", - "uglifyjs-webpack-plugin": "^1.2.4", + "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", - "webpack-sources": "^1.2.0" + "webpack-sources": "^1.3.0" }, "dependencies": { "acorn": { @@ -17486,9 +16876,9 @@ } }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -17639,6 +17029,11 @@ "kind-of": "^6.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -17785,14 +17180,6 @@ "xregexp": "4.0.0" } }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -17855,13 +17242,13 @@ } }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "p-is-promise": "^2.0.0" } }, "os-locale": { @@ -17875,9 +17262,9 @@ } }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "requires": { "p-try": "^2.0.0" } @@ -17895,27 +17282,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" }, - "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==", - "requires": { - "find-up": "^3.0.0" - } - }, - "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - } - }, "yargs": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", @@ -18013,9 +17379,9 @@ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" }, "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -18243,9 +17609,9 @@ } }, "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", + "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -18253,23 +17619,23 @@ } }, "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "requires": { "async-limiter": "~1.0.0" } }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, - "xmlchars": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", - "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==" - }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", diff --git a/client/package.json b/client/package.json index 6f1dfa4af..8b12279ac 100644 --- a/client/package.json +++ b/client/package.json @@ -4,21 +4,21 @@ "private": true, "proxy": "http://localhost:3010", "dependencies": { - "antd": "^3.10.9", + "antd": "^3.15.0", "brace": "^0.11.1", "d3": "^3.5.17", "keymaster": "^1.6.2", "lodash.debounce": "^4.0.8", "lodash.sortby": "^4.7.0", "lodash.uniq": "^4.5.0", - "prop-types": "^15.6.1", - "react": "^16.6.3", - "react-ace": "^6.2.0", + "prop-types": "^15.7.2", + "react": "^16.8.4", + "react-ace": "^6.4.0", "react-copy-to-clipboard": "^5.0.0", - "react-dom": "^16.6.3", - "react-draggable": "^3.0.5", + "react-dom": "^16.8.4", + "react-draggable": "^3.2.1", "react-router-dom": "^4.2.2", - "react-scripts": "^2.1.3", + "react-scripts": "^2.1.8", "react-split-pane": "^0.1.84", "react-virtualized": "^9.21.0", "sql-formatter": "^2.3.2", diff --git a/package-lock.json b/package-lock.json index 8a5a7ebfd..1141ec437 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,6 +72,15 @@ "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==", "dev": true }, + "@babel/runtime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", + "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, "@babel/template": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", @@ -111,83 +120,6 @@ "to-fast-properties": "^2.0.0" } }, - "@iamstarkov/listr-update-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz", - "integrity": "sha512-IJyxQWsYDEkf8C8QthBn5N8tIUR9V9je6j3sMIpAkonaadjbvxmRC6RAhpa3RKxndhNnU2M6iNbtJwd7usQYIA==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -694,9 +626,9 @@ "dev": true }, "confusing-browser-globals": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz", - "integrity": "sha512-tHo1tQL/9Ox5RELbkCAJhnViqWlzBz3MG1bB2czbHjH2mWd4aYUgNCNLfysFL7c4LoDws7pjg2tj48Gmpw4QHA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz", + "integrity": "sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg==", "dev": true }, "contains-path": { @@ -875,9 +807,9 @@ "dev": true }, "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "end-of-stream": { @@ -997,12 +929,12 @@ } }, "eslint-config-react-app": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz", - "integrity": "sha512-VL5rA1EBZv7f9toc9x71or7nr4jRmwCH4V9JKB9DFVaTLOLI9+vjWLgQLjMu3xR9iUT80dty86RbCfNaKyrFFg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", + "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", "dev": true, "requires": { - "confusing-browser-globals": "^1.0.5" + "confusing-browser-globals": "^1.0.6" } }, "eslint-import-resolver-node": { @@ -1033,13 +965,13 @@ } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", "dev": true, "requires": { "debug": "^2.6.8", - "pkg-dir": "^1.0.0" + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { @@ -1069,21 +1001,21 @@ } }, "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", "dev": true, "requires": { "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.3.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.9.0" }, "dependencies": { "debug": { @@ -1114,17 +1046,17 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", - "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", + "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", "dev": true, "requires": { "aria-query": "^3.0.0", "array-includes": "^3.0.3", "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.1", + "axobject-query": "^2.0.2", "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^6.5.1", + "emoji-regex": "^7.0.2", "has": "^1.0.3", "jsx-ast-utils": "^2.0.1" } @@ -1457,13 +1389,12 @@ "dev": true }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -1478,6 +1409,12 @@ "write": "^0.2.1" } }, + "fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -2145,24 +2082,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true - }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2218,12 +2137,6 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2235,15 +2148,14 @@ } }, "lint-staged": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.0.tgz", - "integrity": "sha512-yfSkyJy7EuVsaoxtUSEhrD81spdJOe/gMTGea3XaV7HyoRhTb9Gdlp6/JppRZERvKSEYXP9bjcmq6CA5oL2lYQ==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", + "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", "dev": true, "requires": { - "@iamstarkov/listr-update-renderer": "0.4.1", "chalk": "^2.3.1", "commander": "^2.14.1", - "cosmiconfig": "5.0.6", + "cosmiconfig": "^5.0.2", "debug": "^3.1.0", "dedent": "^0.7.0", "del": "^3.0.0", @@ -2252,9 +2164,9 @@ "g-status": "^2.0.2", "is-glob": "^4.0.0", "is-windows": "^1.0.2", - "jest-validate": "^23.5.0", "listr": "^0.14.2", - "lodash": "^4.17.5", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", "log-symbols": "^2.2.0", "micromatch": "^3.1.8", "npm-which": "^3.0.1", @@ -2264,20 +2176,10 @@ "please-upgrade-node": "^3.0.2", "staged-git-files": "1.1.2", "string-argv": "^0.0.2", - "stringify-object": "^3.2.2" + "stringify-object": "^3.2.2", + "yup": "^0.26.10" }, "dependencies": { - "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" - } - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -2287,16 +2189,6 @@ "ms": "^2.1.1" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -2445,14 +2337,6 @@ "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" - }, - "dependencies": { - "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 - } } }, "lodash": { @@ -2839,13 +2723,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "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", @@ -2902,12 +2783,12 @@ } }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^1.0.0" + "find-up": "^2.1.0" } }, "please-upgrade-node": { @@ -2938,9 +2819,9 @@ "dev": true }, "prettier": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", - "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==", + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", "dev": true }, "prettier-linter-helpers": { @@ -2952,16 +2833,6 @@ "fast-diff": "^1.1.2" } }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -2978,6 +2849,12 @@ "object-assign": "^4.1.1" } }, + "property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -3013,19 +2890,14 @@ "requires": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } } }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -3519,6 +3391,12 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, + "synchronous-promise": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz", + "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", + "dev": true + }, "table": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", @@ -3602,6 +3480,12 @@ "repeat-string": "^1.6.1" } }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -3768,6 +3652,20 @@ "requires": { "mkdirp": "^0.5.1" } + }, + "yup": { + "version": "0.26.10", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", + "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==", + "dev": true, + "requires": { + "@babel/runtime": "7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.10", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.5", + "toposort": "^2.0.2" + } } } } diff --git a/package.json b/package.json index 3c596459e..b62b80bc7 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,15 @@ "devDependencies": { "babel-eslint": "^9.0.0", "eslint": "5.6.0", - "eslint-config-react-app": "^3.0.6", + "eslint-config-react-app": "^3.0.8", "eslint-plugin-flowtype": "^2.50.3", - "eslint-plugin-import": "^2.11.0", - "eslint-plugin-jsx-a11y": "^6.1.2", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-jsx-a11y": "^6.2.1", "eslint-plugin-prettier": "^3.0.1", "eslint-plugin-react": "^7.12.3", "husky": "^1.3.1", - "lint-staged": "^8.1.0", - "prettier": "^1.12.1" + "lint-staged": "^8.1.5", + "prettier": "^1.16.4" }, "prettier": { "semi": false, diff --git a/server/package-lock.json b/server/package-lock.json index 58780b77b..dec930d1b 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -408,9 +408,9 @@ "dev": true }, "core-js": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", - "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-util-is": { "version": "1.0.2", @@ -827,9 +827,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "generic-pool": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", - "integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w==" + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.6.1.tgz", + "integrity": "sha512-iMmD/pY4q0+V+f8o4twE9JPeqfNuX+gJAaIPB3B0W1lFkBOtTxBo6B0HxHPgGhzQA8jego7EWopcYq/UDJO2KA==" }, "get-stdin": { "version": "4.0.1", @@ -933,10 +933,11 @@ "dev": true }, "helmet": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.0.tgz", - "integrity": "sha512-j9JjtAnWJj09lqe/PEICrhuDaX30TeokXJ9tW6ZPhVH0+LMoihDeJ58CdWeTGzM66p6EiIODmgAaWfdeIWI4Gg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.16.0.tgz", + "integrity": "sha512-rsTKRogc5OYGlvSHuq5QsmOsOzF6uDoMqpfh+Np8r23+QxDq+SUx90Rf8HyIKQVl7H6NswZEwfcykinbAeZ6UQ==", "requires": { + "depd": "2.0.0", "dns-prefetch-control": "0.1.0", "dont-sniff-mimetype": "1.0.0", "expect-ct": "0.1.1", @@ -946,11 +947,18 @@ "helmet-csp": "2.7.1", "hide-powered-by": "1.0.0", "hpkp": "2.0.0", - "hsts": "2.1.0", - "ienoopen": "1.0.0", + "hsts": "2.2.0", + "ienoopen": "1.1.0", "nocache": "2.0.0", "referrer-policy": "1.1.0", "x-xss-protection": "1.1.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } } }, "helmet-crossdomain": { @@ -991,9 +999,19 @@ "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" }, "hsts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", - "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz", + "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==", + "requires": { + "depd": "2.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } }, "http-errors": { "version": "1.6.3", @@ -1025,9 +1043,9 @@ } }, "ienoopen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", - "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", + "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==" }, "immediate": { "version": "3.0.6", @@ -1582,9 +1600,9 @@ } }, "moment": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", - "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==" + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "morgan": { "version": "1.9.1", @@ -1604,12 +1622,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mssql": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.3.0.tgz", - "integrity": "sha512-MpSwdLMbKfFL3DwjhgbJdFViU+ye9YR+op/t/CdhWwYdA90qWYjPyWbIzso/2xRfm7liYNkN5EZjAS9PWFLLZg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.3.5.tgz", + "integrity": "sha512-eF+hwT/VUDiqDDWHDNPfM853+ha4wg7k2+vWxKLbkuN/A8WbPt+/y4pOqsUIH/T03u9hDU1sw8SZ4FS0l9sXig==", "requires": { "debug": "^3.2.6", - "generic-pool": "^3.4.2", + "generic-pool": "^3.6.1", "tedious": "^2.7.1" }, "dependencies": { @@ -1844,9 +1862,9 @@ } }, "packet-reader": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", - "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, "parse-json": { "version": "2.2.0", @@ -1958,12 +1976,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.0.tgz", - "integrity": "sha512-yS3C9YD+ft0H7G47uU0eKajgTieggCXdA+Fxhm5G+wionY6kPBa8BEVDwPLMxQvkRkv3/LXiFEqjZm9gfxdW+g==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.2.tgz", + "integrity": "sha512-5U4fjV43DnQxelkhyPdU3YfUbYVa21bNmreXRCM/gFFw09YxWaitWWITm/u0twUNF5EYOSDhkgyEAocgtpP9JQ==", "requires": { "buffer-writer": "2.0.0", - "packet-reader": "0.3.1", + "packet-reader": "1.0.0", "pg-connection-string": "0.1.3", "pg-pool": "^2.0.4", "pg-types": "~2.0.0", @@ -2060,9 +2078,9 @@ "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" }, "postgres-interval": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz", - "integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "requires": { "xtend": "^4.0.0" } @@ -2565,9 +2583,9 @@ } }, "supertest": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.1.tgz", - "integrity": "sha512-r4AmsjjKxC50LxGACe/E4xKjau2amiFlj3aCT2sZCRig2o3l4XFN6Acw7crDu4d8Af1f5chafIyLkQ1mac/boA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz", + "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", "dev": true, "requires": { "methods": "^1.1.2", diff --git a/server/package.json b/server/package.json index c929711c9..346fd9073 100644 --- a/server/package.json +++ b/server/package.json @@ -40,16 +40,16 @@ "express": "^4.16.4", "express-session": "^1.15.6", "hdb": "^0.15.4", - "helmet": "^3.15.0", + "helmet": "^3.16.0", "joi": "^12.0.0", "json2csv": "^3.11.5", "latest-version": "^3.1.0", "lodash": "^4.17.11", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "moment": "^2.23.0", + "moment": "^2.24.0", "morgan": "^1.9.1", - "mssql": "^4.3.0", + "mssql": "^4.3.5", "mysql": "^2.16.0", "nedb": "^1.8.0", "nedb-promise": "^2.0.1", @@ -61,7 +61,7 @@ "passport-google-oauth20": "^2.0.0", "passport-http": "^0.3.0", "passport-local": "^1.0.0", - "pg": "^7.8.0", + "pg": "^7.8.2", "pg-cursor": "^1.0.1", "request": "^2.88.0", "rimraf": "^2.6.3", @@ -83,6 +83,6 @@ "devDependencies": { "mocha": "^5.2.0", "node-dev": "^3.1.3", - "supertest": "^3.3.0" + "supertest": "^3.4.2" } } From efed7e109fbf03b74b88ff3dbdd0318de8f978b1 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 10 Mar 2019 20:37:28 -0400 Subject: [PATCH 004/855] Fix create-react-app complaint about different eslint version --- package-lock.json | 215 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 122 insertions(+), 95 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1141ec437..71d75275c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,9 +130,9 @@ } }, "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "acorn-jsx": { @@ -142,9 +142,9 @@ "dev": true }, "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -153,12 +153,6 @@ "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -272,6 +266,12 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -441,19 +441,10 @@ } } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, "chalk": { @@ -862,21 +853,21 @@ "dev": true }, "eslint": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz", - "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.0.tgz", + "integrity": "sha512-LntwyPxtOHrsJdcSwyQKVtHofPHdv+4+mFwEe91r2V13vqpM8yLr7b1sW+Oo/yheOPkWYsYlYJCkzlFAt8KV7g==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.5.3", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", - "debug": "^3.1.0", + "debug": "^4.0.1", "doctrine": "^2.1.0", "eslint-scope": "^4.0.0", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", + "espree": "^5.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", @@ -884,9 +875,9 @@ "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", @@ -898,32 +889,32 @@ "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^2.0.0", - "require-uncached": "^1.0.3", + "regexpp": "^2.0.1", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^4.0.3", + "table": "^5.0.2", "text-table": "^0.2.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", "dev": true, "requires": { - "ms": "^2.1.1" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } } } @@ -1108,12 +1099,12 @@ "dev": true }, "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -1777,39 +1768,54 @@ "dev": true }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", "dev": true, "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" } } } @@ -2037,12 +2043,6 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2707,6 +2707,15 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -2926,16 +2935,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, "resolve": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", @@ -2946,9 +2945,9 @@ } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "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": { @@ -3093,11 +3092,13 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -3398,17 +3399,43 @@ "dev": true }, "table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", - "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, "requires": { - "ajv": "^6.0.1", - "ajv-keywords": "^3.0.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "text-table": { diff --git a/package.json b/package.json index b62b80bc7..cac874c56 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "devDependencies": { "babel-eslint": "^9.0.0", - "eslint": "5.6.0", + "eslint": "5.12.0", "eslint-config-react-app": "^3.0.8", "eslint-plugin-flowtype": "^2.50.3", "eslint-plugin-import": "^2.16.0", From e1c4305d03b35f20aefd0af36d3a4e6f58688621 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 10 Mar 2019 20:51:23 -0400 Subject: [PATCH 005/855] fix server/package.json main and bin paths --- server/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/package.json b/server/package.json index 346fd9073..15bc48003 100644 --- a/server/package.json +++ b/server/package.json @@ -73,9 +73,9 @@ "uuid": "^3.3.2", "vertica": "^0.5.5" }, - "main": "./server/app.js", + "main": "./app.js", "bin": { - "sqlpad": "./server/server.js" + "sqlpad": "./server.js" }, "optionalDependencies": { "odbc": "^1.4.1" From cb4705b89c6653ebbea950eb48987f542d2372c3 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 11 Mar 2019 09:28:22 -0400 Subject: [PATCH 006/855] fix lint --- .eslintrc | 6 +-- package-lock.json | 9 ++++ package.json | 1 + server/drivers/crate/index.js | 5 +- server/drivers/vertica/index.js | 89 ++++++++++++++++----------------- 5 files changed, 55 insertions(+), 55 deletions(-) diff --git a/.eslintrc b/.eslintrc index db7697223..6247e7151 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,6 @@ { - "extends": "react-app", + "extends": ["plugin:prettier/recommended", "react-app"], "env": { "mocha": true - }, - "plugins": ["prettier"], - "rules": { - "prettier/prettier": "error" } } diff --git a/package-lock.json b/package-lock.json index 71d75275c..cc66aff74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -919,6 +919,15 @@ } } }, + "eslint-config-prettier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz", + "integrity": "sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, "eslint-config-react-app": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", diff --git a/package.json b/package.json index cac874c56..d15e70245 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "devDependencies": { "babel-eslint": "^9.0.0", "eslint": "5.12.0", + "eslint-config-prettier": "^4.1.0", "eslint-config-react-app": "^3.0.8", "eslint-plugin-flowtype": "^2.50.3", "eslint-plugin-import": "^2.16.0", diff --git a/server/drivers/crate/index.js b/server/drivers/crate/index.js index f9ad9499a..cfc89db8c 100644 --- a/server/drivers/crate/index.js +++ b/server/drivers/crate/index.js @@ -48,10 +48,7 @@ function runQuery(query, connection) { const limit = maxRows < CRATE_LIMIT ? maxRows : CRATE_LIMIT if (connection.port) { - crate.connect( - connection.host, - connection.port - ) + crate.connect(connection.host, connection.port) } else { crate.connect(connection.host) } diff --git a/server/drivers/vertica/index.js b/server/drivers/vertica/index.js index 255c15caa..fd839b941 100644 --- a/server/drivers/vertica/index.js +++ b/server/drivers/vertica/index.js @@ -38,58 +38,55 @@ function runQuery(query, connection) { } return new Promise((resolve, reject) => { - const client = vertica.connect( - params, - function(err) { - if (err) { - client.disconnect() - return reject(err) - } + const client = vertica.connect(params, function(err) { + if (err) { + client.disconnect() + return reject(err) + } - let incomplete = false - const rows = [] - let finished = false - let columnNames = [] + let incomplete = false + const rows = [] + let finished = false + let columnNames = [] - const verticaQuery = client.query(query) + const verticaQuery = client.query(query) - verticaQuery.on('fields', fields => { - columnNames = fields.map(field => field.name) - }) + verticaQuery.on('fields', fields => { + columnNames = fields.map(field => field.name) + }) - verticaQuery.on('row', function(row) { - if (rows.length < connection.maxRows) { - const resultRow = {} - row.forEach((value, index) => { - resultRow[columnNames[index]] = value - }) - return rows.push(resultRow) - } - if (!finished) { - finished = true - client.disconnect() - incomplete = true - return resolve({ rows, incomplete }) - } - }) + verticaQuery.on('row', function(row) { + if (rows.length < connection.maxRows) { + const resultRow = {} + row.forEach((value, index) => { + resultRow[columnNames[index]] = value + }) + return rows.push(resultRow) + } + if (!finished) { + finished = true + client.disconnect() + incomplete = true + return resolve({ rows, incomplete }) + } + }) - verticaQuery.on('end', function() { - if (!finished) { - finished = true - client.disconnect() - return resolve({ rows, incomplete }) - } - }) + verticaQuery.on('end', function() { + if (!finished) { + finished = true + client.disconnect() + return resolve({ rows, incomplete }) + } + }) - verticaQuery.on('error', function(err) { - if (!finished) { - finished = true - client.disconnect() - return reject(err) - } - }) - } - ) + verticaQuery.on('error', function(err) { + if (!finished) { + finished = true + client.disconnect() + return reject(err) + } + }) + }) }) } From b662cfd76d06d801e937b15c2f9d73a4383e7fdc Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 12 Mar 2019 08:44:13 -0400 Subject: [PATCH 007/855] Fix editor resize (#413) * Install react-measure * Use react-measure for editor resize * Use react-measure for data table size --- client/package-lock.json | 31 +++++++++ client/package.json | 1 + client/src/common/QueryResultDataTable.js | 77 +++++++++++------------ client/src/common/SqlEditor.js | 64 ++++++++++++------- client/src/queryEditor/QueryEditor.js | 15 ----- 5 files changed, 111 insertions(+), 77 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 51a6ddc53..9eab63055 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -7053,6 +7053,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, + "get-node-dimensions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz", + "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==" + }, "get-own-enumerable-property-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", @@ -13881,6 +13886,32 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "react-measure": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/react-measure/-/react-measure-2.2.4.tgz", + "integrity": "sha512-gpZA4J8sKy1TzTfnOXiiTu01GV8B5OyfF9k7Owt38T6Xxlll19PBE13HKTtauEmDdJO5u4o3XcTiGqCw5wpfjw==", + "requires": { + "@babel/runtime": "^7.2.0", + "get-node-dimensions": "^1.2.1", + "prop-types": "^15.6.2", + "resize-observer-polyfill": "^1.5.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", + "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } + } + }, "react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", diff --git a/client/package.json b/client/package.json index 8b12279ac..e9f710416 100644 --- a/client/package.json +++ b/client/package.json @@ -17,6 +17,7 @@ "react-copy-to-clipboard": "^5.0.0", "react-dom": "^16.8.4", "react-draggable": "^3.2.1", + "react-measure": "^2.2.4", "react-router-dom": "^4.2.2", "react-scripts": "^2.1.8", "react-split-pane": "^0.1.84", diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index 6d77faea9..9c6349604 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -1,6 +1,7 @@ import React from 'react' import { MultiGrid } from 'react-virtualized' import Draggable from 'react-draggable' +import Measure from 'react-measure' import SpinKitCube from './SpinKitCube.js' import moment from 'moment' import 'react-virtualized/styles.css' @@ -46,21 +47,13 @@ const renderNumberBar = (value, fieldMeta) => { // It would otherwise not rerender on change of prop.queryResult alone class QueryResultDataTable extends React.PureComponent { state = { - gridWidth: 0, - gridHeight: 0, + dimensions: { + width: -1, + height: -1 + }, columnWidths: {} } - handleResize = e => { - const resultGrid = document.getElementById('result-grid') - if (resultGrid) { - this.setState({ - gridHeight: resultGrid.clientHeight, - gridWidth: resultGrid.clientWidth - }) - } - } - static getDerivedStateFromProps(nextProps, prevState) { const { queryResult } = nextProps const { columnWidths } = prevState @@ -88,15 +81,6 @@ class QueryResultDataTable extends React.PureComponent { return { columnWidths } } - componentDidMount() { - window.addEventListener('resize', this.handleResize) - this.handleResize() - } - - componentWillUnmount() { - window.removeEventListener('resize', this.handleResize) - } - headerCellRenderer = ({ columnIndex, key, style }) => { const { queryResult } = this.props const dataKey = queryResult.fields[columnIndex] @@ -209,18 +193,17 @@ class QueryResultDataTable extends React.PureComponent { const { columnWidths } = this.state const { queryResult } = this.props const dataKey = queryResult.fields[index] - const { gridWidth } = this.state + const { width } = this.state.dimensions if (dataKey) { - const width = columnWidths[dataKey] - return width + return columnWidths[dataKey] } const totalWidthFilled = queryResult.fields .map(key => columnWidths[key]) .reduce((prev, curr) => prev + curr, 0) - const fakeColumnWidth = gridWidth - totalWidthFilled + const fakeColumnWidth = width - totalWidthFilled return fakeColumnWidth < 10 ? 10 : fakeColumnWidth } @@ -240,7 +223,7 @@ class QueryResultDataTable extends React.PureComponent { render() { const { isRunning, queryError, queryResult } = this.props - const { gridHeight, gridWidth } = this.state + const { height, width } = this.state.dimensions if (isRunning) { return ( @@ -269,21 +252,35 @@ class QueryResultDataTable extends React.PureComponent { const rowCount = queryResult.rows.length + 1 // Add extra column to fill remaining grid width if necessary const columnCount = queryResult.fields.length + 1 + return ( -
- (this.ref = ref)} - columnWidth={this.getColumnWidth} - columnCount={columnCount} - rowCount={rowCount} - cellRenderer={this.cellRenderer} - fixedRowCount={1} - onScroll={this.handleScrollBug} - /> -
+ { + this.setState({ dimensions: contentRect.bounds }) + }} + > + {({ measureRef }) => ( +
+ (this.ref = ref)} + columnWidth={this.getColumnWidth} + columnCount={columnCount} + rowCount={rowCount} + cellRenderer={this.cellRenderer} + fixedRowCount={1} + onScroll={this.handleScrollBug} + /> +
+ )} +
) } diff --git a/client/src/common/SqlEditor.js b/client/src/common/SqlEditor.js index cd050bc86..15cea779c 100644 --- a/client/src/common/SqlEditor.js +++ b/client/src/common/SqlEditor.js @@ -5,12 +5,20 @@ import 'brace/mode/sql' import 'brace/theme/sqlserver' import PropTypes from 'prop-types' import React from 'react' +import Measure from 'react-measure' import AceEditor from 'react-ace' import AppContext from '../containers/AppContext' const noop = () => {} class SqlEditor extends React.Component { + state = { + dimensions: { + width: -1, + height: -1 + } + } + componentDidMount() { const { config, onChange } = this.props const editor = this.editor @@ -44,41 +52,54 @@ class SqlEditor extends React.Component { } } + handleRef = ref => { + this.editor = ref ? ref.editor : null + } + render() { - const { config, onChange, readOnly, value, height } = this.props + const { config, onChange, readOnly, value } = this.props + const { width, height } = this.state.dimensions if (this.editor && config.editorWordWrap) { this.editor.session.setUseWrapMode(true) } return ( - { - this.editor = ref ? ref.editor : null + { + this.setState({ dimensions: contentRect.bounds }) }} - /> + > + {({ measureRef }) => ( +
+ +
+ )} +
) } } SqlEditor.propTypes = { config: PropTypes.object.isRequired, - height: PropTypes.string, onChange: PropTypes.func, onSelectionChange: PropTypes.func, readOnly: PropTypes.bool, @@ -86,7 +107,6 @@ SqlEditor.propTypes = { } SqlEditor.defaultProps = { - height: '100%', onSelectionChange: () => {}, readOnly: false, value: '' diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 71fe83885..06aed2780 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -305,15 +305,6 @@ class QueryEditor extends React.Component { this.formatQuery() } - handleSqlPaneResize = () => { - if (this.editor) { - this.editor.resize() - } - if (this.dataTable) { - this.dataTable.handleResize() - } - } - handleVisPaneResize = () => { if (this.sqlpadTauChart && this.sqlpadTauChart.chart) { this.sqlpadTauChart.chart.resize() @@ -363,7 +354,6 @@ class QueryEditor extends React.Component { minSize={150} defaultSize={280} maxSize={-100} - onChange={this.handleSqlPaneResize} > { - this.editor = ref ? ref.editor : null - }} onSelectionChange={this.handleQuerySelectionChange} />
@@ -405,7 +391,6 @@ class QueryEditor extends React.Component { isRunning={isRunning} queryError={queryError} queryResult={queryResult} - ref={ref => (this.dataTable = ref)} />
From ce89e71b40bae599358412b0289b64223a88229c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 12 Mar 2019 23:19:17 -0400 Subject: [PATCH 008/855] Prettier lint structure (#414) * Remove lint from root and into each project directory * Move .eslintignore to client * Run lint from client dir * Also check prettier formatting * Add eslint to server airbnb config! * Add server lint calls to root package.json * Add import/no-extraneous-dependencies and sort --- .eslintignore | 11 - .eslintrc | 6 - client/.eslintignore | 3 + client/.eslintrc | 3 + client/package-lock.json | 39 ++ client/package.json | 10 +- package-lock.json | 1228 -------------------------------------- package.json | 21 +- server/.eslintignore | 2 + server/.eslintrc | 40 ++ server/package-lock.json | 1062 ++++++++++++++++++++++++++++++++ server/package.json | 9 +- 12 files changed, 1168 insertions(+), 1266 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc create mode 100644 client/.eslintignore create mode 100644 client/.eslintrc create mode 100644 server/.eslintignore create mode 100644 server/.eslintrc diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index f5b53c7ab..000000000 --- a/.eslintignore +++ /dev/null @@ -1,11 +0,0 @@ -client/build -client/node_modules -client/public -db -dbtest -docker-validation -docs -docs-source -scripts -server/node_modules -server/public \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 6247e7151..000000000 --- a/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["plugin:prettier/recommended", "react-app"], - "env": { - "mocha": true - } -} diff --git a/client/.eslintignore b/client/.eslintignore new file mode 100644 index 000000000..a68457dbe --- /dev/null +++ b/client/.eslintignore @@ -0,0 +1,3 @@ +build +node_modules +public \ No newline at end of file diff --git a/client/.eslintrc b/client/.eslintrc new file mode 100644 index 000000000..0d29ba72b --- /dev/null +++ b/client/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["plugin:prettier/recommended", "react-app"] +} diff --git a/client/package-lock.json b/client/package-lock.json index 9eab63055..2585b657e 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -5143,6 +5143,15 @@ } } }, + "eslint-config-prettier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz", + "integrity": "sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, "eslint-config-react-app": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", @@ -5346,6 +5355,15 @@ } } }, + "eslint-plugin-prettier": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", + "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-plugin-react": { "version": "7.12.4", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", @@ -5667,6 +5685,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-glob": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", @@ -7063,6 +7087,12 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -12843,6 +12873,15 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==" }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-bytes": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", diff --git a/client/package.json b/client/package.json index e9f710416..afdca1549 100644 --- a/client/package.json +++ b/client/package.json @@ -31,12 +31,18 @@ "build": "react-scripts build", "eject": "react-scripts eject", "start": "react-scripts start", - "test": "react-scripts test --env=jsdom" + "test": "react-scripts test --env=jsdom", + "fixlint": "eslint --fix '**/*.js'", + "lint": "eslint '**/*.js'" }, "browserslist": [ ">0.2%", "not dead", "not ie <= 11", "not op_mini all" - ] + ], + "devDependencies": { + "eslint-config-prettier": "^4.1.0", + "eslint-plugin-prettier": "^3.0.1" + } } diff --git a/package-lock.json b/package-lock.json index cc66aff74..d34974596 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,74 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", - "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", - "dev": true, - "requires": { - "@babel/types": "^7.2.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", - "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==", - "dev": true - }, "@babel/runtime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", @@ -81,45 +13,6 @@ "regenerator-runtime": "^0.12.0" } }, - "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" - } - }, - "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - } - }, - "@babel/types": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", - "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -129,30 +22,6 @@ "any-observable": "^0.3.0" } }, - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -189,16 +58,6 @@ "sprintf-js": "~1.0.2" } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -217,16 +76,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -260,47 +109,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } - }, - "babel-eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", - "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -441,12 +255,6 @@ } } }, - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -458,24 +266,12 @@ "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -561,12 +357,6 @@ } } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -616,18 +406,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "confusing-browser-globals": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz", - "integrity": "sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg==", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -671,12 +449,6 @@ "which": "^1.2.9" } }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", @@ -704,21 +476,6 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -782,27 +539,12 @@ } } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -821,339 +563,18 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "eslint": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.0.tgz", - "integrity": "sha512-LntwyPxtOHrsJdcSwyQKVtHofPHdv+4+mFwEe91r2V13vqpM8yLr7b1sW+Oo/yheOPkWYsYlYJCkzlFAt8KV7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz", - "integrity": "sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-config-react-app": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", - "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.6" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-flowtype": { - "version": "2.50.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", - "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", - "has": "^1.0.3", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", - "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", - "dev": true, - "requires": { - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" - } - }, - "eslint-plugin-prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", - "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -1240,17 +661,6 @@ } } }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -1316,30 +726,6 @@ } } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -1349,16 +735,6 @@ "escape-string-regexp": "^1.0.5" } }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1388,27 +764,6 @@ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", "dev": true }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - } - }, "fn-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", @@ -1436,18 +791,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "g-status": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", @@ -1500,12 +843,6 @@ "path-is-absolute": "^1.0.0" } }, - "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", - "dev": true - }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -1519,21 +856,6 @@ "pinkie-promise": "^2.0.0" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -1557,12 +879,6 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -1706,21 +1022,6 @@ } } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -1748,12 +1049,6 @@ } } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", @@ -1776,59 +1071,6 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -1870,12 +1112,6 @@ "builtin-modules": "^1.0.0" } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -1905,12 +1141,6 @@ } } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -2037,15 +1267,6 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", @@ -2058,15 +1279,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -2091,12 +1303,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": 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 - }, "js-yaml": { "version": "3.12.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", @@ -2107,55 +1313,18 @@ "esprima": "^4.0.0" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, "lint-staged": { "version": "8.1.5", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", @@ -2326,28 +1495,6 @@ "figures": "^2.0.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -2374,15 +1521,6 @@ "wrap-ansi": "^3.0.1" } }, - "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" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -2443,12 +1581,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -2470,27 +1602,12 @@ } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -2510,12 +1627,6 @@ "to-regex": "^3.0.1" } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -2606,12 +1717,6 @@ } } }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -2621,18 +1726,6 @@ "isobject": "^3.0.0" } }, - "object.fromentries": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", - "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", - "function-bind": "^1.1.1", - "has": "^1.0.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -2660,92 +1753,24 @@ "mimic-fn": "^1.0.0" } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, "p-map": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2764,21 +1789,6 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2800,15 +1810,6 @@ "pinkie": "^2.0.0" } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, "please-upgrade-node": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", @@ -2818,55 +1819,18 @@ "semver-compare": "^1.0.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "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 }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, "prettier": { "version": "1.16.4", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", "dev": true }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "dev": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, "property-expr": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", @@ -2883,33 +1847,6 @@ "once": "^1.3.1" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, "regenerator-runtime": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", @@ -2926,12 +1863,6 @@ "safe-regex": "^1.1.0" } }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -2944,21 +1875,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "resolve": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", - "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", - "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", @@ -2990,15 +1906,6 @@ "glob": "^7.1.3" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, "run-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", @@ -3023,12 +1930,6 @@ "ret": "~0.1.10" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", @@ -3100,17 +2001,6 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -3368,24 +2258,12 @@ "ansi-regex": "^3.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-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", @@ -3407,73 +2285,6 @@ "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", "dev": true }, - "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", - "dev": true, - "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "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", @@ -3522,27 +2333,12 @@ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", "dev": true }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -3618,15 +2414,6 @@ } } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -3658,12 +2445,6 @@ "isexe": "^2.0.0" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, "wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", @@ -3680,15 +2461,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "yup": { "version": "0.26.10", "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz", diff --git a/package.json b/package.json index d15e70245..6e727588a 100644 --- a/package.json +++ b/package.json @@ -3,15 +3,6 @@ "version": "0.1.0", "private": true, "devDependencies": { - "babel-eslint": "^9.0.0", - "eslint": "5.12.0", - "eslint-config-prettier": "^4.1.0", - "eslint-config-react-app": "^3.0.8", - "eslint-plugin-flowtype": "^2.50.3", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-jsx-a11y": "^6.2.1", - "eslint-plugin-prettier": "^3.0.1", - "eslint-plugin-react": "^7.12.3", "husky": "^1.3.1", "lint-staged": "^8.1.5", "prettier": "^1.16.4" @@ -26,19 +17,13 @@ } }, "lint-staged": { - "*.{json,css}": [ - "prettier --write", - "git add" - ], - "*.js": [ - "eslint --fix", + "*.{js,json,css}": [ "prettier --write", "git add" ] }, "scripts": { - "fixlint": "eslint --fix '**/*.js' && prettier --write '**/*.js'", - "lint": "eslint '**/*.js'", - "precommit": "lint-staged" + "fixlint": "npm run fixlint --prefix client && npm run fixlint --prefix server && prettier --write '**/*.js'", + "lint": "npm run lint --prefix client && npm run lint --prefix server && prettier --check '**/*.js'" } } diff --git a/server/.eslintignore b/server/.eslintignore new file mode 100644 index 000000000..c523dda43 --- /dev/null +++ b/server/.eslintignore @@ -0,0 +1,2 @@ +node_modules +public \ No newline at end of file diff --git a/server/.eslintrc b/server/.eslintrc new file mode 100644 index 000000000..32a990a26 --- /dev/null +++ b/server/.eslintrc @@ -0,0 +1,40 @@ +{ + "extends": ["airbnb-base", "plugin:prettier/recommended"], + "env": { + "mocha": true + }, + "rules": { + "camelcase": "off", + "consistent-return": "off", + "dot-notation": "off", + "func-names": "off", + "global-require": "off", + "import/newline-after-import": "off", + "import/no-dynamic-require": "off", + "import/no-extraneous-dependencies": "off", + "import/no-unresolved": "off", + "import/order": "off", + "no-console": "off", + "no-else-return": "off", + "no-multi-assign": "off", + "no-param-reassign": "off", + "no-plusplus": "off", + "no-prototype-builtins": "off", + "no-restricted-globals": "off", + "no-restricted-syntax": "off", + "no-shadow": "off", + "no-underscore-dangle": "off", + "no-unused-vars": "off", + "no-use-before-define": "off", + "no-var": "off", + "object-shorthand": "off", + "one-var": "off", + "prefer-const": "off", + "prefer-destructuring": "off", + "prefer-promise-reject-errors": "off", + "prefer-template": "off", + "radix": "off", + "spaced-comment": "off", + "vars-on-top": "off" + } +} diff --git a/server/package-lock.json b/server/package-lock.json index dec930d1b..33407c356 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -13,6 +13,18 @@ "negotiator": "0.6.1" } }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, "address": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", @@ -38,12 +50,24 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "dev": true + }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -64,6 +88,23 @@ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -108,6 +149,53 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -229,6 +317,21 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -298,6 +401,27 @@ "supports-color": "^5.3.0" } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, "cli-table": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", @@ -316,6 +440,12 @@ "marked-terminal": "^3.0.0" } }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, "codepage": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.12.2.tgz", @@ -376,6 +506,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -439,6 +575,19 @@ "capture-stack-trace": "^1.0.0" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -496,6 +645,29 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + }, + "dependencies": { + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -531,6 +703,15 @@ "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dont-sniff-mimetype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", @@ -599,6 +780,39 @@ "escape-html": "~1.0.3" } }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + }, + "dependencies": { + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -610,12 +824,289 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.3.0.tgz", + "integrity": "sha512-N/tCqlMKkyNvAvLu+zI9AqDasnSLt00K+Hu8kdsERliC9jYEc8ck12XtjvOXrBKu8fK6RrBcN9bat6Xk++9jAg==", + "dev": true, + "requires": { + "ajv": "^6.5.0", + "babel-code-frame": "^6.26.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.2", + "imurmurhash": "^0.1.4", + "inquirer": "^5.2.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.11.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.0", + "string.prototype.matchall": "^2.0.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", + "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", + "dev": true, + "requires": { + "eslint-restricted-globals": "^0.1.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" + } + }, + "eslint-config-prettier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz", + "integrity": "sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.3.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "read-pkg-up": "^2.0.0", + "resolve": "^1.9.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", + "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -696,6 +1187,17 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -706,16 +1208,47 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "feature-policy": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, "filewatcher": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", @@ -764,6 +1297,18 @@ "is-buffer": "~2.0.3" } }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -826,6 +1371,18 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "generic-pool": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.6.1.tgz", @@ -863,6 +1420,12 @@ "path-is-absolute": "^1.0.0" } }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, "got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -912,12 +1475,36 @@ "har-schema": "^2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "hdb": { "version": "0.15.4", "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.15.4.tgz", @@ -1047,6 +1634,12 @@ "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ==" }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -1091,6 +1684,27 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", @@ -1122,6 +1736,18 @@ "builtin-modules": "^1.0.0" } }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", @@ -1131,17 +1757,44 @@ "number-is-nan": "^1.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "is-object": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", @@ -1152,6 +1805,15 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -1197,6 +1859,22 @@ "topo": "2.x.x" } }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -1212,6 +1890,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1276,6 +1960,16 @@ "package-json": "^4.0.0" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -1305,6 +1999,24 @@ "lie": "3.1.1" } }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -1521,6 +2233,12 @@ "mime-db": "~1.37.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1646,6 +2364,12 @@ } } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "mysql": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz", @@ -1668,6 +2392,12 @@ "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", "integrity": "sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A=" }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "nedb": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz", @@ -1694,6 +2424,12 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "nocache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", @@ -1819,6 +2555,38 @@ "is": "~0.2.6" } }, + "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" + }, + "dependencies": { + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true + } + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "odbc": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/odbc/-/odbc-1.4.5.tgz", @@ -1850,6 +2618,59 @@ "wrappy": "1" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", @@ -1943,6 +2764,18 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", @@ -2057,11 +2890,37 @@ "pinkie": "^2.0.0" } }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + } + } + }, "platform": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -2085,11 +2944,26 @@ "xtend": "^4.0.0" } }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "printj": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", @@ -2100,6 +2974,12 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -2220,6 +3100,21 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", @@ -2273,6 +3168,16 @@ "uuid": "^3.3.2" } }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, "resolve": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", @@ -2282,6 +3187,22 @@ "path-parse": "^1.0.6" } }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "retry": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", @@ -2295,6 +3216,24 @@ "glob": "^7.1.3" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2405,6 +3344,21 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", @@ -2417,6 +3371,15 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", @@ -2516,6 +3479,29 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.matchall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz", + "integrity": "sha512-WoZ+B2ypng1dp4iFLF2kmZlwwlE19gmjgKuhL1FJfDgCREWb3ye3SDVHSzLH6bxfnvYmkCxbzkmWcQZHA4P//Q==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "regexp.prototype.flags": "^1.2.0" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2524,6 +3510,23 @@ "safe-buffer": "~5.1.0" } }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -2619,6 +3622,26 @@ } } }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "dev": true, + "requires": { + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, "tedious": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.7.1.tgz", @@ -2635,6 +3658,12 @@ "sprintf-js": "^1.1.1" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "thenify": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", @@ -2653,6 +3682,15 @@ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "topo": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", @@ -2704,6 +3742,15 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -2826,11 +3873,26 @@ "isexe": "^2.0.0" } }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.1.tgz", diff --git a/server/package.json b/server/package.json index 15bc48003..30af8f623 100644 --- a/server/package.json +++ b/server/package.json @@ -29,7 +29,9 @@ "scripts": { "prepublishOnly": "../scripts/build.sh", "start": "node-dev server.js --dir ../db --port 3010 --debug --base-url '/sqlpad'", - "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_TEST='true' mocha test --timeout 10000 --recursive --exit" + "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_TEST='true' mocha test --timeout 10000 --recursive --exit", + "fixlint": "eslint --fix '**/*.js'", + "lint": "eslint '**/*.js'" }, "dependencies": { "bcrypt-nodejs": "0.0.3", @@ -81,6 +83,11 @@ "odbc": "^1.4.1" }, "devDependencies": { + "eslint": "^5.3.0", + "eslint-config-airbnb-base": "^13.1.0", + "eslint-config-prettier": "^4.1.0", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-prettier": "^3.0.1", "mocha": "^5.2.0", "node-dev": "^3.1.3", "supertest": "^3.4.2" From 5555bb626c70ed66872b7e42028317792701cbcc Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 14 Mar 2019 23:45:10 -0400 Subject: [PATCH 009/855] Bring semicolons back! (#415) --- client/src/AboutContent.js | 14 +- client/src/App.js | 48 +-- client/src/AppNav.js | 62 ++-- client/src/Authenticated.js | 30 +- client/src/ForgotPassword.js | 34 +- client/src/NotFound.js | 20 +- client/src/PasswordReset.js | 46 +-- client/src/PasswordResetRequested.js | 10 +- client/src/QueryChartOnly.js | 64 ++-- client/src/QueryTableOnly.js | 46 +-- client/src/SignIn.js | 62 ++-- client/src/SignUp.js | 52 +-- client/src/common/Button.js | 20 +- client/src/common/DocumentTitle.js | 12 +- client/src/common/EditableTagGroup.js | 65 ++-- client/src/common/ExportButton.js | 38 +- client/src/common/FullscreenMessage.js | 4 +- client/src/common/Header.js | 16 +- .../src/common/IncompleteDataNotification.js | 18 +- client/src/common/QueryResultDataTable.js | 156 ++++----- client/src/common/SecondsTimer.js | 24 +- client/src/common/Sidebar.js | 4 +- client/src/common/SidebarBody.js | 4 +- client/src/common/SpinKitCube.js | 6 +- client/src/common/SqlEditor.js | 68 ++-- client/src/common/SqlpadTauChart.js | 236 ++++++------- client/src/configuration/CheckListItem.js | 18 +- .../configuration/ConfigEnvDocumentation.js | 26 +- client/src/configuration/ConfigItemInput.js | 36 +- client/src/configuration/ConfigurationView.js | 83 ++--- .../src/connections/ConnectionEditDrawer.js | 12 +- client/src/connections/ConnectionForm.js | 130 +++---- .../src/connections/ConnectionListDrawer.js | 112 +++--- client/src/connections/ConnectionsStore.js | 66 ++-- client/src/containers/AppContext.js | 6 +- client/src/containers/AppContextProvider.js | 26 +- client/src/containers/withAppContext.js | 10 +- client/src/index.js | 20 +- client/src/queries/QueriesView.js | 188 +++++----- client/src/queryEditor/ChartInputs.js | 88 ++--- client/src/queryEditor/ConnectionDropdown.js | 14 +- client/src/queryEditor/EditorNavBar.js | 36 +- client/src/queryEditor/FlexTabPane.js | 16 +- client/src/queryEditor/QueryDetailsModal.js | 40 +-- client/src/queryEditor/QueryEditor.js | 328 +++++++++--------- .../src/queryEditor/QueryEditorContainer.js | 22 +- client/src/queryEditor/QueryResultHeader.js | 36 +- client/src/queryEditor/SchemaSidebar.js | 186 +++++----- client/src/queryEditor/VisSidebar.js | 32 +- client/src/users/InviteUserForm.js | 56 +-- client/src/users/UsersView.js | 156 ++++----- client/src/utilities/chartDefinitions.js | 4 +- client/src/utilities/fetch-json.js | 28 +- client/src/utilities/updateCompletions.js | 198 +++++------ package.json | 1 - server/app.js | 124 +++---- server/drivers/cassandra/index.js | 40 +-- server/drivers/cassandra/test.js | 78 ++--- server/drivers/crate/index.js | 44 +-- server/drivers/crate/test.js | 74 ++-- server/drivers/drill/drill.js | 62 ++-- server/drivers/drill/index.js | 54 +-- server/drivers/hdb/index.js | 80 ++--- server/drivers/hdb/test.js | 76 ++-- server/drivers/index.js | 157 ++++----- server/drivers/mock/index.js | 116 +++---- server/drivers/mock/test.js | 42 +-- server/drivers/mysql/index.js | 68 ++-- server/drivers/mysql/test.js | 74 ++-- server/drivers/postgres/index.js | 80 ++--- server/drivers/postgres/test.js | 34 +- server/drivers/presto/_presto.js | 36 +- server/drivers/presto/index.js | 50 +-- server/drivers/presto/test.js | 91 ++--- server/drivers/sqlserver/index.js | 66 ++-- server/drivers/sqlserver/test.js | 62 ++-- server/drivers/unixodbc/index.js | 56 +-- server/drivers/unixodbc/test.js | 64 ++-- server/drivers/utils.js | 40 +-- server/drivers/vertica/index.js | 78 ++--- server/drivers/vertica/test.js | 70 ++-- server/lib/check-whitelist.js | 10 +- server/lib/cipher.js | 12 +- server/lib/cli-flow.js | 40 +-- server/lib/config/configItems.js | 4 +- server/lib/config/fromCli.js | 16 +- server/lib/config/fromDb.js | 20 +- server/lib/config/fromDefault.js | 20 +- server/lib/config/fromEnv.js | 12 +- server/lib/config/index.js | 102 +++--- server/lib/db.js | 76 ++-- server/lib/decipher.js | 18 +- server/lib/email.js | 60 ++-- server/lib/getMeta.js | 54 +-- server/lib/migrate-schema.js | 78 ++--- server/lib/sendError.js | 6 +- server/lib/version.js | 42 +-- server/middleware/must-be-admin.js | 8 +- ...t-be-authenticated-or-chart-link-noauth.js | 12 +- server/middleware/must-be-authenticated.js | 12 +- server/middleware/passport.js | 84 ++--- server/models/Cache.js | 124 +++---- server/models/Query.js | 92 ++--- server/models/User.js | 74 ++-- server/models/connections.js | 46 +-- server/routes/app.js | 28 +- server/routes/config-items.js | 12 +- server/routes/config-values.js | 14 +- server/routes/connections.js | 46 +-- server/routes/download-results.js | 48 +-- server/routes/drivers.js | 16 +- server/routes/forgot-password.js | 34 +- server/routes/homepage.js | 22 +- server/routes/oauth.js | 12 +- server/routes/password-reset.js | 24 +- server/routes/queries.js | 70 ++-- server/routes/query-result.js | 74 ++-- server/routes/schema-info.js | 44 +-- server/routes/signup-signin-signout.js | 50 +-- server/routes/tags.js | 20 +- server/routes/test-connection.js | 16 +- server/routes/users.js | 56 +-- server/server.js | 62 ++-- server/test/api/app.js | 24 +- server/test/api/config-values.js | 38 +- server/test/api/connections.js | 84 ++--- server/test/api/drivers.js | 20 +- server/test/api/password-reset.js | 46 +-- server/test/api/queries.js | 78 ++--- server/test/api/query-result.js | 64 ++-- server/test/api/schema-info.js | 26 +- server/test/api/signup-signin.js | 40 +-- server/test/api/tags.js | 28 +- server/test/api/test-connection.js | 14 +- server/test/api/users.js | 68 ++-- server/test/drivers.js | 80 ++--- server/test/lib/config.js | 60 ++-- server/test/lib/email.js | 36 +- server/test/lib/getMeta.js | 50 +-- server/test/utils.js | 60 ++-- 140 files changed, 3723 insertions(+), 3712 deletions(-) diff --git a/client/src/AboutContent.js b/client/src/AboutContent.js index 8242083f9..1f1488966 100644 --- a/client/src/AboutContent.js +++ b/client/src/AboutContent.js @@ -1,9 +1,9 @@ -import PropTypes from 'prop-types' -import React from 'react' +import PropTypes from 'prop-types'; +import React from 'react'; class AboutContent extends React.Component { render() { - const { version } = this.props + const { version } = this.props; return (

@@ -67,16 +67,16 @@ class AboutContent extends React.Component {

- ) + ); } } AboutContent.propTypes = { version: PropTypes.string -} +}; AboutContent.defaultProps = { version: '' -} +}; -export default AboutContent +export default AboutContent; diff --git a/client/src/App.js b/client/src/App.js index 67ad93ee7..01e847500 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -1,33 +1,33 @@ -import message from 'antd/lib/message' -import React from 'react' +import message from 'antd/lib/message'; +import React from 'react'; import { BrowserRouter as Router, Redirect, Route, Switch -} from 'react-router-dom' -import Authenticated from './Authenticated' -import ConfigurationView from './configuration/ConfigurationView' -import ConnectionsStore from './connections/ConnectionsStore' -import AppContext from './containers/AppContext' -import ForgotPassword from './ForgotPassword.js' -import NotFound from './NotFound.js' -import PasswordReset from './PasswordReset.js' -import PasswordResetRequested from './PasswordResetRequested.js' -import QueriesView from './queries/QueriesView' -import QueryChartOnly from './QueryChartOnly.js' -import QueryEditorContainer from './queryEditor/QueryEditorContainer.js' -import QueryTableOnly from './QueryTableOnly.js' -import SignIn from './SignIn.js' -import SignUp from './SignUp.js' -import UsersView from './users/UsersView' +} from 'react-router-dom'; +import Authenticated from './Authenticated'; +import ConfigurationView from './configuration/ConfigurationView'; +import ConnectionsStore from './connections/ConnectionsStore'; +import AppContext from './containers/AppContext'; +import ForgotPassword from './ForgotPassword.js'; +import NotFound from './NotFound.js'; +import PasswordReset from './PasswordReset.js'; +import PasswordResetRequested from './PasswordResetRequested.js'; +import QueriesView from './queries/QueriesView'; +import QueryChartOnly from './QueryChartOnly.js'; +import QueryEditorContainer from './queryEditor/QueryEditorContainer.js'; +import QueryTableOnly from './QueryTableOnly.js'; +import SignIn from './SignIn.js'; +import SignUp from './SignUp.js'; +import UsersView from './users/UsersView'; // Configure message notification globally message.config({ top: 60, duration: 2, maxCount: 3 -}) +}); class App extends React.Component { renderRoutes(config) { @@ -109,7 +109,7 @@ class App extends React.Component { - ) + ); } render() { @@ -121,13 +121,13 @@ class App extends React.Component { {this.renderRoutes(appContext.config)} - ) + ); } - return null + return null; }} - ) + ); } } -export default App +export default App; diff --git a/client/src/AppNav.js b/client/src/AppNav.js index 4a967490a..328a6b581 100644 --- a/client/src/AppNav.js +++ b/client/src/AppNav.js @@ -1,44 +1,44 @@ -import Icon from 'antd/lib/icon' -import Layout from 'antd/lib/layout' -import Menu from 'antd/lib/menu' -import Modal from 'antd/lib/modal' -import PropTypes from 'prop-types' -import React from 'react' -import { Redirect, Route } from 'react-router-dom' -import AboutContent from './AboutContent' -import AppContext from './containers/AppContext' -import fetchJson from './utilities/fetch-json.js' +import Icon from 'antd/lib/icon'; +import Layout from 'antd/lib/layout'; +import Menu from 'antd/lib/menu'; +import Modal from 'antd/lib/modal'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { Redirect, Route } from 'react-router-dom'; +import AboutContent from './AboutContent'; +import AppContext from './containers/AppContext'; +import fetchJson from './utilities/fetch-json.js'; -const { Content, Sider } = Layout +const { Content, Sider } = Layout; class AppNav extends React.Component { state = { collapsed: true, redirect: false - } + }; onCollapse = collapsed => { - this.setState({ collapsed }) - } + this.setState({ collapsed }); + }; signout = () => { fetchJson('GET', '/api/signout').then(json => { - this.setState({ redirect: true }) - }) - } + this.setState({ redirect: true }); + }); + }; render() { - const { redirect } = this.state - const { pageMenuItems } = this.props + const { redirect } = this.state; + const { pageMenuItems } = this.props; if (redirect) { - return + return ; } return ( {appContext => { - const { currentUser, version } = appContext + const { currentUser, version } = appContext; return ( @@ -62,7 +62,7 @@ class AppNav extends React.Component { { - history.push('/queries') + history.push('/queries'); }} > @@ -71,7 +71,7 @@ class AppNav extends React.Component { { - history.push('/queries/new') + history.push('/queries/new'); }} > @@ -88,7 +88,7 @@ class AppNav extends React.Component { { - history.push('/users') + history.push('/users'); }} > @@ -99,7 +99,7 @@ class AppNav extends React.Component { { - history.push('/config-values') + history.push('/config-values'); }} > @@ -124,7 +124,7 @@ class AppNav extends React.Component { ), onOk() {} - }) + }); }} > @@ -144,7 +144,7 @@ class AppNav extends React.Component { /> ), onOk() {} - }) + }); }} > @@ -163,15 +163,15 @@ class AppNav extends React.Component { {this.props.children} - ) + ); }} - ) + ); } } AppNav.propTypes = { pageMenuItems: PropTypes.arrayOf(PropTypes.node) -} +}; -export default AppNav +export default AppNav; diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index 54118393a..ed1675dab 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -1,35 +1,35 @@ -import PropTypes from 'prop-types' -import React from 'react' -import { Redirect } from 'react-router-dom' -import AppContext from './containers/AppContext' +import PropTypes from 'prop-types'; +import React from 'react'; +import { Redirect } from 'react-router-dom'; +import AppContext from './containers/AppContext'; class Authenticated extends React.Component { - static contextType = AppContext + static contextType = AppContext; componentDidMount() { - const appContext = this.context - appContext.refreshAppContext() + const appContext = this.context; + appContext.refreshAppContext(); } render() { - const appContext = this.context - const { admin, children } = this.props - const { currentUser } = appContext + const appContext = this.context; + const { admin, children } = this.props; + const { currentUser } = appContext; if (!currentUser) { - return + return ; } if (admin && currentUser.role !== 'admin') { - return + return ; } - return children + return children; } } Authenticated.propTypes = { admin: PropTypes.bool -} +}; -export default Authenticated +export default Authenticated; diff --git a/client/src/ForgotPassword.js b/client/src/ForgotPassword.js index fda369f72..ac06e2492 100644 --- a/client/src/ForgotPassword.js +++ b/client/src/ForgotPassword.js @@ -1,34 +1,34 @@ -import React from 'react' -import { Redirect } from 'react-router-dom' -import fetchJson from './utilities/fetch-json.js' -import message from 'antd/lib/message' +import React from 'react'; +import { Redirect } from 'react-router-dom'; +import fetchJson from './utilities/fetch-json.js'; +import message from 'antd/lib/message'; class ForgotPassword extends React.Component { state = { email: '', redirect: false - } + }; componentDidMount() { - document.title = 'SQLPad - Forgot Password' + document.title = 'SQLPad - Forgot Password'; } onEmailChange = e => { - this.setState({ email: e.target.value }) - } + this.setState({ email: e.target.value }); + }; resetPassword = e => { - e.preventDefault() + e.preventDefault(); fetchJson('POST', '/api/forgot-password', this.state).then(json => { - if (json.error) return message.error(json.error) - this.setState({ redirect: true }) - }) - } + if (json.error) return message.error(json.error); + this.setState({ redirect: true }); + }); + }; render() { - const { redirect } = this.state + const { redirect } = this.state; if (redirect) { - return + return ; } return (
@@ -47,8 +47,8 @@ class ForgotPassword extends React.Component {
- ) + ); } } -export default ForgotPassword +export default ForgotPassword; diff --git a/client/src/NotFound.js b/client/src/NotFound.js index c7df270a8..1d9a4b9af 100644 --- a/client/src/NotFound.js +++ b/client/src/NotFound.js @@ -1,24 +1,24 @@ -import React from 'react' -import AppNav from './AppNav.js' -import FullscreenMessage from './common/FullscreenMessage.js' -import AppContext from './containers/AppContext' +import React from 'react'; +import AppNav from './AppNav.js'; +import FullscreenMessage from './common/FullscreenMessage.js'; +import AppContext from './containers/AppContext'; export default () => { return ( {appContext => { - document.title = 'SQLPad - Not Found' - const { currentUser } = appContext + document.title = 'SQLPad - Not Found'; + const { currentUser } = appContext; if (currentUser) { return ( Not Found - ) + ); } - return Not Found + return Not Found; }} - ) -} + ); +}; diff --git a/client/src/PasswordReset.js b/client/src/PasswordReset.js index 5645a84b1..2f9f6cf79 100644 --- a/client/src/PasswordReset.js +++ b/client/src/PasswordReset.js @@ -1,9 +1,9 @@ -import Button from 'antd/lib/button' -import Input from 'antd/lib/input' -import message from 'antd/lib/message' -import React from 'react' -import { Redirect } from 'react-router-dom' -import fetchJson from './utilities/fetch-json.js' +import Button from 'antd/lib/button'; +import Input from 'antd/lib/input'; +import message from 'antd/lib/message'; +import React from 'react'; +import { Redirect } from 'react-router-dom'; +import fetchJson from './utilities/fetch-json.js'; class PasswordReset extends React.Component { state = { @@ -11,42 +11,42 @@ class PasswordReset extends React.Component { password: '', passwordConfirmation: '', redirect: false - } + }; onEmailChange = e => { - this.setState({ email: e.target.value }) - } + this.setState({ email: e.target.value }); + }; onPasswordChange = e => { - this.setState({ password: e.target.value }) - } + this.setState({ password: e.target.value }); + }; onPasswordConfirmationChange = e => { - this.setState({ passwordConfirmation: e.target.value }) - } + this.setState({ passwordConfirmation: e.target.value }); + }; resetPassword = e => { - e.preventDefault() + e.preventDefault(); fetchJson( 'POST', '/api/password-reset/' + this.props.passwordResetId, this.state ).then(json => { if (json.error) { - return message.error(json.error) + return message.error(json.error); } - this.setState({ redirect: true }) - }) - } + this.setState({ redirect: true }); + }); + }; componentDidMount() { - document.title = 'SQLPad - Password Reset' + document.title = 'SQLPad - Password Reset'; } render() { - const { redirect } = this.state + const { redirect } = this.state; if (redirect) { - return + return ; } return (
@@ -81,8 +81,8 @@ class PasswordReset extends React.Component {
- ) + ); } } -export default PasswordReset +export default PasswordReset; diff --git a/client/src/PasswordResetRequested.js b/client/src/PasswordResetRequested.js index c499a36f7..a0588abaf 100644 --- a/client/src/PasswordResetRequested.js +++ b/client/src/PasswordResetRequested.js @@ -1,12 +1,12 @@ -import React from 'react' -import FullscreenMessage from './common/FullscreenMessage.js' +import React from 'react'; +import FullscreenMessage from './common/FullscreenMessage.js'; export default props => { - document.title = 'SQLPad - Password Reset' + document.title = 'SQLPad - Password Reset'; return (

Password reset requested.

An email has been sent with further instruction.

- ) -} + ); +}; diff --git a/client/src/QueryChartOnly.js b/client/src/QueryChartOnly.js index f6c7420d9..86c45c40a 100644 --- a/client/src/QueryChartOnly.js +++ b/client/src/QueryChartOnly.js @@ -1,68 +1,68 @@ -import PropTypes from 'prop-types' -import React from 'react' -import ExportButton from './common/ExportButton.js' -import IncompleteDataNotification from './common/IncompleteDataNotification' -import SqlpadTauChart from './common/SqlpadTauChart.js' -import fetchJson from './utilities/fetch-json.js' +import PropTypes from 'prop-types'; +import React from 'react'; +import ExportButton from './common/ExportButton.js'; +import IncompleteDataNotification from './common/IncompleteDataNotification'; +import SqlpadTauChart from './common/SqlpadTauChart.js'; +import fetchJson from './utilities/fetch-json.js'; class QueryChartOnly extends React.Component { state = { isRunning: false, runQueryStartTime: undefined, queryResult: undefined - } + }; runQuery = queryId => { this.setState({ isRunning: true, runQueryStartTime: new Date() - }) + }); fetchJson('GET', '/api/queries/' + queryId) .then(json => { - if (json.error) console.error(json.error) + if (json.error) console.error(json.error); this.setState({ query: json.query - }) + }); }) .then(() => { - return fetchJson('GET', '/api/query-result/' + queryId) + return fetchJson('GET', '/api/query-result/' + queryId); }) .then(json => { - if (json.error) console.error(json.error) + if (json.error) console.error(json.error); this.setState({ isRunning: false, queryError: json.error, queryResult: json.queryResult - }) - }) - } + }); + }); + }; componentDidMount() { - document.title = 'SQLPad' - this.runQuery(this.props.queryId) + document.title = 'SQLPad'; + this.runQuery(this.props.queryId); } onSaveImageClick = e => { if (this.sqlpadTauChart && this.sqlpadTauChart.chart) { - this.sqlpadTauChart.chart.fire('exportTo', 'png') + this.sqlpadTauChart.chart.fire('exportTo', 'png'); } - } + }; hasRows = () => { - var queryResult = this.state.queryResult - return !!(queryResult && queryResult.rows && queryResult.rows.length) - } + var queryResult = this.state.queryResult; + return !!(queryResult && queryResult.rows && queryResult.rows.length); + }; isChartable = () => { - var pending = this.state.isRunning || this.state.queryError - return !pending && this.hasRows() - } + var pending = this.state.isRunning || this.state.queryError; + return !pending && this.hasRows(); + }; render() { - const { query, queryResult, queryError, isRunning } = this.state + const { query, queryResult, queryError, isRunning } = this.state; - const incomplete = queryResult ? queryResult.incomplete : false - const cacheKey = queryResult ? queryResult.cacheKey : null + const incomplete = queryResult ? queryResult.incomplete : false; + const cacheKey = queryResult ? queryResult.cacheKey : null; return (
{ - this.sqlpadTauChart = ref + this.sqlpadTauChart = ref; }} />
- ) + ); } } QueryChartOnly.propTypes = { queryId: PropTypes.string.isRequired -} +}; -export default QueryChartOnly +export default QueryChartOnly; diff --git a/client/src/QueryTableOnly.js b/client/src/QueryTableOnly.js index 15d5ec090..707d376b9 100644 --- a/client/src/QueryTableOnly.js +++ b/client/src/QueryTableOnly.js @@ -1,45 +1,45 @@ -import PropTypes from 'prop-types' -import React from 'react' -import ExportButton from './common/ExportButton.js' -import IncompleteDataNotification from './common/IncompleteDataNotification' -import QueryResultDataTable from './common/QueryResultDataTable.js' -import fetchJson from './utilities/fetch-json.js' +import PropTypes from 'prop-types'; +import React from 'react'; +import ExportButton from './common/ExportButton.js'; +import IncompleteDataNotification from './common/IncompleteDataNotification'; +import QueryResultDataTable from './common/QueryResultDataTable.js'; +import fetchJson from './utilities/fetch-json.js'; class QueryTableOnly extends React.Component { state = { isRunning: false, runQueryStartTime: undefined, queryResult: undefined - } + }; runQuery = queryId => { this.setState({ isRunning: true, runQueryStartTime: new Date() - }) + }); fetchJson('GET', '/api/queries/' + queryId) .then(json => { - if (json.error) console.error(json.error) + if (json.error) console.error(json.error); this.setState({ query: json.query - }) + }); }) .then(() => { - return fetchJson('GET', '/api/query-result/' + queryId) + return fetchJson('GET', '/api/query-result/' + queryId); }) .then(json => { - if (json.error) console.error(json.error) + if (json.error) console.error(json.error); this.setState({ isRunning: false, queryError: json.error, queryResult: json.queryResult - }) - }) - } + }); + }); + }; componentDidMount() { - document.title = 'SQLPad' - this.runQuery(this.props.queryId) + document.title = 'SQLPad'; + this.runQuery(this.props.queryId); } render() { @@ -50,10 +50,10 @@ class QueryTableOnly extends React.Component { queryResult, querySuccess, runQueryStartTime - } = this.state + } = this.state; - const incomplete = queryResult ? queryResult.incomplete : false - const cacheKey = queryResult ? queryResult.cacheKey : null + const incomplete = queryResult ? queryResult.incomplete : false; + const cacheKey = queryResult ? queryResult.cacheKey : null; return (
- ) + ); } } QueryTableOnly.propTypes = { queryId: PropTypes.string.isRequired -} +}; -export default QueryTableOnly +export default QueryTableOnly; diff --git a/client/src/SignIn.js b/client/src/SignIn.js index d5bb76d03..d9680abfe 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -1,55 +1,55 @@ -import Button from 'antd/lib/button' -import Icon from 'antd/lib/icon' -import Input from 'antd/lib/input' -import message from 'antd/lib/message' -import React from 'react' -import { Link, Redirect } from 'react-router-dom' -import AppContext from './containers/AppContext' -import fetchJson from './utilities/fetch-json.js' +import Button from 'antd/lib/button'; +import Icon from 'antd/lib/icon'; +import Input from 'antd/lib/input'; +import message from 'antd/lib/message'; +import React from 'react'; +import { Link, Redirect } from 'react-router-dom'; +import AppContext from './containers/AppContext'; +import fetchJson from './utilities/fetch-json.js'; class SignIn extends React.Component { - static contextType = AppContext + static contextType = AppContext; state = { email: '', password: '', redirect: false - } + }; componentDidMount() { - document.title = 'SQLPad - Sign In' + document.title = 'SQLPad - Sign In'; } onEmailChange = e => { - this.setState({ email: e.target.value }) - } + this.setState({ email: e.target.value }); + }; onPasswordChange = e => { - this.setState({ password: e.target.value }) - } + this.setState({ password: e.target.value }); + }; signIn = async e => { - const appContext = this.context - e.preventDefault() + const appContext = this.context; + e.preventDefault(); - const json = await fetchJson('POST', '/api/signin', this.state) + const json = await fetchJson('POST', '/api/signin', this.state); if (json.error) { - return message.error('Username or password incorrect') + return message.error('Username or password incorrect'); } - await appContext.refreshAppContext() - this.setState({ redirect: true }) - } + await appContext.refreshAppContext(); + this.setState({ redirect: true }); + }; render() { - const appContext = this.context - const { redirect } = this.state + const appContext = this.context; + const { redirect } = this.state; if (redirect) { - return + return ; } - const { config, smtpConfigured, passport } = appContext + const { config, smtpConfigured, passport } = appContext; if (!config) { - return + return; } const localForm = ( @@ -89,7 +89,7 @@ class SignIn extends React.Component { ) : null} - ) + ); const googleForm = (
@@ -100,7 +100,7 @@ class SignIn extends React.Component {
- ) + ); return (
@@ -108,8 +108,8 @@ class SignIn extends React.Component { {'local' in passport.strategies && localForm} {'google' in passport.strategies && googleForm}
- ) + ); } } -export default SignIn +export default SignIn; diff --git a/client/src/SignUp.js b/client/src/SignUp.js index 278f2de2e..e67e12fc1 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -1,10 +1,10 @@ -import Button from 'antd/lib/button' -import Input from 'antd/lib/input' -import message from 'antd/lib/message' -import React from 'react' -import { Redirect } from 'react-router-dom' -import AppContext from './containers/AppContext' -import fetchJson from './utilities/fetch-json.js' +import Button from 'antd/lib/button'; +import Input from 'antd/lib/input'; +import message from 'antd/lib/message'; +import React from 'react'; +import { Redirect } from 'react-router-dom'; +import AppContext from './containers/AppContext'; +import fetchJson from './utilities/fetch-json.js'; class SignUp extends React.Component { state = { @@ -12,43 +12,43 @@ class SignUp extends React.Component { password: '', passwordConfirmation: '', redirect: false - } + }; componentDidMount() { - document.title = 'SQLPad - Sign Up' + document.title = 'SQLPad - Sign Up'; } onEmailChange = e => { - this.setState({ email: e.target.value }) - } + this.setState({ email: e.target.value }); + }; onPasswordChange = e => { - this.setState({ password: e.target.value }) - } + this.setState({ password: e.target.value }); + }; onPasswordConfirmationChange = e => { - this.setState({ passwordConfirmation: e.target.value }) - } + this.setState({ passwordConfirmation: e.target.value }); + }; signUp = e => { - e.preventDefault() + e.preventDefault(); fetchJson('POST', '/api/signup', this.state).then(json => { - if (json.error) return message.error(json.error) - this.setState({ redirect: true }) - }) - } + if (json.error) return message.error(json.error); + this.setState({ redirect: true }); + }); + }; render() { - const { redirect } = this.state + const { redirect } = this.state; if (redirect) { - return + return ; } return ( {appContext => { - const { adminRegistrationOpen } = appContext + const { adminRegistrationOpen } = appContext; return (
@@ -94,11 +94,11 @@ class SignUp extends React.Component {
- ) + ); }}
- ) + ); } } -export default SignUp +export default SignUp; diff --git a/client/src/common/Button.js b/client/src/common/Button.js index 032c7c52d..fb1ab7b41 100644 --- a/client/src/common/Button.js +++ b/client/src/common/Button.js @@ -1,29 +1,29 @@ -import React from 'react' -import PropTypes from 'prop-types' +import React from 'react'; +import PropTypes from 'prop-types'; class Button extends React.Component { render() { - const { children, className, onClick, primary } = this.props - let classNames = '' + const { children, className, onClick, primary } = this.props; + let classNames = ''; if (primary) { classNames = ` pa4 tc pv3 bg-animate bg-blue hover-bg-dark-blue white ${className} - ` + `; } else { classNames = ` pa4 tc pv3 dim ba b--dark-gray black ${className} - ` + `; } return ( - ) + ); } } @@ -31,11 +31,11 @@ Button.propTypes = { className: PropTypes.string, onClick: PropTypes.func, primary: PropTypes.bool -} +}; Button.defaultProps = { className: '', onClick: () => {} -} +}; -export default Button +export default Button; diff --git a/client/src/common/DocumentTitle.js b/client/src/common/DocumentTitle.js index d96a04e5a..e0a1f2f8f 100644 --- a/client/src/common/DocumentTitle.js +++ b/client/src/common/DocumentTitle.js @@ -1,18 +1,18 @@ -import React from 'react' -import PropTypes from 'prop-types' +import React from 'react'; +import PropTypes from 'prop-types'; class DocumentTitle extends React.Component { componentDidMount() { - document.title = this.props.children + document.title = this.props.children; } render() { - return null + return null; } } DocumentTitle.propTypes = { children: PropTypes.string.isRequired -} +}; -export default DocumentTitle +export default DocumentTitle; diff --git a/client/src/common/EditableTagGroup.js b/client/src/common/EditableTagGroup.js index 9a285c3d8..60293baa7 100644 --- a/client/src/common/EditableTagGroup.js +++ b/client/src/common/EditableTagGroup.js @@ -1,43 +1,43 @@ -import AutoComplete from 'antd/lib/auto-complete' -import Icon from 'antd/lib/icon' -import Tag from 'antd/lib/tag' -import PropTypes from 'prop-types' -import React from 'react' +import AutoComplete from 'antd/lib/auto-complete'; +import Icon from 'antd/lib/icon'; +import Tag from 'antd/lib/tag'; +import PropTypes from 'prop-types'; +import React from 'react'; class EditableTagGroup extends React.Component { state = { inputVisible: false, inputValue: '' - } + }; handleClose = removedTag => { - const { onChange, tags } = this.props - const newTags = tags.filter(tag => tag !== removedTag) - onChange(newTags) - } + const { onChange, tags } = this.props; + const newTags = tags.filter(tag => tag !== removedTag); + onChange(newTags); + }; showInput = () => { this.setState({ inputValue: '', inputVisible: true }, () => this.input.focus() - ) - } + ); + }; handleInputChange = value => { - this.setState({ inputValue: value }) - } + this.setState({ inputValue: value }); + }; handleInputBlur = () => { this.setState({ inputValue: '', inputVisible: false - }) - } + }); + }; handleInputSelect = value => { - let { tags, onChange } = this.props + let { tags, onChange } = this.props; if (value && tags.indexOf(value) === -1) { - tags = [...tags, value] + tags = [...tags, value]; } this.setState( @@ -46,23 +46,24 @@ class EditableTagGroup extends React.Component { inputVisible: false }, () => { - onChange(tags) + onChange(tags); } - ) - } + ); + }; - saveInputRef = input => (this.input = input) + saveInputRef = input => (this.input = input); filterOption = (inputValue, option) => - option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1 + option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== + -1; render() { - const { tags, tagOptions } = this.props - const { inputVisible, inputValue } = this.state + const { tags, tagOptions } = this.props; + const { inputVisible, inputValue } = this.state; - const dataSource = tagOptions.slice() + const dataSource = tagOptions.slice(); if (inputValue && dataSource.indexOf(inputValue) === -1) { - dataSource.unshift(inputValue) + dataSource.unshift(inputValue); } return ( @@ -76,7 +77,7 @@ class EditableTagGroup extends React.Component { > {tag} - ) + ); })} {inputVisible && ( )} - ) + ); } } @@ -109,12 +110,12 @@ EditableTagGroup.propTypes = { onChange: PropTypes.func, tagOptions: PropTypes.array, tags: PropTypes.array -} +}; EditableTagGroup.defaultProps = { onChange: () => {}, tagOptions: [], tags: [] -} +}; -export default EditableTagGroup +export default EditableTagGroup; diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index 69f6a48a8..c1f16a02f 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -1,35 +1,35 @@ -import Button from 'antd/lib/button' -import Dropdown from 'antd/lib/dropdown' -import Icon from 'antd/lib/icon' -import Menu from 'antd/lib/menu' -import PropTypes from 'prop-types' -import React from 'react' -import AppContext from '../containers/AppContext' +import Button from 'antd/lib/button'; +import Dropdown from 'antd/lib/dropdown'; +import Icon from 'antd/lib/icon'; +import Menu from 'antd/lib/menu'; +import PropTypes from 'prop-types'; +import React from 'react'; +import AppContext from '../containers/AppContext'; class ExportButton extends React.Component { render() { - const { cacheKey, onSaveImageClick } = this.props + const { cacheKey, onSaveImageClick } = this.props; if (!cacheKey) { - return null + return null; } return ( {appContext => { - const { config } = appContext + const { config } = appContext; if (!config) { - return + return; } - const { baseUrl, allowCsvDownload } = config + const { baseUrl, allowCsvDownload } = config; if (!cacheKey || !allowCsvDownload) { - return + return; } - const csvDownloadLink = `${baseUrl}/download-results/${cacheKey}.csv` - const xlsxDownloadLink = `${baseUrl}/download-results/${cacheKey}.xlsx` + const csvDownloadLink = `${baseUrl}/download-results/${cacheKey}.csv`; + const xlsxDownloadLink = `${baseUrl}/download-results/${cacheKey}.xlsx`; return ( - ) + ); }} - ) + ); } } ExportButton.propTypes = { cacheKey: PropTypes.string, onSaveImageClick: PropTypes.func -} +}; -export default ExportButton +export default ExportButton; diff --git a/client/src/common/FullscreenMessage.js b/client/src/common/FullscreenMessage.js index f5112aa0e..8767ec517 100644 --- a/client/src/common/FullscreenMessage.js +++ b/client/src/common/FullscreenMessage.js @@ -1,7 +1,7 @@ -import React from 'react' +import React from 'react'; export default props => (
{props.children}
-) +); diff --git a/client/src/common/Header.js b/client/src/common/Header.js index 4dbf1c243..374ecd2e1 100644 --- a/client/src/common/Header.js +++ b/client/src/common/Header.js @@ -1,26 +1,26 @@ -import Layout from 'antd/lib/layout' -import PropTypes from 'prop-types' -import React from 'react' +import Layout from 'antd/lib/layout'; +import PropTypes from 'prop-types'; +import React from 'react'; class Header extends React.Component { render() { - const { children, title } = this.props + const { children, title } = this.props; return (
{title}
{children}
- ) + ); } } Header.propTypes = { title: PropTypes.string -} +}; Header.defaultProps = { title: '' -} +}; -export default Header +export default Header; diff --git a/client/src/common/IncompleteDataNotification.js b/client/src/common/IncompleteDataNotification.js index ecd1b3baa..e59e37b88 100644 --- a/client/src/common/IncompleteDataNotification.js +++ b/client/src/common/IncompleteDataNotification.js @@ -1,11 +1,11 @@ -import Icon from 'antd/lib/icon' -import Tooltip from 'antd/lib/tooltip' -import PropTypes from 'prop-types' -import React from 'react' +import Icon from 'antd/lib/icon'; +import Tooltip from 'antd/lib/tooltip'; +import PropTypes from 'prop-types'; +import React from 'react'; class IncompleteDataNotification extends React.Component { render() { - const { incomplete } = this.props + const { incomplete } = this.props; if (incomplete === true) { return ( - ) + ); } - return null + return null; } } IncompleteDataNotification.propTypes = { incomplete: PropTypes.bool -} +}; -export default IncompleteDataNotification +export default IncompleteDataNotification; diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index 9c6349604..764f950ef 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -1,34 +1,34 @@ -import React from 'react' -import { MultiGrid } from 'react-virtualized' -import Draggable from 'react-draggable' -import Measure from 'react-measure' -import SpinKitCube from './SpinKitCube.js' -import moment from 'moment' -import 'react-virtualized/styles.css' +import React from 'react'; +import { MultiGrid } from 'react-virtualized'; +import Draggable from 'react-draggable'; +import Measure from 'react-measure'; +import SpinKitCube from './SpinKitCube.js'; +import moment from 'moment'; +import 'react-virtualized/styles.css'; const renderValue = (input, fieldMeta) => { if (input === null || input === undefined) { - return null + return null; } else if (input === true || input === false) { - return input.toString() + return input.toString(); } else if (fieldMeta.datatype === 'date') { - return moment.utc(input).format('MM/DD/YYYY HH:mm:ss') + return moment.utc(input).format('MM/DD/YYYY HH:mm:ss'); } else if (typeof input === 'object') { - return JSON.stringify(input, null, 2) + return JSON.stringify(input, null, 2); } else { - return input + return input; } -} +}; const renderNumberBar = (value, fieldMeta) => { if (fieldMeta.datatype === 'number') { - const valueNumber = Number(value) - const range = fieldMeta.max - (fieldMeta.min < 0 ? fieldMeta.min : 0) - let left = 0 + const valueNumber = Number(value); + const range = fieldMeta.max - (fieldMeta.min < 0 ? fieldMeta.min : 0); + let left = 0; if (fieldMeta.min < 0 && valueNumber < 0) { - left = (Math.abs(fieldMeta.min - valueNumber) / range) * 100 + '%' + left = (Math.abs(fieldMeta.min - valueNumber) / range) * 100 + '%'; } else if (fieldMeta.min < 0 && valueNumber >= 0) { - left = (Math.abs(fieldMeta.min) / range) * 100 + '%' + left = (Math.abs(fieldMeta.min) / range) * 100 + '%'; } const barStyle = { position: 'absolute', @@ -37,10 +37,10 @@ const renderNumberBar = (value, fieldMeta) => { height: '2px', width: (Math.abs(valueNumber) / range) * 100 + '%', backgroundColor: '#555' - } - return
+ }; + return
; } -} +}; // NOTE: PureComponent's shallow compare works for this component // because the isRunning prop will toggle with each query execution @@ -52,38 +52,38 @@ class QueryResultDataTable extends React.PureComponent { height: -1 }, columnWidths: {} - } + }; static getDerivedStateFromProps(nextProps, prevState) { - const { queryResult } = nextProps - const { columnWidths } = prevState + const { queryResult } = nextProps; + const { columnWidths } = prevState; if (queryResult && queryResult.fields) { queryResult.fields.forEach(field => { if (!columnWidths[field]) { - const fieldMeta = queryResult.meta[field] - let valueLength = fieldMeta.maxValueLength + const fieldMeta = queryResult.meta[field]; + let valueLength = fieldMeta.maxValueLength; if (field.length > valueLength) { - valueLength = field.length + valueLength = field.length; } - let columnWidthGuess = valueLength * 20 + let columnWidthGuess = valueLength * 20; if (columnWidthGuess < 100) { - columnWidthGuess = 100 + columnWidthGuess = 100; } else if (columnWidthGuess > 350) { - columnWidthGuess = 350 + columnWidthGuess = 350; } - columnWidths[field] = columnWidthGuess + columnWidths[field] = columnWidthGuess; } - }) + }); } - return { columnWidths } + return { columnWidths }; } headerCellRenderer = ({ columnIndex, key, style }) => { - const { queryResult } = this.props - const dataKey = queryResult.fields[columnIndex] + const { queryResult } = this.props; + const dataKey = queryResult.fields[columnIndex]; // If dataKey is present this is an actual header to render if (dataKey) { @@ -112,7 +112,7 @@ class QueryResultDataTable extends React.PureComponent { â‹®
- ) + ); } // If this is a dummy header cell render an empty header cell @@ -122,20 +122,20 @@ class QueryResultDataTable extends React.PureComponent { key={key} style={Object.assign({}, style, { lineHeight: '30px' })} /> - ) - } + ); + }; dataCellRenderer = ({ columnIndex, key, rowIndex, style }) => { - const { queryResult } = this.props - const dataKey = queryResult.fields[columnIndex] - const backgroundColor = rowIndex % 2 === 0 ? 'bg-near-white' : '' + const { queryResult } = this.props; + const dataKey = queryResult.fields[columnIndex]; + const backgroundColor = rowIndex % 2 === 0 ? 'bg-near-white' : ''; // If dataKey is present this is a real data cell to render if (dataKey) { - const fieldMeta = queryResult.meta[dataKey] + const fieldMeta = queryResult.meta[dataKey]; // Account for extra row that was used for header row - const value = queryResult.rows[rowIndex - 1][dataKey] + const value = queryResult.rows[rowIndex - 1][dataKey]; return (
{renderValue(value, fieldMeta)}
- ) + ); } // If no dataKey this is a dummy cell. @@ -159,53 +159,53 @@ class QueryResultDataTable extends React.PureComponent { >
- ) - } + ); + }; cellRenderer = params => { if (params.rowIndex === 0) { - return this.headerCellRenderer(params) + return this.headerCellRenderer(params); } - return this.dataCellRenderer(params) - } + return this.dataCellRenderer(params); + }; resizeColumn = ({ dataKey, deltaX }) => { this.setState(prevState => { - const prevWidths = prevState.columnWidths - const newWidth = prevWidths[dataKey] + deltaX + const prevWidths = prevState.columnWidths; + const newWidth = prevWidths[dataKey] + deltaX; return { columnWidths: { ...prevWidths, [dataKey]: newWidth > 100 ? newWidth : 100 } - } - }) + }; + }); if (this.ref) { - this.ref.recomputeGridSize() + this.ref.recomputeGridSize(); } - } + }; // NOTE // An empty dummy column is added to the grid for visual purposes // If dataKey was found this is a real column of data from the query result // If not, it's the dummy column at the end, and it should fill the rest of the grid width getColumnWidth = ({ index }) => { - const { columnWidths } = this.state - const { queryResult } = this.props - const dataKey = queryResult.fields[index] - const { width } = this.state.dimensions + const { columnWidths } = this.state; + const { queryResult } = this.props; + const dataKey = queryResult.fields[index]; + const { width } = this.state.dimensions; if (dataKey) { - return columnWidths[dataKey] + return columnWidths[dataKey]; } const totalWidthFilled = queryResult.fields .map(key => columnWidths[key]) - .reduce((prev, curr) => prev + curr, 0) + .reduce((prev, curr) => prev + curr, 0); - const fakeColumnWidth = width - totalWidthFilled - return fakeColumnWidth < 10 ? 10 : fakeColumnWidth - } + const fakeColumnWidth = width - totalWidthFilled; + return fakeColumnWidth < 10 ? 10 : fakeColumnWidth; + }; handleScrollBug = () => { // There's a strange bug when using Chrome. @@ -214,16 +214,16 @@ class QueryResultDataTable extends React.PureComponent { // The frozen input behavior goes away if another element is given focus, // and then the user clicks on the Ace editor again. // Fortunately clearing focus on the focused element and refocusing it fixes this bug. - const element = document.activeElement + const element = document.activeElement; if (element) { - element.blur() - element.focus() + element.blur(); + element.focus(); } - } + }; render() { - const { isRunning, queryError, queryResult } = this.props - const { height, width } = this.state.dimensions + const { isRunning, queryError, queryResult } = this.props; + const { height, width } = this.state.dimensions; if (isRunning) { return ( @@ -233,7 +233,7 @@ class QueryResultDataTable extends React.PureComponent { > - ) + ); } if (queryError) { @@ -244,20 +244,20 @@ class QueryResultDataTable extends React.PureComponent { > {queryError} - ) + ); } if (queryResult && queryResult.rows) { // Add extra row to account for header row - const rowCount = queryResult.rows.length + 1 + const rowCount = queryResult.rows.length + 1; // Add extra column to fill remaining grid width if necessary - const columnCount = queryResult.fields.length + 1 + const columnCount = queryResult.fields.length + 1; return ( { - this.setState({ dimensions: contentRect.bounds }) + this.setState({ dimensions: contentRect.bounds }); }} > {({ measureRef }) => ( @@ -281,11 +281,11 @@ class QueryResultDataTable extends React.PureComponent { )} - ) + ); } - return
+ return
; } } -export default QueryResultDataTable +export default QueryResultDataTable; diff --git a/client/src/common/SecondsTimer.js b/client/src/common/SecondsTimer.js index 82c67179c..3916ee32f 100644 --- a/client/src/common/SecondsTimer.js +++ b/client/src/common/SecondsTimer.js @@ -1,34 +1,34 @@ -import React from 'react' +import React from 'react'; class SecondsTimer extends React.Component { state = { runSeconds: 0 - } + }; - _mounted = false + _mounted = false; timer = () => { if (this._mounted) { - var now = new Date() + var now = new Date(); this.setState({ runSeconds: ((now - this.props.startTime) / 1000).toFixed(0) - }) - setTimeout(this.timer, 33) + }); + setTimeout(this.timer, 33); } - } + }; componentDidMount() { - this._mounted = true - this.timer() + this._mounted = true; + this.timer(); } componentWillUnmount() { - this._mounted = false + this._mounted = false; } render() { - return {this.state.runSeconds} + return {this.state.runSeconds}; } } -export default SecondsTimer +export default SecondsTimer; diff --git a/client/src/common/Sidebar.js b/client/src/common/Sidebar.js index 09f1fbeb7..c0312a775 100644 --- a/client/src/common/Sidebar.js +++ b/client/src/common/Sidebar.js @@ -1,7 +1,7 @@ -import React from 'react' +import React from 'react'; export default props => (
{props.children}
-) +); diff --git a/client/src/common/SidebarBody.js b/client/src/common/SidebarBody.js index 0b8efb184..62b0615d9 100644 --- a/client/src/common/SidebarBody.js +++ b/client/src/common/SidebarBody.js @@ -1,7 +1,7 @@ -import React from 'react' +import React from 'react'; export default props => (
{props.children}
-) +); diff --git a/client/src/common/SpinKitCube.js b/client/src/common/SpinKitCube.js index 6679413f9..5df8b697d 100644 --- a/client/src/common/SpinKitCube.js +++ b/client/src/common/SpinKitCube.js @@ -1,5 +1,5 @@ -import React from 'react' -import './SpinKitCube.css' +import React from 'react'; +import './SpinKitCube.css'; // http://tobiasahlin.com/spinkit/ export default () => ( @@ -14,4 +14,4 @@ export default () => (
-) +); diff --git a/client/src/common/SqlEditor.js b/client/src/common/SqlEditor.js index 15cea779c..a93299700 100644 --- a/client/src/common/SqlEditor.js +++ b/client/src/common/SqlEditor.js @@ -1,15 +1,15 @@ // NOTE this import 'brace' must occur before the importing of brace extensions -import 'brace' -import 'brace/ext/searchbox' -import 'brace/mode/sql' -import 'brace/theme/sqlserver' -import PropTypes from 'prop-types' -import React from 'react' -import Measure from 'react-measure' -import AceEditor from 'react-ace' -import AppContext from '../containers/AppContext' +import 'brace'; +import 'brace/ext/searchbox'; +import 'brace/mode/sql'; +import 'brace/theme/sqlserver'; +import PropTypes from 'prop-types'; +import React from 'react'; +import Measure from 'react-measure'; +import AceEditor from 'react-ace'; +import AppContext from '../containers/AppContext'; -const noop = () => {} +const noop = () => {}; class SqlEditor extends React.Component { state = { @@ -17,14 +17,14 @@ class SqlEditor extends React.Component { width: -1, height: -1 } - } + }; componentDidMount() { - const { config, onChange } = this.props - const editor = this.editor + const { config, onChange } = this.props; + const editor = this.editor; if (editor && onChange) { - editor.focus() + editor.focus(); // augment the built-in behavior of liveAutocomplete // built-in behavior only starts autocomplete when at least 1 character has been typed @@ -33,42 +33,42 @@ class SqlEditor extends React.Component { editor.commands.on('afterExec', e => { if (e.command.name === 'insertstring' && /^[\w.]$/.test(e.args)) { if (e.args === '.') { - editor.execCommand('startAutocomplete') + editor.execCommand('startAutocomplete'); } } - }) + }); if (config.editorWordWrap) { - editor.session.setUseWrapMode(true) + editor.session.setUseWrapMode(true); } } } handleSelection = selection => { - const { onSelectionChange } = this.props - const { editor } = this + const { onSelectionChange } = this.props; + const { editor } = this; if (editor && editor.session) { - const selectedText = editor.session.getTextRange(selection.getRange()) - onSelectionChange(selectedText) + const selectedText = editor.session.getTextRange(selection.getRange()); + onSelectionChange(selectedText); } - } + }; handleRef = ref => { - this.editor = ref ? ref.editor : null - } + this.editor = ref ? ref.editor : null; + }; render() { - const { config, onChange, readOnly, value } = this.props - const { width, height } = this.state.dimensions + const { config, onChange, readOnly, value } = this.props; + const { width, height } = this.state.dimensions; if (this.editor && config.editorWordWrap) { - this.editor.session.setUseWrapMode(true) + this.editor.session.setUseWrapMode(true); } return ( { - this.setState({ dimensions: contentRect.bounds }) + this.setState({ dimensions: contentRect.bounds }); }} > {({ measureRef }) => ( @@ -94,7 +94,7 @@ class SqlEditor extends React.Component {
)} - ) + ); } } @@ -104,24 +104,24 @@ SqlEditor.propTypes = { onSelectionChange: PropTypes.func, readOnly: PropTypes.bool, value: PropTypes.string -} +}; SqlEditor.defaultProps = { onSelectionChange: () => {}, readOnly: false, value: '' -} +}; class SqlEditorContainer extends React.Component { render() { return ( {appContext => { - return + return ; }} - ) + ); } } -export default SqlEditorContainer +export default SqlEditorContainer; diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index 877c72157..7721aca8b 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -1,82 +1,82 @@ -import message from 'antd/lib/message' -import 'd3' -import PropTypes from 'prop-types' -import React from 'react' -import { Chart } from 'taucharts' -import exportTo from 'taucharts/build/development/plugins/tauCharts.export' -import legend from 'taucharts/build/development/plugins/tauCharts.legend' -import quickFilter from 'taucharts/build/development/plugins/tauCharts.quick-filter' -import tooltip from 'taucharts/build/development/plugins/tauCharts.tooltip' -import tcTrendline from 'taucharts/build/development/plugins/tauCharts.trendline' -import chartDefinitions from '../utilities/chartDefinitions.js' -import SpinKitCube from './SpinKitCube.js' +import message from 'antd/lib/message'; +import 'd3'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { Chart } from 'taucharts'; +import exportTo from 'taucharts/build/development/plugins/tauCharts.export'; +import legend from 'taucharts/build/development/plugins/tauCharts.legend'; +import quickFilter from 'taucharts/build/development/plugins/tauCharts.quick-filter'; +import tooltip from 'taucharts/build/development/plugins/tauCharts.tooltip'; +import tcTrendline from 'taucharts/build/development/plugins/tauCharts.trendline'; +import chartDefinitions from '../utilities/chartDefinitions.js'; +import SpinKitCube from './SpinKitCube.js'; class SqlpadTauChart extends React.Component { - displayName = 'SqlpadTauChart' + displayName = 'SqlpadTauChart'; componentDidUpdate(prevProps) { - const { isRunning, queryError, renderChart } = this.props + const { isRunning, queryError, renderChart } = this.props; if (isRunning || queryError) { - this.destroyChart() + this.destroyChart(); } else if (renderChart && !this.chart) { - this.renderChart() + this.renderChart(); } } - chart = undefined + chart = undefined; destroyChart = () => { if (this.chart) { - this.chart.destroy() - this.chart = null + this.chart.destroy(); + this.chart = null; } - } + }; getUnmetFields = (chartType, selectedFieldMap) => { const chartDefinition = chartDefinitions.find( def => def.chartType === chartType - ) + ); if (!chartDefinition) { - throw new Error(`Unknown chartType ${chartType}`) + throw new Error(`Unknown chartType ${chartType}`); } - const unmetRequiredFields = [] + const unmetRequiredFields = []; chartDefinition.fields.forEach(field => { if (field.required && !selectedFieldMap[field.fieldId]) { - unmetRequiredFields.push(field) + unmetRequiredFields.push(field); } - }) + }); - return unmetRequiredFields - } + return unmetRequiredFields; + }; renderChart = rerender => { - const { queryResult, query } = this.props + const { queryResult, query } = this.props; // This is invoked during following: // - Vis tab enter // - Visualize button press (forces rerender) // - new data arrival - const meta = queryResult ? queryResult.meta : {} - let dataRows = queryResult ? queryResult.rows : [] - const chartType = query.chartConfiguration.chartType - const selectedFields = query.chartConfiguration.fields + const meta = queryResult ? queryResult.meta : {}; + let dataRows = queryResult ? queryResult.rows : []; + const chartType = query.chartConfiguration.chartType; + const selectedFields = query.chartConfiguration.fields; const chartDefinition = chartDefinitions.find( def => def.chartType === chartType - ) + ); if (rerender || !dataRows.length || !chartDefinition) { - this.destroyChart() + this.destroyChart(); } // If there's no data just exit the chart render if (!dataRows.length) { - return + return; } // if there's no chart definition exit the render if (!chartDefinition) { - return + return; } const chartConfig = { @@ -100,21 +100,21 @@ class SqlpadTauChart extends React.Component { handleRenderingErrors: true, utcTime: true } - } + }; // loop through data rows and convert types as needed dataRows = dataRows.map(row => { - const newRow = {} + const newRow = {}; Object.keys(row).forEach(col => { - const datatype = queryResult.meta[col].datatype + const datatype = queryResult.meta[col].datatype; if (datatype === 'date') { - newRow[col] = new Date(row[col]) + newRow[col] = new Date(row[col]); } else if (datatype === 'number') { - newRow[col] = Number(row[col]) + newRow[col] = Number(row[col]); } else { - newRow[col] = row[col] + newRow[col] = row[col]; } - }) + }); // HACK - // Facets need to be a dimension, not a measure. @@ -123,16 +123,16 @@ class SqlpadTauChart extends React.Component { // to trick tauCharts into thinking its a dimension const forceDimensionFields = chartDefinition.fields.filter( field => field.forceDimension === true - ) + ); forceDimensionFields.forEach(fieldDefinition => { - const col = selectedFields[fieldDefinition.fieldId] - const colDatatype = meta[col] ? meta[col].datatype : null + const col = selectedFields[fieldDefinition.fieldId]; + const colDatatype = meta[col] ? meta[col].datatype : null; if (col && colDatatype === 'number' && newRow[col]) { - newRow[col] = newRow[col].toString() + newRow[col] = newRow[col].toString(); } - }) - return newRow - }) + }); + return newRow; + }); // Some chartConfiguration.fields may reference columns that no longer exist // Remove them from a copy of chartConfigurationFields @@ -142,23 +142,23 @@ class SqlpadTauChart extends React.Component { ).reduce((fieldsMap, field) => { const fieldDefinition = chartDefinition.fields.find( f => f.fieldId === field - ) - const value = query.chartConfiguration.fields[field] + ); + const value = query.chartConfiguration.fields[field]; if (fieldDefinition && fieldDefinition.inputType !== 'field-dropdown') { - fieldsMap[field] = value + fieldsMap[field] = value; } else if (meta[value]) { - fieldsMap[field] = value + fieldsMap[field] = value; } - return fieldsMap - }, {}) + return fieldsMap; + }, {}); // Now that non-existing columns are removed from the configuration fields // Validate that the chart required fields are provided const unmetFields = this.getUnmetFields( chartType, cleanedChartConfigurationFields - ) + ); if (unmetFields.length) { // if rerender is true, a render was explicitly requested by user clicking the vis button @@ -166,9 +166,9 @@ class SqlpadTauChart extends React.Component { if (rerender) { message.error( 'Unmet required fields: ' + unmetFields.map(f => f.label).join(', ') - ) + ); } - return + return; } const { @@ -187,141 +187,141 @@ class SqlpadTauChart extends React.Component { barlabel, labelFacet, color - } = cleanedChartConfigurationFields + } = cleanedChartConfigurationFields; switch (chartType) { case 'line': - chartConfig.x = [x] + chartConfig.x = [x]; if (xFacet) { - chartConfig.x.unshift(xFacet) + chartConfig.x.unshift(xFacet); } - chartConfig.y = [y] + chartConfig.y = [y]; if (yFacet) { - chartConfig.y.unshift(yFacet) + chartConfig.y.unshift(yFacet); } if (filter) { - chartConfig.plugins.push(quickFilter()) + chartConfig.plugins.push(quickFilter()); } if (trendline) { - chartConfig.plugins.push(tcTrendline()) + chartConfig.plugins.push(tcTrendline()); } if (split) { - chartConfig.color = split + chartConfig.color = split; } if (size) { - chartConfig.size = size + chartConfig.size = size; } if (yMin || yMax) { chartConfig.guide = { y: { autoScale: false } - } + }; if (yMin) { - chartConfig.guide.y.min = Number(yMin) + chartConfig.guide.y.min = Number(yMin); } if (yMax) { - chartConfig.guide.y.max = Number(yMax) + chartConfig.guide.y.max = Number(yMax); } } - break + break; case 'bar': - chartConfig.x = [barvalue] + chartConfig.x = [barvalue]; if (valueFacet) { - chartConfig.x.unshift(valueFacet) + chartConfig.x.unshift(valueFacet); } - chartConfig.y = [barlabel] + chartConfig.y = [barlabel]; if (labelFacet) { - chartConfig.y.unshift(labelFacet) + chartConfig.y.unshift(labelFacet); } - break + break; case 'verticalbar': - chartConfig.y = [barvalue] + chartConfig.y = [barvalue]; if (valueFacet) { - chartConfig.y.unshift(valueFacet) + chartConfig.y.unshift(valueFacet); } - chartConfig.x = [barlabel] + chartConfig.x = [barlabel]; if (labelFacet) { - chartConfig.x.unshift(labelFacet) + chartConfig.x.unshift(labelFacet); } - break + break; case 'stacked-bar-horizontal': - chartConfig.x = [barvalue] + chartConfig.x = [barvalue]; if (valueFacet) { - chartConfig.x.unshift(valueFacet) + chartConfig.x.unshift(valueFacet); } - chartConfig.y = [barlabel] + chartConfig.y = [barlabel]; if (labelFacet) { - chartConfig.y.unshift(labelFacet) + chartConfig.y.unshift(labelFacet); } if (color) { - chartConfig.color = color + chartConfig.color = color; } - break + break; case 'stacked-bar-vertical': - chartConfig.y = [barvalue] + chartConfig.y = [barvalue]; if (valueFacet) { - chartConfig.y.unshift(valueFacet) + chartConfig.y.unshift(valueFacet); } - chartConfig.x = [barlabel] + chartConfig.x = [barlabel]; if (labelFacet) { - chartConfig.x.unshift(labelFacet) + chartConfig.x.unshift(labelFacet); } if (color) { - chartConfig.color = color + chartConfig.color = color; } - break + break; case 'bubble': - chartConfig.x = [x] + chartConfig.x = [x]; if (xFacet) { - chartConfig.x.unshift(xFacet) + chartConfig.x.unshift(xFacet); } - chartConfig.y = [y] + chartConfig.y = [y]; if (yFacet) { - chartConfig.y.unshift(yFacet) + chartConfig.y.unshift(yFacet); } if (filter) { - chartConfig.plugins.push(quickFilter()) + chartConfig.plugins.push(quickFilter()); } if (trendline) { - chartConfig.plugins.push(tcTrendline()) + chartConfig.plugins.push(tcTrendline()); } if (size) { - chartConfig.size = size + chartConfig.size = size; } if (color) { - chartConfig.color = color + chartConfig.color = color; } - break + break; default: - console.error('unknown chart type') + console.error('unknown chart type'); } // Add data to chart chartConfig - chartConfig.data = dataRows + chartConfig.data = dataRows; if (!this.chart) { - this.chart = new Chart(chartConfig) - this.chart.renderTo('#chart') + this.chart = new Chart(chartConfig); + this.chart.renderTo('#chart'); } else { - this.chart.setData(dataRows) + this.chart.setData(dataRows); } - } + }; setData = chartData => { - this.chart.setData(chartData) - } + this.chart.setData(chartData); + }; componentWillUnmount() { - this.destroyChart() + this.destroyChart(); } render() { - const { isRunning, queryError } = this.props + const { isRunning, queryError } = this.props; if (isRunning) { return (
- ) + ); } if (queryError) { return ( @@ -340,9 +340,9 @@ class SqlpadTauChart extends React.Component { > {queryError}
- ) + ); } - return
+ return
; } } @@ -352,6 +352,6 @@ SqlpadTauChart.propTypes = { queryError: PropTypes.string, queryResult: PropTypes.object, renderChart: PropTypes.bool -} +}; -export default SqlpadTauChart +export default SqlpadTauChart; diff --git a/client/src/configuration/CheckListItem.js b/client/src/configuration/CheckListItem.js index 49ec1cfc1..5c03f0ebc 100644 --- a/client/src/configuration/CheckListItem.js +++ b/client/src/configuration/CheckListItem.js @@ -1,26 +1,26 @@ -import React from 'react' -import Icon from 'antd/lib/icon' +import React from 'react'; +import Icon from 'antd/lib/icon'; const CheckListItem = props => { if (!props.configKey || !props.configItems || !props.configItems.length) { - return null + return null; } const configItem = props.configItems.find(item => { - return item.key === props.configKey - }) + return item.key === props.configKey; + }); if (!configItem) { return (
  • {props.configKey} is not in configItems.
  • - ) + ); } return (
  • {' '} {configItem.label || configItem.envVar}
  • - ) -} + ); +}; -export default CheckListItem +export default CheckListItem; diff --git a/client/src/configuration/ConfigEnvDocumentation.js b/client/src/configuration/ConfigEnvDocumentation.js index f1a2ac20e..7c9c684ab 100644 --- a/client/src/configuration/ConfigEnvDocumentation.js +++ b/client/src/configuration/ConfigEnvDocumentation.js @@ -1,35 +1,35 @@ -import Table from 'antd/lib/table' -import React from 'react' +import Table from 'antd/lib/table'; +import React from 'react'; -const { Column } = Table +const { Column } = Table; class ConfigEnvDocumentation extends React.Component { renderValue = (text, record) => { - return record.value === '' ? '' : record.effectiveValue.toString() - } + return record.value === '' ? '' : record.effectiveValue.toString(); + }; renderInfo = (text, record) => { return (

    {record.description}

    - ) - } + ); + }; renderCli = (text, record) => { const cliFlag = record.cliFlag && record.cliFlag.pop ? record.cliFlag.pop() - : record.cliFlag + : record.cliFlag; if (cliFlag) { - return '--' + cliFlag + return '--' + cliFlag; } - } + }; render() { const filteredConfigItems = this.props.configItems.filter( config => config.interface === 'env' - ) + ); return (
    - ) + ); } } -export default ConfigEnvDocumentation +export default ConfigEnvDocumentation; diff --git a/client/src/configuration/ConfigItemInput.js b/client/src/configuration/ConfigItemInput.js index 352324bd4..feec9fe01 100644 --- a/client/src/configuration/ConfigItemInput.js +++ b/client/src/configuration/ConfigItemInput.js @@ -1,34 +1,34 @@ -import Input from 'antd/lib/input' -import Select from 'antd/lib/select' -import React from 'react' +import Input from 'antd/lib/input'; +import Select from 'antd/lib/select'; +import React from 'react'; -const { Option } = Select +const { Option } = Select; class ConfigItemInput extends React.Component { state = { value: this.props.config.effectiveValue - } + }; handleChange = e => { this.setState({ value: e.target.value - }) - this.props.saveConfigValue(this.props.config.key, e.target.value) - } + }); + this.props.saveConfigValue(this.props.config.key, e.target.value); + }; handleSelectChange = value => { this.setState({ value - }) - this.props.saveConfigValue(this.props.config.key, value) - } + }); + this.props.saveConfigValue(this.props.config.key, value); + }; render() { - const { config } = this.props + const { config } = this.props; const disabled = config.effectiveValueSource === 'cli' || config.effectiveValueSource === 'saved cli' || - config.effectiveValueSource === 'env' + config.effectiveValueSource === 'env'; if (config.options) { const optionNodes = config.options.map(option => { @@ -36,8 +36,8 @@ class ConfigItemInput extends React.Component { - ) - }) + ); + }); return ( - ) + ); } else { return ( - ) + ); } } } -export default ConfigItemInput +export default ConfigItemInput; diff --git a/client/src/configuration/ConfigurationView.js b/client/src/configuration/ConfigurationView.js index db4acdced..32b721535 100644 --- a/client/src/configuration/ConfigurationView.js +++ b/client/src/configuration/ConfigurationView.js @@ -1,47 +1,47 @@ -import Col from 'antd/lib/col' -import Layout from 'antd/lib/layout' -import message from 'antd/lib/message' -import Row from 'antd/lib/row' -import debounce from 'lodash.debounce' -import React from 'react' -import AppNav from '../AppNav' -import Header from '../common/Header' -import fetchJson from '../utilities/fetch-json.js' -import CheckListItem from './CheckListItem' -import ConfigEnvDocumentation from './ConfigEnvDocumentation' -import ConfigItemInput from './ConfigItemInput' +import Col from 'antd/lib/col'; +import Layout from 'antd/lib/layout'; +import message from 'antd/lib/message'; +import Row from 'antd/lib/row'; +import debounce from 'lodash.debounce'; +import React from 'react'; +import AppNav from '../AppNav'; +import Header from '../common/Header'; +import fetchJson from '../utilities/fetch-json.js'; +import CheckListItem from './CheckListItem'; +import ConfigEnvDocumentation from './ConfigEnvDocumentation'; +import ConfigItemInput from './ConfigItemInput'; -const { Content } = Layout +const { Content } = Layout; class ConfigurationView extends React.Component { state = { configItems: [] - } + }; loadConfigValuesFromServer = () => { fetchJson('GET', '/api/config-items').then(json => { - if (json.error) message.error(json.error) - this.setState({ configItems: json.configItems }) - }) - } + if (json.error) message.error(json.error); + this.setState({ configItems: json.configItems }); + }); + }; saveConfigValue = (key, value) => { fetchJson('POST', '/api/config-values/' + key, { value: value }).then(json => { if (json.error) { - message.error('Save failed') + message.error('Save failed'); } else { - message.success('Value saved') - this.loadConfigValuesFromServer() + message.success('Value saved'); + this.loadConfigValuesFromServer(); } - }) - } + }); + }; componentDidMount() { - document.title = 'SQLPad - Configuration' - this.loadConfigValuesFromServer() - this.saveConfigValue = debounce(this.saveConfigValue, 500) + document.title = 'SQLPad - Configuration'; + this.loadConfigValuesFromServer(); + this.saveConfigValue = debounce(this.saveConfigValue, 500); } renderValueInput = (text, record) => { @@ -54,33 +54,34 @@ class ConfigurationView extends React.Component { saveConfigValue={this.saveConfigValue} />
    - ) - } + ); + }; renderInfo = config => { const disabled = config.effectiveValueSource === 'cli' || config.effectiveValueSource === 'saved cli' || - config.effectiveValueSource === 'env' + config.effectiveValueSource === 'env'; const effectiveValueSourceLabels = { cli: 'Command Line', 'saved cli': 'Saved Command Line', env: 'Environment Varialbe' - } - const overriddenBy = effectiveValueSourceLabels[config.effectiveValueSource] + }; + const overriddenBy = + effectiveValueSourceLabels[config.effectiveValueSource]; const defaultValue = config.default === '' ? ( empty ) : ( {config.default.toString()} - ) + ); const cliFlag = config.cliFlag && config.cliFlag.pop ? config.cliFlag.pop() - : config.cliFlag + : config.cliFlag; return (
    @@ -110,14 +111,14 @@ class ConfigurationView extends React.Component {
    )}
    - ) - } + ); + }; renderConfigInputs() { - const { configItems } = this.state + const { configItems } = this.state; const uiConfigItems = configItems.filter( config => config.interface === 'ui' - ) + ); return (
    {uiConfigItems.map(config => { @@ -136,10 +137,10 @@ class ConfigurationView extends React.Component {
    {this.renderInfo(config)}
    - ) + ); })}
    - ) + ); } render() { @@ -223,8 +224,8 @@ class ConfigurationView extends React.Component { - ) + ); } } -export default ConfigurationView +export default ConfigurationView; diff --git a/client/src/connections/ConnectionEditDrawer.js b/client/src/connections/ConnectionEditDrawer.js index 9526ba11f..30b12886d 100644 --- a/client/src/connections/ConnectionEditDrawer.js +++ b/client/src/connections/ConnectionEditDrawer.js @@ -1,6 +1,6 @@ -import Drawer from 'antd/lib/drawer' -import React from 'react' -import ConnectionForm from './ConnectionForm' +import Drawer from 'antd/lib/drawer'; +import React from 'react'; +import ConnectionForm from './ConnectionForm'; function ConnectionEditDrawer({ connectionId, @@ -9,7 +9,7 @@ function ConnectionEditDrawer({ onConnectionSaved, placement }) { - const title = connectionId ? 'Edit connection' : 'New connection' + const title = connectionId ? 'Edit connection' : 'New connection'; return ( - ) + ); } -export default ConnectionEditDrawer +export default ConnectionEditDrawer; diff --git a/client/src/connections/ConnectionForm.js b/client/src/connections/ConnectionForm.js index 6b3c0964a..758ee3da8 100644 --- a/client/src/connections/ConnectionForm.js +++ b/client/src/connections/ConnectionForm.js @@ -1,18 +1,18 @@ -import Button from 'antd/lib/button' -import Checkbox from 'antd/lib/checkbox' -import Form from 'antd/lib/form' -import Icon from 'antd/lib/icon' -import Input from 'antd/lib/input' -import Select from 'antd/lib/select' -import React from 'react' -import fetchJson from '../utilities/fetch-json.js' +import Button from 'antd/lib/button'; +import Checkbox from 'antd/lib/checkbox'; +import Form from 'antd/lib/form'; +import Icon from 'antd/lib/icon'; +import Input from 'antd/lib/input'; +import Select from 'antd/lib/select'; +import React from 'react'; +import fetchJson from '../utilities/fetch-json.js'; -const FormItem = Form.Item -const { Option } = Select +const FormItem = Form.Item; +const { Option } = Select; -const TEXT = 'TEXT' -const PASSWORD = 'PASSWORD' -const CHECKBOX = 'CHECKBOX' +const TEXT = 'TEXT'; +const PASSWORD = 'PASSWORD'; +const CHECKBOX = 'CHECKBOX'; const formItemLayout = { labelCol: { @@ -23,7 +23,7 @@ const formItemLayout = { xs: { span: 24 }, sm: { span: 16 } } -} +}; const tailFormItemLayout = { wrapperCol: { @@ -36,7 +36,7 @@ const tailFormItemLayout = { offset: 8 } } -} +}; class ConnectionForm extends React.Component { state = { @@ -49,96 +49,96 @@ class ConnectionForm extends React.Component { testSuccess: false, title: '', visible: false - } + }; componentDidMount() { - this.loadDriversFromServer() - this.loadConnectionFromServer() + this.loadDriversFromServer(); + this.loadConnectionFromServer(); } // TODO move this to app load - no reason this will change loadDriversFromServer = () => { fetchJson('GET', '/api/drivers').then(json => { - this.setState({ drivers: json.drivers }) - }) - } + this.setState({ drivers: json.drivers }); + }); + }; loadConnectionFromServer = async () => { - const { connectionId } = this.props + const { connectionId } = this.props; if (connectionId) { - const json = await fetchJson('GET', `/api/connections/${connectionId}`) + const json = await fetchJson('GET', `/api/connections/${connectionId}`); if (json.error) { - return console.error(json.error) + return console.error(json.error); } - return this.setState({ connectionEdits: json.connection }) + return this.setState({ connectionEdits: json.connection }); } - } + }; setConnectionValue = (key, value) => { - const { connectionEdits } = this.state - connectionEdits[key] = value - return this.setState({ connectionEdits }) - } + const { connectionEdits } = this.state; + connectionEdits[key] = value; + return this.setState({ connectionEdits }); + }; testConnection = async () => { - const { connectionEdits } = this.state - this.setState({ testing: true }) + const { connectionEdits } = this.state; + this.setState({ testing: true }); const json = await fetchJson( 'POST', '/api/test-connection', connectionEdits - ) + ); return this.setState({ testing: false, testFailed: json.error ? true : false, testSuccess: json.error ? false : true - }) - } + }); + }; saveConnection = async () => { - const { saving, connectionEdits } = this.state - const { onConnectionSaved } = this.props + const { saving, connectionEdits } = this.state; + const { onConnectionSaved } = this.props; if (saving) { - return + return; } - this.setState({ saving: true }) + this.setState({ saving: true }); - let json + let json; if (connectionEdits._id) { json = await fetchJson( 'PUT', '/api/connections/' + connectionEdits._id, connectionEdits - ) + ); } else { - json = await fetchJson('POST', '/api/connections', connectionEdits) + json = await fetchJson('POST', '/api/connections', connectionEdits); } if (json.error) { - return this.setState({ saving: false, savingError: json.error }) + return this.setState({ saving: false, savingError: json.error }); } - return onConnectionSaved(json.connection) - } + return onConnectionSaved(json.connection); + }; renderDriverFields() { - const { drivers, connectionEdits } = this.state + const { drivers, connectionEdits } = this.state; if (connectionEdits.driver && drivers.length) { // NOTE connection.driver is driverId const driver = drivers.find( driver => driver.id === connectionEdits.driver - ) + ); if (!driver) { - console.error(`Driver ${connectionEdits.driver} not found`) - return null + console.error(`Driver ${connectionEdits.driver} not found`); + return null; } - const { fields } = driver + const { fields } = driver; return fields.map(field => { if (field.formType === TEXT) { - const value = connectionEdits[field.key] || '' + const value = connectionEdits[field.key] || ''; return ( {/* */} @@ -150,9 +150,9 @@ class ConnectionForm extends React.Component { } /> - ) + ); } else if (field.formType === PASSWORD) { - const value = connectionEdits[field.key] || '' + const value = connectionEdits[field.key] || ''; // autoComplete='new-password' used to prevent browsers from autofilling username and password // Because we dont return a password, Chrome goes ahead and autofills return ( @@ -168,9 +168,9 @@ class ConnectionForm extends React.Component { } /> - ) + ); } else if (field.formType === CHECKBOX) { - const checked = connectionEdits[field.key] || false + const checked = connectionEdits[field.key] || false; return ( - ) + ); } - return null - }) + return null; + }); } } @@ -198,18 +198,18 @@ class ConnectionForm extends React.Component { testing, testSuccess, testFailed - } = this.state + } = this.state; - const { name = '', driver = '' } = connectionEdits + const { name = '', driver = '' } = connectionEdits; - const driverSelectOptions = [ - ) + ); } else { drivers .sort((a, b) => a.name > b.name) @@ -219,7 +219,7 @@ class ConnectionForm extends React.Component { {driver.name} ) - ) + ); } return ( @@ -302,8 +302,8 @@ class ConnectionForm extends React.Component {
    - ) + ); } } -export default ConnectionForm +export default ConnectionForm; diff --git a/client/src/connections/ConnectionListDrawer.js b/client/src/connections/ConnectionListDrawer.js index 3cd7c70b4..5503dc18d 100644 --- a/client/src/connections/ConnectionListDrawer.js +++ b/client/src/connections/ConnectionListDrawer.js @@ -1,88 +1,88 @@ -import Button from 'antd/lib/button' -import Drawer from 'antd/lib/drawer' -import Icon from 'antd/lib/icon' -import List from 'antd/lib/list' -import Popconfirm from 'antd/lib/popconfirm' -import React from 'react' -import { withAppContext } from '../containers/withAppContext' -import ConnectionEditDrawer from './ConnectionEditDrawer' -import { withConnectionsContext } from './ConnectionsStore' +import Button from 'antd/lib/button'; +import Drawer from 'antd/lib/drawer'; +import Icon from 'antd/lib/icon'; +import List from 'antd/lib/list'; +import Popconfirm from 'antd/lib/popconfirm'; +import React from 'react'; +import { withAppContext } from '../containers/withAppContext'; +import ConnectionEditDrawer from './ConnectionEditDrawer'; +import { withConnectionsContext } from './ConnectionsStore'; class ConnectionListDrawer extends React.Component { state = { connectionId: null, showEdit: false - } + }; componentDidMount() { - this.props.connectionsContext.loadConnections() + this.props.connectionsContext.loadConnections(); } editConnection = connection => { - this.setState({ connectionId: connection._id, showEdit: true }) - } + this.setState({ connectionId: connection._id, showEdit: true }); + }; newConnection = () => { - this.setState({ showEdit: true, connectionId: null }) - } + this.setState({ showEdit: true, connectionId: null }); + }; handleEditDrawerClose = () => { - this.setState({ showEdit: false, connectionId: null }) - } + this.setState({ showEdit: false, connectionId: null }); + }; handleConnectionSaved = connection => { - const { connectionId } = this.state - const { onClose, connectionsContext } = this.props - const { addUpdateConnection, selectConnection } = connectionsContext - addUpdateConnection(connection) + const { connectionId } = this.state; + const { onClose, connectionsContext } = this.props; + const { addUpdateConnection, selectConnection } = connectionsContext; + addUpdateConnection(connection); // If there was not a connectionId previously passed to edit drawer // this is a new connection // New connections can be selected and then all the drawer closed if (!connectionId) { - this.setState({ showEdit: false, connectionId: null }, onClose) - selectConnection(connection._id) + this.setState({ showEdit: false, connectionId: null }, onClose); + selectConnection(connection._id); } else { - this.setState({ showEdit: false, connectionId: null }) + this.setState({ showEdit: false, connectionId: null }); } - } + }; render() { - const { appContext, connectionsContext, visible, onClose } = this.props - const { connectionId, showEdit } = this.state - const { currentUser } = appContext + const { appContext, connectionsContext, visible, onClose } = this.props; + const { connectionId, showEdit } = this.state; + const { currentUser } = appContext; const { selectConnection, selectedConnectionId, connections, deleteConnection - } = connectionsContext + } = connectionsContext; // TODO - server driver implementations should implement functions // that get decorated normalized display values const decoratedConnections = connections.map(connection => { - connection.key = connection._id - connection.displayDatabase = connection.database - connection.displaySchema = '' - let displayPort = connection.port ? ':' + connection.port : '' + connection.key = connection._id; + connection.displayDatabase = connection.database; + connection.displaySchema = ''; + let displayPort = connection.port ? ':' + connection.port : ''; if (connection.driver === 'hdb') { - connection.displayDatabase = connection.hanadatabase - connection.displaySchema = connection.hanaSchema - displayPort = connection.hanaport ? ':' + connection.hanaport : '' + connection.displayDatabase = connection.hanadatabase; + connection.displaySchema = connection.hanaSchema; + displayPort = connection.hanaport ? ':' + connection.hanaport : ''; } else if (connection.driver === 'presto') { - connection.displayDatabase = connection.prestoCatalog - connection.displaySchema = connection.prestoSchema + connection.displayDatabase = connection.prestoCatalog; + connection.displaySchema = connection.prestoSchema; } - connection.displayHost = (connection.host || '') + displayPort - return connection - }) + connection.displayHost = (connection.host || '') + displayPort; + return connection; + }); // The last "connection" list item will be an input to add a connection // This is just something simple to branch off of in List.renderItem prop if (currentUser.role === 'admin') { - decoratedConnections.push('ADD_BUTTON') + decoratedConnections.push('ADD_BUTTON'); } return ( @@ -113,12 +113,12 @@ class ConnectionListDrawer extends React.Component { Add connection - ) + ); } - let description = '' + let description = ''; if (item.user) { - description = item.user + '@' + description = item.user + '@'; } description += [ item.displayHost, @@ -126,34 +126,34 @@ class ConnectionListDrawer extends React.Component { item.displaySchema ] .filter(part => part && part.trim()) - .join(' / ') + .join(' / '); - const actions = [] + const actions = []; if (selectedConnectionId === item._id) { actions.push( - ) + ); } else { actions.push( - ) + ); } if (currentUser.role === 'admin') { actions.push( - ) + ); actions.push( - ) + ); } } @@ -82,6 +82,6 @@ VisSidebar.propTypes = { onVisualizeClick: PropTypes.func, query: PropTypes.object, queryResult: PropTypes.object -} +}; -export default VisSidebar +export default VisSidebar; diff --git a/client/src/users/InviteUserForm.js b/client/src/users/InviteUserForm.js index 58a7b1061..74242925a 100644 --- a/client/src/users/InviteUserForm.js +++ b/client/src/users/InviteUserForm.js @@ -1,57 +1,57 @@ -import Button from 'antd/lib/button' -import Form from 'antd/lib/form' -import Input from 'antd/lib/input' -import message from 'antd/lib/message' -import Select from 'antd/lib/select' -import React from 'react' -import AppContext from '../containers/AppContext' -import fetchJson from '../utilities/fetch-json.js' +import Button from 'antd/lib/button'; +import Form from 'antd/lib/form'; +import Input from 'antd/lib/input'; +import message from 'antd/lib/message'; +import Select from 'antd/lib/select'; +import React from 'react'; +import AppContext from '../containers/AppContext'; +import fetchJson from '../utilities/fetch-json.js'; -const FormItem = Form.Item -const { Option } = Select +const FormItem = Form.Item; +const { Option } = Select; class InviteUserForm extends React.Component { state = { email: null, role: null, isInviting: null - } + }; onEmailChange = e => { - this.setState({ email: e.target.value }) - } + this.setState({ email: e.target.value }); + }; onRoleChange = role => { - this.setState({ role }) - } + this.setState({ role }); + }; onInviteClick = e => { - const { onInvited } = this.props + const { onInvited } = this.props; const user = { email: this.state.email, role: this.state.role - } + }; this.setState({ isInviting: true - }) + }); fetchJson('POST', '/api/users', user).then(json => { this.setState({ isInviting: false - }) + }); if (json.error) { - return message.error('Whitelist failed: ' + json.error.toString()) + return message.error('Whitelist failed: ' + json.error.toString()); } - message.success('User Whitelisted') + message.success('User Whitelisted'); this.setState({ email: null, role: null - }) - onInvited() - }) - } + }); + onInvited(); + }); + }; render() { - const { email, role, isInviting } = this.state + const { email, role, isInviting } = this.state; return ( @@ -107,8 +107,8 @@ class InviteUserForm extends React.Component { )} - ) + ); } } -export default InviteUserForm +export default InviteUserForm; diff --git a/client/src/users/UsersView.js b/client/src/users/UsersView.js index 9cd802a94..7205ad98b 100644 --- a/client/src/users/UsersView.js +++ b/client/src/users/UsersView.js @@ -1,122 +1,122 @@ -import Button from 'antd/lib/button' -import Layout from 'antd/lib/layout' -import message from 'antd/lib/message' -import Modal from 'antd/lib/modal' -import Popconfirm from 'antd/lib/popconfirm' -import Select from 'antd/lib/select' -import Table from 'antd/lib/table' -import moment from 'moment' -import React from 'react' -import { Link } from 'react-router-dom' -import uuid from 'uuid' -import AppNav from '../AppNav' -import Header from '../common/Header' -import AppContext from '../containers/AppContext' -import fetchJson from '../utilities/fetch-json.js' -import InviteUserForm from './InviteUserForm' - -const { Content } = Layout -const { Column } = Table -const { Option } = Select +import Button from 'antd/lib/button'; +import Layout from 'antd/lib/layout'; +import message from 'antd/lib/message'; +import Modal from 'antd/lib/modal'; +import Popconfirm from 'antd/lib/popconfirm'; +import Select from 'antd/lib/select'; +import Table from 'antd/lib/table'; +import moment from 'moment'; +import React from 'react'; +import { Link } from 'react-router-dom'; +import uuid from 'uuid'; +import AppNav from '../AppNav'; +import Header from '../common/Header'; +import AppContext from '../containers/AppContext'; +import fetchJson from '../utilities/fetch-json.js'; +import InviteUserForm from './InviteUserForm'; + +const { Content } = Layout; +const { Column } = Table; +const { Option } = Select; class UsersView extends React.Component { state = { users: [], isSaving: false, showAddUser: false - } + }; componentDidMount() { - document.title = 'SQLPad - Users' - this.loadUsersFromServer() + document.title = 'SQLPad - Users'; + this.loadUsersFromServer(); } handleDelete = user => { fetchJson('DELETE', '/api/users/' + user._id).then(json => { if (json.error) { - return message.error('Delete Failed: ' + json.error.toString()) + return message.error('Delete Failed: ' + json.error.toString()); } - message.success('User Deleted') - this.loadUsersFromServer() - }) - } + message.success('User Deleted'); + this.loadUsersFromServer(); + }); + }; loadUsersFromServer = () => { fetchJson('GET', '/api/users').then(json => { if (json.error) { - message.error(json.error) + message.error(json.error); } if (json.users) { const users = json.users.map(user => { - user.key = user._id - return user - }) - this.setState({ users }) + user.key = user._id; + return user; + }); + this.setState({ users }); } - }) - } + }); + }; updateUserRole = user => { - this.setState({ isSaving: true }) + this.setState({ isSaving: true }); fetchJson('PUT', '/api/users/' + user._id, { role: user.role }).then(json => { - this.loadUsersFromServer() - this.setState({ isSaving: false }) + this.loadUsersFromServer(); + this.setState({ isSaving: false }); if (json.error) { - return message.error('Update failed: ' + json.error.toString()) + return message.error('Update failed: ' + json.error.toString()); } - message.success('User Updated') - }) - } + message.success('User Updated'); + }); + }; generatePasswordResetLink = user => { - this.setState({ isSaving: true }) - const passwordResetId = uuid.v4() + this.setState({ isSaving: true }); + const passwordResetId = uuid.v4(); fetchJson('PUT', '/api/users/' + user._id, { passwordResetId }).then(json => { - this.loadUsersFromServer() - this.setState({ isSaving: false }) + this.loadUsersFromServer(); + this.setState({ isSaving: false }); if (json.error) { - return message.error('Update failed: ' + json.error.toString()) + return message.error('Update failed: ' + json.error.toString()); } - message.success('Password link generated') - }) - } + message.success('Password link generated'); + }); + }; removePasswordResetLink = user => { - this.setState({ isSaving: true }) + this.setState({ isSaving: true }); fetchJson('PUT', '/api/users/' + user._id, { passwordResetId: '' }).then(json => { - this.loadUsersFromServer() - this.setState({ isSaving: false }) + this.loadUsersFromServer(); + this.setState({ isSaving: false }); if (json.error) { - return message.error('Update failed: ' + json.error.toString()) + return message.error('Update failed: ' + json.error.toString()); } - message.success('Password reset link removed') - }) - } + message.success('Password reset link removed'); + }); + }; handleOnInvited = () => { - this.loadUsersFromServer() - this.setState({ showAddUser: false }) - } + this.loadUsersFromServer(); + this.setState({ showAddUser: false }); + }; createdRender = (text, record) => { return !record.signupDate ? ( not signed up yet ) : ( moment(record.signupDate).calendar() - ) - } + ); + }; roleRender = (text, record) => { return ( {appContext => { - const { currentUser } = appContext + const { currentUser } = appContext; return ( - ) + ); }} - ) - } + ); + }; resetButtonRender = (text, record) => { if (record.passwordResetId) { @@ -152,7 +152,7 @@ class UsersView extends React.Component { Reset Link - ) + ); } return ( - ) - } + ); + }; renderTable() { - const { users } = this.state + const { users } = this.state; return (
    - ) + ); } renderModal() { - const { showAddUser } = this.state + const { showAddUser } = this.state; return ( - ) + ); } render() { @@ -239,8 +239,8 @@ class UsersView extends React.Component { - ) + ); } } -export default UsersView +export default UsersView; diff --git a/client/src/utilities/chartDefinitions.js b/client/src/utilities/chartDefinitions.js index 8a62a530b..787aba8eb 100644 --- a/client/src/utilities/chartDefinitions.js +++ b/client/src/utilities/chartDefinitions.js @@ -276,6 +276,6 @@ const chartDefinitions = [ } ] } -] +]; -export default chartDefinitions +export default chartDefinitions; diff --git a/client/src/utilities/fetch-json.js b/client/src/utilities/fetch-json.js index a8e33d660..f55aed5a3 100644 --- a/client/src/utilities/fetch-json.js +++ b/client/src/utilities/fetch-json.js @@ -1,8 +1,8 @@ -import 'whatwg-fetch' -import message from 'antd/lib/message' +import 'whatwg-fetch'; +import message from 'antd/lib/message'; export default function fetchJson(method, url, body) { - const BASE_URL = window.BASE_URL || '' + const BASE_URL = window.BASE_URL || ''; const opts = { method: method.toUpperCase(), credentials: 'same-origin', @@ -13,14 +13,14 @@ export default function fetchJson(method, url, body) { Expires: '-1', Pragma: 'no-cache' } - } + }; if (body) { - opts.body = JSON.stringify(body) + opts.body = JSON.stringify(body); } - let fetchUrl = BASE_URL + url + let fetchUrl = BASE_URL + url; if (BASE_URL && url.substring(0, 1) !== '/') { - fetchUrl = BASE_URL + '/' + url + fetchUrl = BASE_URL + '/' + url; } return fetch(fetchUrl, opts) @@ -28,18 +28,18 @@ export default function fetchJson(method, url, body) { // API server will send 200 even if error occurs // Eventually this should change to proper status code usage if (response.redirected) { - return (window.location = response.url) + return (window.location = response.url); } else if (response.status === 200) { - return response.json() + return response.json(); } else { - console.error(response) - throw new Error('Server responded not ok') + console.error(response); + throw new Error('Server responded not ok'); } }) .catch(error => { - message.error(error.toString()) + message.error(error.toString()); return { error: 'Server responded not ok' - } - }) + }; + }); } diff --git a/client/src/utilities/updateCompletions.js b/client/src/utilities/updateCompletions.js index 8314cc5b2..123629f47 100644 --- a/client/src/utilities/updateCompletions.js +++ b/client/src/utilities/updateCompletions.js @@ -1,19 +1,19 @@ // import various ace editor things -import * as ace from 'brace' -import 'brace/mode/sql' -import 'brace/theme/sqlserver' -import 'brace/ext/searchbox' -import 'brace/ext/language_tools' +import * as ace from 'brace'; +import 'brace/mode/sql'; +import 'brace/theme/sqlserver'; +import 'brace/ext/searchbox'; +import 'brace/ext/language_tools'; -export default updateCompletions +export default updateCompletions; // There's stuff below that logs to console a lot // documentation on this autocompletion is light // and you may find it helpful to print some vars out during dev -const DEBUG_ON = false +const DEBUG_ON = false; function debug() { - if (DEBUG_ON) console.log.apply(null, arguments) + if (DEBUG_ON) console.log.apply(null, arguments); } /** @@ -26,11 +26,11 @@ function debug() { * @param {schemaInfoObject} schemaInfo */ function updateCompletions(schemaInfo) { - debug('updating completions') - debug(schemaInfo) + debug('updating completions'); + debug(schemaInfo); if (schemaInfo === null || schemaInfo === undefined) { - return + return; } // TODO make this more efficient and less confusing @@ -45,8 +45,8 @@ function updateCompletions(schemaInfo) { // for now we pre-assemble entire buckets of all schemas/tables/columns // these handle autocompletes with no dot // NOTE sqlpad is also firing autocomplete on every keypress instead of using live autocomplete - const schemaCompletions = [] - const tableCompletions = [] + const schemaCompletions = []; + const tableCompletions = []; // we also should create an index of dotted autocompletes. // given a precedingtoken as "sometable." or "someschema.table." we should be able to look up relevant completions @@ -58,7 +58,7 @@ function updateCompletions(schemaInfo) { schema: {}, // will contain tables table: {}, schemaTable: {} - } + }; Object.keys(schemaInfo).forEach(schema => { schemaCompletions.push({ @@ -66,16 +66,16 @@ function updateCompletions(schemaInfo) { value: schema, score: 0, meta: 'schema' - }) - const SCHEMA = schema.toUpperCase() - if (!matchMaps.schema[SCHEMA]) matchMaps.schema[SCHEMA] = [] + }); + const SCHEMA = schema.toUpperCase(); + if (!matchMaps.schema[SCHEMA]) matchMaps.schema[SCHEMA] = []; Object.keys(schemaInfo[schema]).forEach(table => { - const SCHEMA_TABLE = SCHEMA + '.' + table.toUpperCase() - const TABLE = table.toUpperCase() - if (!matchMaps.table[TABLE]) matchMaps.table[TABLE] = [] + const SCHEMA_TABLE = SCHEMA + '.' + table.toUpperCase(); + const TABLE = table.toUpperCase(); + if (!matchMaps.table[TABLE]) matchMaps.table[TABLE] = []; if (!matchMaps.schemaTable[SCHEMA_TABLE]) { - matchMaps.schemaTable[SCHEMA_TABLE] = [] + matchMaps.schemaTable[SCHEMA_TABLE] = []; } const tableCompletion = { name: table, @@ -83,11 +83,11 @@ function updateCompletions(schemaInfo) { score: 0, meta: 'table', schema - } - tableCompletions.push(tableCompletion) - matchMaps.schema[SCHEMA].push(tableCompletion) + }; + tableCompletions.push(tableCompletion); + matchMaps.schema[SCHEMA].push(tableCompletion); - const columns = schemaInfo[schema][table] + const columns = schemaInfo[schema][table]; columns.forEach(column => { const columnCompletion = { name: schema + table + column.column_name, @@ -96,14 +96,14 @@ function updateCompletions(schemaInfo) { meta: 'column', schema, table - } - matchMaps.table[TABLE].push(columnCompletion) - matchMaps.schemaTable[SCHEMA_TABLE].push(columnCompletion) - }) - }) - }) + }; + matchMaps.table[TABLE].push(columnCompletion); + matchMaps.schemaTable[SCHEMA_TABLE].push(columnCompletion); + }); + }); + }); - const tableWantedCompletions = schemaCompletions.concat(tableCompletions) + const tableWantedCompletions = schemaCompletions.concat(tableCompletions); const myCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { @@ -111,149 +111,149 @@ function updateCompletions(schemaInfo) { const allTokens = session .getValue() .split(/\s+/) - .map(t => t.toUpperCase()) - const relevantDottedMatches = {} + .map(t => t.toUpperCase()); + const relevantDottedMatches = {}; Object.keys(matchMaps.schemaTable).forEach(schemaTable => { if (allTokens.indexOf(schemaTable) >= 0) { relevantDottedMatches[schemaTable] = - matchMaps.schemaTable[schemaTable] + matchMaps.schemaTable[schemaTable]; // HACK - also add relevant matches for table only - const firstMatch = matchMaps.schemaTable[schemaTable][0] - const table = firstMatch.table.toUpperCase() - relevantDottedMatches[table] = matchMaps.table[table] + const firstMatch = matchMaps.schemaTable[schemaTable][0]; + const table = firstMatch.table.toUpperCase(); + relevantDottedMatches[table] = matchMaps.table[table]; } - }) + }); Object.keys(matchMaps.table).forEach(table => { if (allTokens.indexOf(table) >= 0) { - relevantDottedMatches[table] = matchMaps.table[table] + relevantDottedMatches[table] = matchMaps.table[table]; // HACK add schemaTable match for this table // we store schema at column match item, so look at first one and use that - const firstMatch = matchMaps.table[table][0] + const firstMatch = matchMaps.table[table][0]; const schemaTable = firstMatch.schema.toUpperCase() + '.' + - firstMatch.table.toUpperCase() - relevantDottedMatches[schemaTable] = matchMaps.table[table] + firstMatch.table.toUpperCase(); + relevantDottedMatches[schemaTable] = matchMaps.table[table]; } - }) - debug('matched found: ', Object.keys(relevantDottedMatches)) + }); + debug('matched found: ', Object.keys(relevantDottedMatches)); // complete for schema and tables already referenced, plus their columns - let matches = [] + let matches = []; Object.keys(relevantDottedMatches).forEach(key => { - matches = matches.concat(relevantDottedMatches[key]) - }) - const schemas = {} - const tables = {} - const wantedColumnCompletions = [] + matches = matches.concat(relevantDottedMatches[key]); + }); + const schemas = {}; + const tables = {}; + const wantedColumnCompletions = []; matches.forEach(match => { - if (match.schema) schemas[match.schema] = match.schema - if (match.table) tables[match.table] = match.schema - }) + if (match.schema) schemas[match.schema] = match.schema; + if (match.table) tables[match.table] = match.schema; + }); Object.keys(schemas).forEach(schema => { wantedColumnCompletions.push({ name: schema, value: schema, score: 0, meta: 'schema' - }) - }) + }); + }); Object.keys(tables).forEach(table => { const tableCompletion = { name: table, value: table, score: 0, meta: 'table' - } - wantedColumnCompletions.push(tableCompletion) - const SCHEMA = tables[table].toUpperCase() - if (!relevantDottedMatches[SCHEMA]) relevantDottedMatches[SCHEMA] = [] - relevantDottedMatches[SCHEMA].push(tableCompletion) - }) + }; + wantedColumnCompletions.push(tableCompletion); + const SCHEMA = tables[table].toUpperCase(); + if (!relevantDottedMatches[SCHEMA]) relevantDottedMatches[SCHEMA] = []; + relevantDottedMatches[SCHEMA].push(tableCompletion); + }); // get tokens leading up to the cursor to figure out context // depending on where we are we either want tables or we want columns - const tableWantedKeywords = ['FROM', 'JOIN'] - const columnWantedKeywords = ['SELECT', 'WHERE', 'GROUP', 'HAVING', 'ON'] + const tableWantedKeywords = ['FROM', 'JOIN']; + const columnWantedKeywords = ['SELECT', 'WHERE', 'GROUP', 'HAVING', 'ON']; // find out what is wanted // first look at the current line before cursor, then rest of lines beforehand - let wanted = '' - const currentRow = pos.row + let wanted = ''; + const currentRow = pos.row; for (let r = currentRow; r >= 0; r--) { - let line = session.getDocument().getLine(r) - let lineTokens + let line = session.getDocument().getLine(r); + let lineTokens; // if dealing with current row only use stuff before cursor if (r === currentRow) { - line = line.slice(0, pos.column) + line = line.slice(0, pos.column); } - lineTokens = line.split(/\s+/).map(t => t.toUpperCase()) + lineTokens = line.split(/\s+/).map(t => t.toUpperCase()); for (let i = lineTokens.length - 1; i >= 0; i--) { - const token = lineTokens[i] + const token = lineTokens[i]; if (columnWantedKeywords.indexOf(token) >= 0) { - debug('WANT COLUMN BECAUSE FOUND: ', token) - wanted = 'COLUMN' - r = 0 - break + debug('WANT COLUMN BECAUSE FOUND: ', token); + wanted = 'COLUMN'; + r = 0; + break; } if (tableWantedKeywords.indexOf(token) >= 0) { - debug('WANT TABLE BECAUSE FOUND: ', token) - wanted = 'TABLE' - r = 0 - break + debug('WANT TABLE BECAUSE FOUND: ', token); + wanted = 'TABLE'; + r = 0; + break; } } } - debug('WANTED: ', wanted) + debug('WANTED: ', wanted); - const currentLine = session.getDocument().getLine(pos.row) + const currentLine = session.getDocument().getLine(pos.row); const currentTokens = currentLine .slice(0, pos.column) .split(/\s+/) - .map(t => t.toUpperCase()) - const precedingCharacter = currentLine.slice(pos.column - 1, pos.column) - const precedingToken = currentTokens[currentTokens.length - 1] + .map(t => t.toUpperCase()); + const precedingCharacter = currentLine.slice(pos.column - 1, pos.column); + const precedingToken = currentTokens[currentTokens.length - 1]; // if preceding token has a . try to provide completions based on that object - debug('PREFIX: "%s"', prefix) - debug('PRECEDING CHAR: "%s"', precedingCharacter) - debug('PRECEDING TOKEN: "%s"', precedingToken) + debug('PREFIX: "%s"', prefix); + debug('PRECEDING CHAR: "%s"', precedingCharacter); + debug('PRECEDING TOKEN: "%s"', precedingToken); if (precedingToken.indexOf('.') >= 0) { - let dotTokens = precedingToken.split('.') - dotTokens.pop() - const DOT_MATCH = dotTokens.join('.').toUpperCase() + let dotTokens = precedingToken.split('.'); + dotTokens.pop(); + const DOT_MATCH = dotTokens.join('.').toUpperCase(); debug( 'Completing for "%s" even though we got "%s"', DOT_MATCH, precedingToken - ) + ); if (wanted === 'TABLE') { // if we're in a table place, a completion should only be for tables, not columns - return callback(null, matchMaps.schema[DOT_MATCH]) + return callback(null, matchMaps.schema[DOT_MATCH]); } if (wanted === 'COLUMN') { // here we should see show matches for only the tables mentioned in query - return callback(null, relevantDottedMatches[DOT_MATCH]) + return callback(null, relevantDottedMatches[DOT_MATCH]); } } // if we are not dealing with a . match show all relevant objects if (wanted === 'TABLE') { - return callback(null, tableWantedCompletions) + return callback(null, tableWantedCompletions); } if (wanted === 'COLUMN') { // TODO also include alias? - return callback(null, matches.concat(wantedColumnCompletions)) + return callback(null, matches.concat(wantedColumnCompletions)); } // No keywords found? User probably wants some keywords - callback(null, null) + callback(null, null); } - } + }; ace.acequire(['ace/ext/language_tools'], langTools => { - langTools.setCompleters([myCompleter]) + langTools.setCompleters([myCompleter]); // Note - later on might be able to set a completer for specific editor like: // editor.completers = [staticWordCompleter] - }) + }); } diff --git a/package.json b/package.json index 6e727588a..42daaf0e8 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "prettier": "^1.16.4" }, "prettier": { - "semi": false, "singleQuote": true }, "husky": { diff --git a/server/app.js b/server/app.js index 8c87d6898..4b30dc5f5 100644 --- a/server/app.js +++ b/server/app.js @@ -1,13 +1,13 @@ -const fs = require('fs') -const path = require('path') -const crypto = require('crypto') -const express = require('express') -const helmet = require('helmet') -const session = require('express-session') -const FileStore = require('session-file-store')(session) -const configUtil = require('./lib/config') -const version = require('./lib/version') -const db = require('./lib/db') +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const express = require('express'); +const helmet = require('helmet'); +const session = require('express-session'); +const FileStore = require('session-file-store')(session); +const configUtil = require('./lib/config'); +const version = require('./lib/version'); +const db = require('./lib/db'); const { baseUrl, googleClientId, @@ -15,53 +15,53 @@ const { publicUrl, dbPath, debug -} = configUtil.getPreDbConfig() +} = configUtil.getPreDbConfig(); // Cookie secrets are generated randomly at server start // SQLPad (currently) is designed for running as a single instance // so this should be okay unless SQLPad is frequently restarting const cookieSecrets = debug ? 'devmode' - : [1, 2, 3, 4].map(n => crypto.randomBytes(64).toString('hex')) + : [1, 2, 3, 4].map(n => crypto.randomBytes(64).toString('hex')); -const ONE_HOUR_MS = 1000 * 60 * 60 +const ONE_HOUR_MS = 1000 * 60 * 60; if (!debug) { // Note actual checks will only happen if not disabled via config - version.scheduleUpdateChecks() + version.scheduleUpdateChecks(); } /* Express setup ============================================================================= */ -const bodyParser = require('body-parser') -const favicon = require('serve-favicon') -const morgan = require('morgan') -const passport = require('passport') -const errorhandler = require('errorhandler') +const bodyParser = require('body-parser'); +const favicon = require('serve-favicon'); +const morgan = require('morgan'); +const passport = require('passport'); +const errorhandler = require('errorhandler'); -const app = express() +const app = express(); // Default helmet protections, minus frameguard (becaue of sqlpad iframe embed), adding referrerPolicy -app.use(helmet.dnsPrefetchControl()) -app.use(helmet.hidePoweredBy()) -app.use(helmet.hsts({})) -app.use(helmet.ieNoOpen()) -app.use(helmet.noSniff()) -app.use(helmet.xssFilter()) -app.use(helmet.referrerPolicy({ policy: 'same-origin' })) +app.use(helmet.dnsPrefetchControl()); +app.use(helmet.hidePoweredBy()); +app.use(helmet.hsts({})); +app.use(helmet.ieNoOpen()); +app.use(helmet.noSniff()); +app.use(helmet.xssFilter()); +app.use(helmet.referrerPolicy({ policy: 'same-origin' })); -app.set('env', debug ? 'development' : 'production') +app.set('env', debug ? 'development' : 'production'); if (debug) { - app.use(errorhandler()) + app.use(errorhandler()); } -app.use(favicon(path.join(__dirname, '/public/favicon.ico'))) -app.use(bodyParser.json()) +app.use(favicon(path.join(__dirname, '/public/favicon.ico'))); +app.use(bodyParser.json()); app.use( bodyParser.urlencoded({ extended: true }) -) +); app.use( session({ @@ -74,13 +74,13 @@ app.use( cookie: { maxAge: ONE_HOUR_MS }, secret: cookieSecrets }) -) +); -app.use(passport.initialize()) -app.use(passport.session()) -app.use(baseUrl, express.static(path.join(__dirname, 'public'))) +app.use(passport.initialize()); +app.use(passport.session()); +app.use(baseUrl, express.static(path.join(__dirname, 'public'))); if (debug) { - app.use(morgan('dev')) + app.use(morgan('dev')); } // Add config helper to req @@ -88,18 +88,18 @@ app.use(function(req, res, next) { configUtil .getHelper(db) .then(config => { - req.config = config - next() + req.config = config; + next(); }) .catch(error => { - console.error('Error getting config helper', error) - next(error) - }) -}) + console.error('Error getting config helper', error); + next(error); + }); +}); /* Passport setup ============================================================================= */ -require('./middleware/passport.js') +require('./middleware/passport.js'); /* Routes ============================================================================= */ @@ -119,53 +119,53 @@ const routers = [ require('./routes/config-values.js'), require('./routes/tags.js'), require('./routes/signup-signin-signout.js') -] +]; if (googleClientId && googleClientSecret && publicUrl) { if (debug) { - console.log('Enabling Google authentication Strategy.') + console.log('Enabling Google authentication Strategy.'); } - routers.push(require('./routes/oauth.js')) + routers.push(require('./routes/oauth.js')); } // Add all core routes to the baseUrl except for the */api/app route routers.forEach(function(router) { - app.use(baseUrl, router) -}) + app.use(baseUrl, router); +}); // Add '*/api/app' route last and without baseUrl -app.use(require('./routes/app.js')) +app.use(require('./routes/app.js')); // For any missing api route, return a 404 // NOTE - this cannot be a general catch-all because it might be a valid non-api route from a front-end perspective app.use(baseUrl + '/api/', function(req, res) { - console.log('reached catch all api route') - res.sendStatus(404) -}) + console.log('reached catch all api route'); + res.sendStatus(404); +}); // Anything else should render the client-side app // Client-side routing will take care of things from here // Because index.html will be served via static plugin, // we need to rename it to something else and switch out the URLs to consider the baseUrl -const indexPath = path.join(__dirname, 'public/index.html') -const indexTemplatePath = path.join(__dirname, 'public/index-template.html') +const indexPath = path.join(__dirname, 'public/index.html'); +const indexTemplatePath = path.join(__dirname, 'public/index-template.html'); if (fs.existsSync(indexPath)) { - fs.renameSync(indexPath, indexTemplatePath) + fs.renameSync(indexPath, indexTemplatePath); } if (fs.existsSync(indexTemplatePath)) { - const html = fs.readFileSync(indexTemplatePath, 'utf8') + const html = fs.readFileSync(indexTemplatePath, 'utf8'); const baseUrlHtml = html .replace(/="\/stylesheets/g, `="${baseUrl}/stylesheets`) .replace(/="\/javascripts/g, `="${baseUrl}/javascripts`) .replace(/="\/images/g, `="${baseUrl}/images`) .replace(/="\/fonts/g, `="${baseUrl}/fonts`) - .replace(/="\/static/g, `="${baseUrl}/static`) - app.use((req, res) => res.send(baseUrlHtml)) + .replace(/="\/static/g, `="${baseUrl}/static`); + app.use((req, res) => res.send(baseUrlHtml)); } else { - console.error('\nNO FRONT END TEMPLATE DETECTED') - console.error('If not running in dev mode please report this issue.\n') + console.error('\nNO FRONT END TEMPLATE DETECTED'); + console.error('If not running in dev mode please report this issue.\n'); } -module.exports = app +module.exports = app; diff --git a/server/drivers/cassandra/index.js b/server/drivers/cassandra/index.js index 985425f17..a170f9e82 100644 --- a/server/drivers/cassandra/index.js +++ b/server/drivers/cassandra/index.js @@ -1,8 +1,8 @@ -const cassandra = require('cassandra-driver') -const { formatSchemaQueryResults } = require('../utils') +const cassandra = require('cassandra-driver'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'cassandra' -const name = 'Cassandra' +const id = 'cassandra'; +const name = 'Cassandra'; const fields = [ { @@ -15,7 +15,7 @@ const fields = [ formType: 'TEXT', label: 'Keyspace' } -] +]; const SCHEMA_SQL = ` SELECT @@ -25,7 +25,7 @@ const SCHEMA_SQL = ` type AS data_type FROM system_schema.columns; -` +`; /** * Cassandra client needs to be shut down for either success or failure @@ -36,7 +36,7 @@ function shutdownClient(client) { .shutdown() .catch(error => console.error('Error shutting down cassandra connection', error) - ) + ); } /** @@ -46,24 +46,24 @@ function shutdownClient(client) { * @param {object} connection */ function runQuery(query, connection) { - const { contactPoints, keyspace, maxRows } = connection + const { contactPoints, keyspace, maxRows } = connection; const client = new cassandra.Client({ contactPoints: contactPoints.split(',').map(cp => cp.trim()), keyspace - }) + }); return client .execute(query, [], { fetchSize: maxRows }) .then(result => { - shutdownClient(client) - const incomplete = result.rows && result.rows.length === maxRows - return { rows: result.rows, incomplete } + shutdownClient(client); + const incomplete = result.rows && result.rows.length === maxRows; + return { rows: result.rows, incomplete }; }) .catch(error => { - shutdownClient(client) - throw error - }) + shutdownClient(client); + throw error; + }); } /** @@ -71,8 +71,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = 'select * from system.local;' - return runQuery(query, connection) + const query = 'select * from system.local;'; + return runQuery(query, connection); } /** @@ -81,10 +81,10 @@ function testConnection(connection) { * @param {*} connection */ function getSchema(connection) { - connection.maxRows = 1000000 + connection.maxRows = 1000000; return runQuery(SCHEMA_SQL, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } module.exports = { @@ -94,4 +94,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/cassandra/test.js b/server/drivers/cassandra/test.js index 8eb53e116..ca51f0941 100644 --- a/server/drivers/cassandra/test.js +++ b/server/drivers/cassandra/test.js @@ -1,11 +1,11 @@ -const assert = require('assert') -const cassandra = require('./index.js') +const assert = require('assert'); +const cassandra = require('./index.js'); const connection = { name: 'test cassandra', driver: 'cassandra', contactPoints: 'localhost' -} +}; const initSqls = [ `DROP KEYSPACE IF EXISTS test;`, @@ -14,66 +14,66 @@ const initSqls = [ `INSERT INTO test.test (id, name) VALUES (1, 'one');`, `INSERT INTO test.test (id, name) VALUES (2, 'two');`, `INSERT INTO test.test (id, name) VALUES (3, 'three');` -] +]; describe('drivers/cassandra', function() { before(function() { - this.timeout(10000) - let seq = Promise.resolve() + this.timeout(10000); + let seq = Promise.resolve(); initSqls.forEach(sql => { - seq = seq.then(() => cassandra.runQuery(sql, connection)) - }) - return seq - }) + seq = seq.then(() => cassandra.runQuery(sql, connection)); + }); + return seq; + }); it('tests connection', function() { - return cassandra.testConnection(connection) - }) + return cassandra.testConnection(connection); + }); it('getSchema()', function() { return cassandra.getSchema(connection).then(schemaInfo => { - assert(schemaInfo) - assert(schemaInfo.test, 'test') - assert(schemaInfo.test.test, 'test.test') - const columns = schemaInfo.test.test - assert.equal(columns.length, 2, 'columns.length') - assert.equal(columns[0].table_schema, 'test', 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') - assert.equal(columns[0].column_name, 'id', 'column_name') - assert(columns[0].hasOwnProperty('data_type'), 'data_type') - }) - }) + assert(schemaInfo); + assert(schemaInfo.test, 'test'); + assert(schemaInfo.test.test, 'test.test'); + const columns = schemaInfo.test.test; + assert.equal(columns.length, 2, 'columns.length'); + assert.equal(columns[0].table_schema, 'test', 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); + assert.equal(columns[0].column_name, 'id', 'column_name'); + assert(columns[0].hasOwnProperty('data_type'), 'data_type'); + }); + }); it('runQuery under limit', function() { return cassandra .runQuery('SELECT id FROM test.test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'rows length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }) + const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); return cassandra .runQuery('SELECT * FROM test.test;', limitedConnection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); it('returns descriptive error message', function() { - let error + let error; return cassandra .runQuery('SELECT * FROM test.missing_table;', connection) .catch(e => { - error = e + error = e; }) .then(() => { - assert(error) - assert(error.toString().indexOf('missing_table') > -1) - }) - }) -}) + assert(error); + assert(error.toString().indexOf('missing_table') > -1); + }); + }); +}); diff --git a/server/drivers/crate/index.js b/server/drivers/crate/index.js index cfc89db8c..4f6ab8e2d 100644 --- a/server/drivers/crate/index.js +++ b/server/drivers/crate/index.js @@ -1,12 +1,12 @@ -const crate = require('node-crate') -const { formatSchemaQueryResults } = require('../utils') +const crate = require('node-crate'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'crate' -const name = 'Crate' +const id = 'crate'; +const name = 'Crate'; // NOTE per crate docs: If a client using the HTTP or Transport protocol is used a default limit of 10000 is implicitly added. // node-crate uses the REST API, so it is assumed this is a limit -const CRATE_LIMIT = 10000 +const CRATE_LIMIT = 10000; // old crate called table_schema schema_name const SCHEMA_SQL_V0 = ` @@ -21,7 +21,7 @@ const SCHEMA_SQL_V0 = ` tables.schema_name not in ('information_schema') and columns.schema_name = tables.schema_name and columns.table_name = tables.table_name -` +`; const SCHEMA_SQL_V1 = ` select @@ -35,7 +35,7 @@ const SCHEMA_SQL_V1 = ` tables.table_schema not in ('information_schema') and columns.table_schema = tables.table_schema and columns.table_name = tables.table_name -` +`; /** * Run query for connection @@ -44,13 +44,13 @@ const SCHEMA_SQL_V1 = ` * @param {object} connection */ function runQuery(query, connection) { - const { maxRows } = connection - const limit = maxRows < CRATE_LIMIT ? maxRows : CRATE_LIMIT + const { maxRows } = connection; + const limit = maxRows < CRATE_LIMIT ? maxRows : CRATE_LIMIT; if (connection.port) { - crate.connect(connection.host, connection.port) + crate.connect(connection.host, connection.port); } else { - crate.connect(connection.host) + crate.connect(connection.host); } return crate @@ -59,18 +59,18 @@ function runQuery(query, connection) { const results = { rows: res.json, incomplete: false - } + }; if (results.rows.length >= limit) { - results.incomplete = true - results.rows = results.rows.slice(0, limit) + results.incomplete = true; + results.rows = results.rows.slice(0, limit); } - return results + return results; }) .catch(err => { - throw new Error(err.message) - }) + throw new Error(err.message); + }); } /** @@ -78,8 +78,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = 'SELECT name from sys.cluster' - return runQuery(query, connection) + const query = 'SELECT name from sys.cluster'; + return runQuery(query, connection); } /** @@ -96,7 +96,7 @@ function getSchema(connection) { runQuery(SCHEMA_SQL_V0, connection).then(queryResult => formatSchemaQueryResults(queryResult) ) - ) + ); } const fields = [ @@ -110,7 +110,7 @@ const fields = [ formType: 'TEXT', label: 'Port (optional)' } -] +]; module.exports = { id, @@ -119,4 +119,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/crate/test.js b/server/drivers/crate/test.js index 776ee8688..e089d97aa 100644 --- a/server/drivers/crate/test.js +++ b/server/drivers/crate/test.js @@ -1,20 +1,20 @@ -const assert = require('assert') -const crate = require('./index.js') +const assert = require('assert'); +const crate = require('./index.js'); const connection = { name: 'test crate', driver: 'crate', host: 'localhost', port: '4200' -} +}; -const dropTable = 'DROP TABLE IF EXISTS test;' -const createTable = 'CREATE TABLE test (id int);' -const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);' +const dropTable = 'DROP TABLE IF EXISTS test;'; +const createTable = 'CREATE TABLE test (id int);'; +const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);'; describe('drivers/crate', function() { before(function() { - this.timeout(10000) + this.timeout(10000); return ( crate .runQuery(dropTable, connection) @@ -22,55 +22,55 @@ describe('drivers/crate', function() { .then(() => crate.runQuery(inserts, connection)) // Crate has to wait before data is available? .then(() => new Promise(resolve => setTimeout(resolve, 5000))) - ) - }) + ); + }); it('tests connection', function() { - return crate.testConnection(connection) - }) + return crate.testConnection(connection); + }); it('getSchema()', function() { return crate.getSchema(connection).then(schemaInfo => { - assert(schemaInfo.doc, 'doc') - assert(schemaInfo.doc.test, 'doc.test') - const columns = schemaInfo.doc.test - assert.equal(columns.length, 1, 'columns.length') - assert.equal(columns[0].table_schema, 'doc', 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') - assert.equal(columns[0].column_name, 'id', 'column_name') - assert(columns[0].hasOwnProperty('data_type'), 'data_type') - }) - }) + assert(schemaInfo.doc, 'doc'); + assert(schemaInfo.doc.test, 'doc.test'); + const columns = schemaInfo.doc.test; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, 'doc', 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); + assert.equal(columns[0].column_name, 'id', 'column_name'); + assert(columns[0].hasOwnProperty('data_type'), 'data_type'); + }); + }); it('runQuery under limit', function() { return crate .runQuery('SELECT id FROM test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'rows length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }) + const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); return crate .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); it('returns descriptive error message', function() { - let error + let error; return crate .runQuery('SELECT * FROM missing_table;', connection) .catch(e => { - error = e + error = e; }) .then(() => { - assert(error) - assert(error.toString().indexOf('missing_table') > -1) - }) - }) -}) + assert(error); + assert(error.toString().indexOf('missing_table') > -1); + }); + }); +}); diff --git a/server/drivers/drill/drill.js b/server/drivers/drill/drill.js index 8f59f2291..c5ba54825 100644 --- a/server/drivers/drill/drill.js +++ b/server/drivers/drill/drill.js @@ -1,21 +1,21 @@ -const fetch = require('node-fetch') -var request = require('request') -var url = require('url') +const fetch = require('node-fetch'); +var request = require('request'); +var url = require('url'); -exports.version = '1.0' +exports.version = '1.0'; var Client = (exports.Client = function(args) { - if (!args) args = {} + if (!args) args = {}; - this.host = args.host || 'localhost' - this.port = args.port || 8047 - this.user = args.user || process.env.USER - this.ssl = args.ssl || false - this.protocol = 'http' + this.host = args.host || 'localhost'; + this.port = args.port || 8047; + this.user = args.user || process.env.USER; + this.ssl = args.ssl || false; + this.protocol = 'http'; if (this.ssl) { - this.protocol = 'https' + this.protocol = 'https'; } -}) +}); Client.prototype.execute = function(queryString, callback) { const href = url.format({ @@ -23,57 +23,57 @@ Client.prototype.execute = function(queryString, callback) { hostname: 'localhost', pathname: '/query.json', port: 8047 - }) + }); let headers = { 'Content-Type': 'application/json; charset=UTF-8', 'User-Name': this.user, Accept: 'application/json' - } + }; let queryOptions = { uri: href, method: 'POST', headers: headers, json: { queryType: 'SQL', query: queryString } - } + }; request(queryOptions, function(error, response, body) { if (!error && response.statusCode === 200) { - callback(null, body) + callback(null, body); } //TODO Add error handling - }) -} + }); +}; Client.prototype.getSchemata = function() { - return this.query('SHOW DATABASES') -} + return this.query('SHOW DATABASES'); +}; Client.prototype.query = function(config, query) { const headers = { 'Content-Type': 'application/json; charset=UTF-8', Accept: 'application/json' - } + }; const restURL = - this.protocol + '://' + this.host + ':' + this.port + '/query.json' + this.protocol + '://' + this.host + ':' + this.port + '/query.json'; const queryInfo = { queryType: 'SQL', query: query - } - const body = JSON.stringify(queryInfo) + }; + const body = JSON.stringify(queryInfo); return fetch(restURL, { method: 'POST', headers: headers, body: body }) .then(function(data) { - return data.json() + return data.json(); }) .then(function(jsonData) { - return jsonData + return jsonData; }) .catch(function(e) { //TODO Send error message to JSON - console.log('There was a problem with the request' + e) - return e - }) -} + console.log('There was a problem with the request' + e); + return e; + }); +}; -module.exports = { Client } +module.exports = { Client }; diff --git a/server/drivers/drill/index.js b/server/drivers/drill/index.js index 7b48ed5bb..566ce03db 100644 --- a/server/drivers/drill/index.js +++ b/server/drivers/drill/index.js @@ -1,11 +1,11 @@ -const drill = require('./drill.js') -const { formatSchemaQueryResults } = require('../utils') +const drill = require('./drill.js'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'drill' -const name = 'Apache Drill' +const id = 'drill'; +const name = 'Apache Drill'; function getDrillSchemaSql(catalog, schema) { - const schemaSql = schema ? `AND table_schema = '${schema}'` : '' + const schemaSql = schema ? `AND table_schema = '${schema}'` : ''; return ` SELECT c.table_schema, @@ -21,7 +21,7 @@ function getDrillSchemaSql(catalog, schema) { c.table_schema, c.table_name, c.ordinal_position - ` + `; } /** @@ -32,8 +32,8 @@ function getDrillSchemaSql(catalog, schema) { */ function runQuery(query, connection) { - let incomplete = false - const rows = [] + let incomplete = false; + const rows = []; const drillConfig = { host: connection.host, @@ -42,30 +42,30 @@ function runQuery(query, connection) { password: connection.password, defaultSchema: connection.drillDefaultSchema, ssl: connection.ssl || false - } - const client = new drill.Client(drillConfig) + }; + const client = new drill.Client(drillConfig); return client.query(drillConfig, query).then(result => { if (!result) { - throw new Error('No result returned') + throw new Error('No result returned'); } else if (result.errorMessage && result.errorMessage.length > 0) { - console.log('Error with query: ' + query) - console.log(result.errorMessage) - throw new Error(result.errorMessage.split('\n')[0]) + console.log('Error with query: ' + query); + console.log(result.errorMessage); + throw new Error(result.errorMessage.split('\n')[0]); } if (result.length > connection.maxRows) { - incomplete = true - result['rows'] = result['rows'].slice(0, connection.maxRows) + incomplete = true; + result['rows'] = result['rows'].slice(0, connection.maxRows); } for (let r = 0; r < result['rows'].length; r++) { - const row = {} + const row = {}; for (let c = 0; c < result['columns'].length; c++) { - row[result['columns'][c]] = result['rows'][r][result['columns'][c]] + row[result['columns'][c]] = result['rows'][r][result['columns'][c]]; } - rows.push(row) + rows.push(row); } - return { rows, incomplete } - }) + return { rows, incomplete }; + }); } /** @@ -73,8 +73,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = "SELECT 'success' FROM (VALUES(1))" - return runQuery(query, connection) + const query = "SELECT 'success' FROM (VALUES(1))"; + return runQuery(query, connection); } /** @@ -85,10 +85,10 @@ function getSchema(connection) { const schemaSql = getDrillSchemaSql( connection.drillCatalog //connection.drillSchema - ) + ); return runQuery(schemaSql, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -122,7 +122,7 @@ const fields = [ formType: 'CHECKBOX', label: 'Use SSL to connect to Drill' } -] +]; module.exports = { id, @@ -131,4 +131,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/hdb/index.js b/server/drivers/hdb/index.js index 1cd2380e6..bb97f407d 100644 --- a/server/drivers/hdb/index.js +++ b/server/drivers/hdb/index.js @@ -1,11 +1,11 @@ -const hdb = require('hdb') -const { formatSchemaQueryResults } = require('../utils') +const hdb = require('hdb'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'hdb' -const name = 'SAP HANA' +const id = 'hdb'; +const name = 'SAP HANA'; function getSchemaSql(schema) { - const whereSql = schema ? `WHERE tables.SCHEMA_NAME = '${schema}'` : '' + const whereSql = schema ? `WHERE tables.SCHEMA_NAME = '${schema}'` : ''; return ` SELECT columns.SCHEMA_NAME as table_schema, @@ -18,7 +18,7 @@ function getSchemaSql(schema) { ${whereSql} ORDER BY columns.POSITION - ` + `; } /** @@ -28,7 +28,7 @@ function getSchemaSql(schema) { * @param {object} connection */ function runQuery(query, connection) { - const incomplete = false + const incomplete = false; return new Promise((resolve, reject) => { const client = hdb.createClient({ @@ -38,59 +38,59 @@ function runQuery(query, connection) { user: connection.username, password: connection.password, schema: connection.hanaSchema - }) + }); client.on('error', err => { - console.error('Network connection error', err) - return reject(err) - }) + console.error('Network connection error', err); + return reject(err); + }); client.connect(err => { if (err) { - console.error('Connect error', err) - return reject(err) + console.error('Connect error', err); + return reject(err); } return client.execute(query, function(err, rs) { - let rows = [] + let rows = []; if (err) { - client.disconnect() - return reject(err) + client.disconnect(); + return reject(err); } if (!rs) { - client.disconnect() - return resolve({ rows, incomplete }) + client.disconnect(); + return resolve({ rows, incomplete }); } if (!rs.createObjectStream) { // Could be row count or something - client.disconnect() - return resolve({ rows: [{ result: rs }], incomplete }) + client.disconnect(); + return resolve({ rows: [{ result: rs }], incomplete }); } - const stream = rs.createObjectStream() + const stream = rs.createObjectStream(); stream.on('data', data => { if (rows.length < connection.maxRows) { - return rows.push(data) + return rows.push(data); } - client.disconnect() - return resolve({ rows, incomplete: true }) - }) + client.disconnect(); + return resolve({ rows, incomplete: true }); + }); stream.on('error', error => { - client.disconnect() - return reject(error) - }) + client.disconnect(); + return reject(error); + }); stream.on('finish', () => { - client.disconnect() - return resolve({ rows, incomplete }) - }) - }) - }) - }) + client.disconnect(); + return resolve({ rows, incomplete }); + }); + }); + }); + }); } /** @@ -98,8 +98,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = 'select * from DUMMY' - return runQuery(query, connection) + const query = 'select * from DUMMY'; + return runQuery(query, connection); } /** @@ -107,10 +107,10 @@ function testConnection(connection) { * @param {*} connection */ function getSchema(connection) { - const schemaSql = getSchemaSql(connection.hanaSchema) + const schemaSql = getSchemaSql(connection.hanaSchema); return runQuery(schemaSql, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -144,7 +144,7 @@ const fields = [ formType: 'TEXT', label: 'Schema (optional)' } -] +]; module.exports = { id, @@ -153,4 +153,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/hdb/test.js b/server/drivers/hdb/test.js index 50228b2e2..f5cd68db2 100644 --- a/server/drivers/hdb/test.js +++ b/server/drivers/hdb/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const hdb = require('./index.js') +const assert = require('assert'); +const hdb = require('./index.js'); const connection = { name: 'test hdb (SAP HANA)', @@ -11,75 +11,75 @@ const connection = { password: 'SQLPad1!', hanaSchema: 'SYSTEM', maxRows: 50000 -} +}; const initSqls = [ 'CREATE TABLE test ( ID INTEGER );', 'INSERT INTO test VALUES (1);', 'INSERT INTO test VALUES (2);', 'INSERT INTO test VALUES (3);' -] +]; describe('drivers/hdb', function() { before(function() { - this.timeout(10000) + this.timeout(10000); let seq = hdb.runQuery('DROP TABLE test;', connection).catch(error => { // ignore error - table might not exist - }) + }); initSqls.forEach(sql => { - seq = seq.then(() => hdb.runQuery(sql, connection)) - }) - return seq - }) + seq = seq.then(() => hdb.runQuery(sql, connection)); + }); + return seq; + }); it('tests connection', function() { - return hdb.testConnection(connection) - }) + return hdb.testConnection(connection); + }); it('getSchema()', function() { return hdb.getSchema(connection).then(schemaInfo => { - assert(schemaInfo.SYSTEM, 'SYSTEM') - assert(schemaInfo.SYSTEM.TEST, 'SYSTEM.TEST') - const columns = schemaInfo.SYSTEM.TEST - assert.equal(columns.length, 1, 'columns.length') - assert.equal(columns[0].table_schema, 'SYSTEM', 'table_schema') - assert.equal(columns[0].table_name, 'TEST', 'table_name') - assert.equal(columns[0].column_name, 'ID', 'column_name') - assert(columns[0].hasOwnProperty('data_type'), 'data_type') - }) - }) + assert(schemaInfo.SYSTEM, 'SYSTEM'); + assert(schemaInfo.SYSTEM.TEST, 'SYSTEM.TEST'); + const columns = schemaInfo.SYSTEM.TEST; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, 'SYSTEM', 'table_schema'); + assert.equal(columns[0].table_name, 'TEST', 'table_name'); + assert.equal(columns[0].column_name, 'ID', 'column_name'); + assert(columns[0].hasOwnProperty('data_type'), 'data_type'); + }); + }); it('runQuery under limit', function() { return hdb .runQuery('SELECT id FROM test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'rows length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }) + const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); return hdb .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); it('returns descriptive error message', function() { - let error + let error; // NOTE: SAP HANA turns things into ALL CAPS return hdb .runQuery('SELECT * FROM MISSING_TABLE;', connection) .catch(e => { - error = e + error = e; }) .then(() => { - assert(error) - assert(error.toString().indexOf('MISSING_TABLE') > -1) - }) - }) -}) + assert(error); + assert(error.toString().indexOf('MISSING_TABLE') > -1); + }); + }); +}); diff --git a/server/drivers/index.js b/server/drivers/index.js index c8ad465cf..ce8114bbc 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -1,9 +1,9 @@ -const uuid = require('uuid') -const { debug } = require('../lib/config').getPreDbConfig() -const utils = require('./utils') -const getMeta = require('../lib/getMeta') +const uuid = require('uuid'); +const { debug } = require('../lib/config').getPreDbConfig(); +const utils = require('./utils'); +const getMeta = require('../lib/getMeta'); -const drivers = {} +const drivers = {}; /** * Validate that the driver implementation has a function by name provided @@ -13,8 +13,8 @@ const drivers = {} */ function validateFunction(path, driver, functionName) { if (typeof driver[functionName] !== 'function') { - console.error(`${path} missing .${functionName}() implementation`) - process.exit(1) + console.error(`${path} missing .${functionName}() implementation`); + process.exit(1); } } @@ -25,10 +25,10 @@ function validateFunction(path, driver, functionName) { * @param {string} arrayName */ function validateArray(path, driver, arrayName) { - const arr = driver[arrayName] + const arr = driver[arrayName]; if (!Array.isArray(arr)) { - console.error(`${path} missing ${arrayName} array`) - process.exit(1) + console.error(`${path} missing ${arrayName} array`); + process.exit(1); } } @@ -38,65 +38,65 @@ function validateArray(path, driver, arrayName) { * @param {string} path */ function requireValidate(path, optional = false) { - let driver + let driver; try { - driver = require(path) + driver = require(path); } catch (er) { if (optional) { - console.log('optional driver ' + path + ' not available') - return + console.log('optional driver ' + path + ' not available'); + return; } else { // rethrow - throw er + throw er; } } if (!driver.id) { - console.error(`${path} must export a unique id`) - process.exit(1) + console.error(`${path} must export a unique id`); + process.exit(1); } if (!driver.name) { - console.error(`${path} must export a name`) - process.exit(1) + console.error(`${path} must export a name`); + process.exit(1); } if (drivers[driver.id]) { - console.error(`Driver with id ${driver.id} already loaded`) - console.error(`Ensure ${path} has a unique id exported`) - process.exit(1) + console.error(`Driver with id ${driver.id} already loaded`); + console.error(`Ensure ${path} has a unique id exported`); + process.exit(1); } - validateFunction(path, driver, 'getSchema') - validateFunction(path, driver, 'runQuery') - validateFunction(path, driver, 'testConnection') - validateArray(path, driver, 'fields') + validateFunction(path, driver, 'getSchema'); + validateFunction(path, driver, 'runQuery'); + validateFunction(path, driver, 'testConnection'); + validateArray(path, driver, 'fields'); - driver.fieldsByKey = {} + driver.fieldsByKey = {}; driver.fields.forEach(field => { - driver.fieldsByKey[field.key] = field - }) + driver.fieldsByKey[field.key] = field; + }); - drivers[driver.id] = driver + drivers[driver.id] = driver; } // Loads and validates drivers // Will populate drivers {} map -requireValidate('../drivers/crate') -requireValidate('../drivers/drill') -requireValidate('../drivers/hdb') -requireValidate('../drivers/mysql') -requireValidate('../drivers/postgres') -requireValidate('../drivers/presto') -requireValidate('../drivers/sqlserver') -requireValidate('../drivers/unixodbc', true) -requireValidate('../drivers/vertica') -requireValidate('../drivers/cassandra') +requireValidate('../drivers/crate'); +requireValidate('../drivers/drill'); +requireValidate('../drivers/hdb'); +requireValidate('../drivers/mysql'); +requireValidate('../drivers/postgres'); +requireValidate('../drivers/presto'); +requireValidate('../drivers/sqlserver'); +requireValidate('../drivers/unixodbc', true); +requireValidate('../drivers/vertica'); +requireValidate('../drivers/cassandra'); if (debug || process.env.SQLPAD_TEST === 'true') { - requireValidate('../drivers/mock') + requireValidate('../drivers/mock'); } /** @@ -107,7 +107,7 @@ if (debug || process.env.SQLPAD_TEST === 'true') { * @returns {Promise} */ function runQuery(query, connection, user) { - const driver = drivers[connection.driver] + const driver = drivers[connection.driver]; const queryResult = { id: uuid.v4(), @@ -119,25 +119,25 @@ function runQuery(query, connection, user) { incomplete: false, meta: {}, rows: [] - } + }; return driver.runQuery(query, connection).then(results => { - const { rows, incomplete } = results + const { rows, incomplete } = results; if (!Array.isArray(rows)) { - throw new Error(`${connection.driver}.runQuery() must return rows array`) + throw new Error(`${connection.driver}.runQuery() must return rows array`); } - queryResult.incomplete = incomplete || false - queryResult.rows = rows - queryResult.stopTime = new Date() - queryResult.queryRunTime = queryResult.stopTime - queryResult.startTime - queryResult.meta = getMeta(rows) - queryResult.fields = Object.keys(queryResult.meta) + queryResult.incomplete = incomplete || false; + queryResult.rows = rows; + queryResult.stopTime = new Date(); + queryResult.queryRunTime = queryResult.stopTime - queryResult.startTime; + queryResult.meta = getMeta(rows); + queryResult.fields = Object.keys(queryResult.meta); if (debug) { - const connectionName = connection.name - const rowCount = rows.length - const { startTime, stopTime, queryRunTime } = queryResult + const connectionName = connection.name; + const rowCount = rows.length; + const { startTime, stopTime, queryRunTime } = queryResult; console.log( JSON.stringify({ @@ -150,11 +150,11 @@ function runQuery(query, connection, user) { rowCount, query }) - ) + ); } - return queryResult - }) + return queryResult; + }); } /** @@ -164,8 +164,8 @@ function runQuery(query, connection, user) { * @param {object} connection */ function testConnection(connection) { - const driver = drivers[connection.driver] - return driver.testConnection(connection) + const driver = drivers[connection.driver]; + return driver.testConnection(connection); } /** @@ -175,9 +175,9 @@ function testConnection(connection) { * @returns {Promise} */ function getSchema(connection) { - connection.maxRows = Number.MAX_SAFE_INTEGER - const driver = drivers[connection.driver] - return driver.getSchema(connection) + connection.maxRows = Number.MAX_SAFE_INTEGER; + const driver = drivers[connection.driver]; + return driver.getSchema(connection); } /** @@ -190,8 +190,8 @@ function getDrivers() { id, name: drivers[id].name, fields: drivers[id].fields - } - }) + }; + }); } /** @@ -200,40 +200,41 @@ function getDrivers() { * @param {object} connection */ function validateConnection(connection) { - const coreFields = ['_id', 'name', 'driver', 'createdDate', 'modifiedDate'] + const coreFields = ['_id', 'name', 'driver', 'createdDate', 'modifiedDate']; if (!connection.name) { - throw new Error('connection.name required') + throw new Error('connection.name required'); } if (!connection.driver) { - throw new Error('connection.driver required') + throw new Error('connection.driver required'); } - const driver = drivers[connection.driver] + const driver = drivers[connection.driver]; if (!driver) { - throw new Error(`driver implementation ${connection.driver} not found`) + throw new Error(`driver implementation ${connection.driver} not found`); } - const validFields = driver.fields.map(field => field.key).concat(coreFields) + const validFields = driver.fields.map(field => field.key).concat(coreFields); const cleanedConnection = validFields.reduce( (cleanedConnection, fieldKey) => { if (connection.hasOwnProperty(fieldKey)) { - let value = connection[fieldKey] - const fieldDefinition = drivers[connection.driver].fieldsByKey[fieldKey] + let value = connection[fieldKey]; + const fieldDefinition = + drivers[connection.driver].fieldsByKey[fieldKey]; // field definition may not exist since // this could be a core field like _id, name if (fieldDefinition) { if (fieldDefinition.formType === 'CHECKBOX') { - value = utils.ensureBoolean(value) + value = utils.ensureBoolean(value); } } - cleanedConnection[fieldKey] = value + cleanedConnection[fieldKey] = value; } - return cleanedConnection + return cleanedConnection; }, {} - ) + ); - return cleanedConnection + return cleanedConnection; } module.exports = { @@ -242,4 +243,4 @@ module.exports = { runQuery, testConnection, validateConnection -} +}; diff --git a/server/drivers/mock/index.js b/server/drivers/mock/index.js index 465081fff..fbc975734 100644 --- a/server/drivers/mock/index.js +++ b/server/drivers/mock/index.js @@ -1,9 +1,9 @@ -const _ = require('lodash') -const moment = require('moment') -const { formatSchemaQueryResults } = require('../utils') +const _ = require('lodash'); +const moment = require('moment'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'mock' -const name = 'Mock driver' +const id = 'mock'; +const name = 'Mock driver'; const fieldValues = { color: [ @@ -58,24 +58,24 @@ const fieldValues = { .add(index, 'hour') .toDate() ) -} +}; function cartesianify(rows, field) { - const newRows = [] + const newRows = []; if (!rows.length) { field.values.forEach(value => { - newRows.push({ [field.name]: value }) - }) + newRows.push({ [field.name]: value }); + }); } else { rows.forEach(row => { field.values.forEach(value => { - const newRow = Object.assign({}, row, { [field.name]: value }) - newRows.push(newRow) - }) - }) + const newRow = Object.assign({}, row, { [field.name]: value }); + newRows.push(newRow); + }); + }); } - return newRows + return newRows; } /** @@ -88,7 +88,7 @@ async function runQuery(query, connection) { // Connection here doesn't actually matter. // Someday this mock could get fancy and change output based on some connection value // For now validate that it is getting passed - const { maxRows } = connection + const { maxRows } = connection; // To determine the content of this mock query, inspect values from comments // Example format @@ -96,11 +96,11 @@ async function runQuery(query, connection) { // -- measures = cost, revenue, profit, // -- orderby = department asc, product desc // -- limit = 100 - const dimensions = [] - const measures = [] - const orderByFields = [] - const orderByDirections = [] - let limit + const dimensions = []; + const measures = []; + const orderByFields = []; + const orderByDirections = []; + let limit; query .split('\n') @@ -110,10 +110,10 @@ async function runQuery(query, connection) { .forEach(line => { const [fieldType, fieldData] = line .split('=') - .map(p => p.trim().toLowerCase()) + .map(p => p.trim().toLowerCase()); if (!fieldData) { - return + return; } // fieldData is something like , @@ -123,70 +123,70 @@ async function runQuery(query, connection) { .map(p => p.trim()) .forEach(part => { if (fieldType === 'limit') { - limit = parseInt(part) + limit = parseInt(part); } else if (fieldType === 'dimensions') { - const [fieldName, numString] = part.split(' ').map(p => p.trim()) + const [fieldName, numString] = part.split(' ').map(p => p.trim()); if (!fieldValues[fieldName]) { throw new Error( `Unknown ${fieldName}. must be one of: ${Object.keys( fieldValues ).join(', ')}` - ) + ); } dimensions.push({ name: fieldName, values: fieldValues[fieldName].slice(0, parseInt(numString)) - }) + }); } else if (fieldType === 'measures') { - measures.push(part) + measures.push(part); } else if (fieldType === 'orderby') { - const [fieldName, direction] = part.split(' ').map(p => p.trim()) + const [fieldName, direction] = part.split(' ').map(p => p.trim()); if (!direction) { - throw new Error('direction required. Must be asc or desc') + throw new Error('direction required. Must be asc or desc'); } - orderByFields.push(fieldName) - orderByDirections.push(direction) + orderByFields.push(fieldName); + orderByDirections.push(direction); } else { throw new Error( `Unknown ${fieldType}. Must be dimensions, measures, orderby, or limit` - ) + ); } - }) - }) + }); + }); if (!dimensions.length) { - throw new Error('dimensions required') + throw new Error('dimensions required'); } // Assemble dimensions and things - let rows = [] + let rows = []; dimensions.forEach(dimension => { - rows = cartesianify(rows, dimension) - }) + rows = cartesianify(rows, dimension); + }); if (measures.length) { rows.forEach((row, rowIndex) => { measures.forEach((measure, measureIndex) => { - const date = row.orderdate || row.orderdatetime + const date = row.orderdate || row.orderdatetime; if (date) { - const doy = moment.utc(date).dayOfYear() - row[measure] = 10 + Math.round(doy * Math.random()) + const doy = moment.utc(date).dayOfYear(); + row[measure] = 10 + Math.round(doy * Math.random()); } else { - row[measure] = Math.round(Math.random() * 1000) + row[measure] = Math.round(Math.random() * 1000); } - }) - }) + }); + }); } if (orderByFields.length) { - rows = _.orderBy(rows, orderByFields, orderByDirections) + rows = _.orderBy(rows, orderByFields, orderByDirections); } if (limit) { - rows = rows.slice(0, limit) + rows = rows.slice(0, limit); } - return { rows: rows.slice(0, maxRows), incomplete: rows.length > maxRows } + return { rows: rows.slice(0, maxRows), incomplete: rows.length > maxRows }; } /** @@ -197,11 +197,11 @@ function testConnection(connection) { const query = ` -- dimensions = department 1 -- measures = price - ` - return runQuery(query, connection) + `; + return runQuery(query, connection); } -const schemaRows = [] +const schemaRows = []; const columns = [ { name: 'product', type: 'TEXT', description: 'item sold' }, { name: 'color', type: 'TEXT', description: 'color of item' }, @@ -212,7 +212,7 @@ const columns = [ type: 'TIMESTAMP', description: 'date and time of order' } -] +]; Array(500) .fill(true) .forEach((value, tableIndex) => { @@ -223,9 +223,9 @@ Array(500) column_name: column.name, data_type: column.type, column_description: column.description - }) - }) - }) + }); + }); + }); /** * Get schema for connection @@ -235,10 +235,10 @@ function getSchema(connection) { const fakeSchemaQueryResult = { rows: schemaRows, incomplete: false - } + }; return Promise.resolve().then(() => formatSchemaQueryResults(fakeSchemaQueryResult) - ) + ); } const fields = [ @@ -312,7 +312,7 @@ const fields = [ formType: 'TEXT', label: 'Password for socks proxy' } -] +]; module.exports = { id, @@ -321,4 +321,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/mock/test.js b/server/drivers/mock/test.js index 1ec29372b..32d4b753e 100644 --- a/server/drivers/mock/test.js +++ b/server/drivers/mock/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const mock = require('./index.js') +const assert = require('assert'); +const mock = require('./index.js'); const connection = { name: 'test postgres', @@ -9,40 +9,40 @@ const connection = { username: 'sqlpad', password: 'sqlpad', maxRows: 100 -} +}; describe('drivers/mock', function() { it('tests connection', function() { - return mock.testConnection(connection) - }) + return mock.testConnection(connection); + }); it('getSchema()', function() { return mock.getSchema(connection).then(schemaInfo => { // Should probably create tables and validate them here // For now this is a smoke test of sorts - assert(schemaInfo) - }) - }) + assert(schemaInfo); + }); + }); it('runQuery under limit', function() { - const c = Object.assign({}, connection, { maxRows: 10000 }) + const c = Object.assign({}, connection, { maxRows: 10000 }); const query = ` -- dimensions = product 5 - ` + `; return mock.runQuery(query, c).then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 5, 'row length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 5, 'row length'); + }); + }); it('runQuery over limit', function() { - const c = Object.assign({}, connection, { maxRows: 10 }) + const c = Object.assign({}, connection, { maxRows: 10 }); const query = ` -- dimensions = product 10, color 10, orderdate 500 - ` + `; return mock.runQuery(query, c).then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 10, 'row length') - }) - }) -}) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 10, 'row length'); + }); + }); +}); diff --git a/server/drivers/mysql/index.js b/server/drivers/mysql/index.js index 2f26313dc..9f80960ab 100644 --- a/server/drivers/mysql/index.js +++ b/server/drivers/mysql/index.js @@ -1,8 +1,8 @@ -const mysql = require('mysql') -const { formatSchemaQueryResults } = require('../utils') +const mysql = require('mysql'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'mysql' -const name = 'MySQL' +const id = 'mysql'; +const name = 'MySQL'; function getSchemaSql(database) { const whereSql = database @@ -11,7 +11,7 @@ function getSchemaSql(database) { 'mysql', 'performance_schema', 'information_schema' - )` + )`; return ` SELECT t.table_schema, @@ -26,7 +26,7 @@ function getSchemaSql(database) { t.table_schema, t.table_name, c.ordinal_position - ` + `; } /** @@ -46,53 +46,53 @@ function runQuery(query, connection) { insecureAuth: connection.mysqlInsecureAuth, timezone: 'Z', supportBigNumbers: true - }) + }); return new Promise((resolve, reject) => { - let incomplete = false - const rows = [] + let incomplete = false; + const rows = []; myConnection.connect(err => { if (err) { - return reject(err) + return reject(err); } - let queryError - let resultsSent = false + let queryError; + let resultsSent = false; function continueOn() { if (!resultsSent) { - resultsSent = true + resultsSent = true; if (queryError) { - return reject(queryError) + return reject(queryError); } - return resolve({ rows, incomplete }) + return resolve({ rows, incomplete }); } } - const myQuery = myConnection.query(query) + const myQuery = myConnection.query(query); myQuery .on('error', function(err) { // Handle error, // an 'end' event will be emitted after this as well // so we'll call the callback there. - queryError = err + queryError = err; }) .on('result', function(row) { // If we haven't hit the max yet add row to results if (rows.length < connection.maxRows) { - return rows.push(row) + return rows.push(row); } // Too many rows - incomplete = true + incomplete = true; // Stop the query stream - myConnection.pause() + myConnection.pause(); // Destroy the underlying connection // Calling end() will wait and eventually time out - myConnection.destroy() - continueOn() + myConnection.destroy(); + continueOn(); }) .on('end', function() { // all rows have been received @@ -101,13 +101,13 @@ function runQuery(query, connection) { // myConnection.destroy() myConnection.end(error => { if (error) { - console.error('Error ending MySQL connection', error) + console.error('Error ending MySQL connection', error); } - continueOn() - }) - }) - }) - }) + continueOn(); + }); + }); + }); + }); } /** @@ -115,8 +115,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = "SELECT 'success' AS TestQuery;" - return runQuery(query, connection) + const query = "SELECT 'success' AS TestQuery;"; + return runQuery(query, connection); } /** @@ -124,10 +124,10 @@ function testConnection(connection) { * @param {*} connection */ function getSchema(connection) { - const schemaSql = getSchemaSql(connection.database) + const schemaSql = getSchemaSql(connection.database); return runQuery(schemaSql, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -161,7 +161,7 @@ const fields = [ formType: 'CHECKBOX', label: 'Use old/insecure pre 4.1 Auth System' } -] +]; module.exports = { id, @@ -170,4 +170,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/mysql/test.js b/server/drivers/mysql/test.js index 02985b4d0..41caaede5 100644 --- a/server/drivers/mysql/test.js +++ b/server/drivers/mysql/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const mysql = require('./index.js') +const assert = require('assert'); +const mysql = require('./index.js'); const connection = { name: 'test mysql', @@ -9,67 +9,67 @@ const connection = { username: 'sqlpad', password: 'sqlpad', maxRows: 50000 -} +}; -const dropTable = 'DROP TABLE IF EXISTS test;' -const createTable = 'CREATE TABLE test (id int);' -const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);' +const dropTable = 'DROP TABLE IF EXISTS test;'; +const createTable = 'CREATE TABLE test (id int);'; +const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);'; describe('drivers/mysql', function() { before(function() { - this.timeout(10000) + this.timeout(10000); return mysql .runQuery(dropTable, connection) .then(() => mysql.runQuery(createTable, connection)) - .then(() => mysql.runQuery(inserts, connection)) - }) + .then(() => mysql.runQuery(inserts, connection)); + }); it('tests connection', function() { - return mysql.testConnection(connection) - }) + return mysql.testConnection(connection); + }); it('getSchema()', function() { return mysql.getSchema(connection).then(schemaInfo => { - assert(schemaInfo.sqlpad, 'sqlpad') - assert(schemaInfo.sqlpad.test, 'sqlpad.test') - const columns = schemaInfo.sqlpad.test - assert.equal(columns.length, 1, 'columns.length') - assert.equal(columns[0].table_schema, 'sqlpad', 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') - assert.equal(columns[0].column_name, 'id', 'column_name') - assert(columns[0].hasOwnProperty('data_type'), 'data_type') - }) - }) + assert(schemaInfo.sqlpad, 'sqlpad'); + assert(schemaInfo.sqlpad.test, 'sqlpad.test'); + const columns = schemaInfo.sqlpad.test; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, 'sqlpad', 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); + assert.equal(columns[0].column_name, 'id', 'column_name'); + assert(columns[0].hasOwnProperty('data_type'), 'data_type'); + }); + }); it('runQuery under limit', function() { return mysql .runQuery('SELECT id FROM test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'rows length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }) + const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); return mysql .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); it('returns descriptive error message', function() { - let error + let error; return mysql .runQuery('SELECT * FROM missing_table;', connection) .catch(e => { - error = e + error = e; }) .then(() => { - assert(error) - assert(error.toString().indexOf('missing_table') > -1) - }) - }) -}) + assert(error); + assert(error.toString().indexOf('missing_table') > -1); + }); + }); +}); diff --git a/server/drivers/postgres/index.js b/server/drivers/postgres/index.js index 33d2e6630..1b3e043d0 100644 --- a/server/drivers/postgres/index.js +++ b/server/drivers/postgres/index.js @@ -1,11 +1,11 @@ -const fs = require('fs') -const pg = require('pg') -const PgCursor = require('pg-cursor') -const SocksConnection = require('socksjs') -const { formatSchemaQueryResults } = require('../utils') +const fs = require('fs'); +const pg = require('pg'); +const PgCursor = require('pg-cursor'); +const SocksConnection = require('socksjs'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'postgres' -const name = 'Postgres' +const id = 'postgres'; +const name = 'Postgres'; function createSocksConnection(connection) { if (connection.useSocks) { @@ -20,7 +20,7 @@ function createSocksConnection(connection) { user: connection.socksUsername, pass: connection.socksPassword } - ) + ); } } @@ -45,7 +45,7 @@ const SCHEMA_SQL = ` ns.nspname, cls.relname, attr.attnum -` +`; /** * Run query for connection @@ -61,66 +61,66 @@ function runQuery(query, connection) { host: connection.host, ssl: connection.postgresSsl, stream: createSocksConnection(connection) - } + }; // TODO cache key/cert values if (connection.postgresKey && connection.postgresCert) { pgConfig.ssl = { key: fs.readFileSync(connection.postgresKey), cert: fs.readFileSync(connection.postgresCert) - } + }; if (connection.postgresCA) { - pgConfig.ssl['ca'] = fs.readFileSync(connection.postgresCA) + pgConfig.ssl['ca'] = fs.readFileSync(connection.postgresCA); } } - if (connection.port) pgConfig.port = connection.port + if (connection.port) pgConfig.port = connection.port; return new Promise((resolve, reject) => { - const client = new pg.Client(pgConfig) + const client = new pg.Client(pgConfig); client.connect(err => { if (err) { - client.end() - return reject(err) + client.end(); + return reject(err); } - const cursor = client.query(new PgCursor(query)) + const cursor = client.query(new PgCursor(query)); return cursor.read(connection.maxRows + 1, (err, rows) => { if (err) { // pg_cursor can't handle multi-statements at the moment // as a work around we'll retry the query the old way, but we lose the maxRows protection return client.query(query, (err, result) => { - client.end() + client.end(); if (err) { - return reject(err) + return reject(err); } - return resolve({ rows: result.rows }) - }) + return resolve({ rows: result.rows }); + }); } - let incomplete = false + let incomplete = false; if (rows.length === connection.maxRows + 1) { - incomplete = true - rows.pop() // get rid of that extra record. we only get 1 more than the max to see if there would have been more... + incomplete = true; + rows.pop(); // get rid of that extra record. we only get 1 more than the max to see if there would have been more... } if (err) { - reject(err) + reject(err); } else { - resolve({ rows, incomplete }) + resolve({ rows, incomplete }); } cursor.close(err => { if (err) { - console.log('error closing pg-cursor:') - console.log(err) + console.log('error closing pg-cursor:'); + console.log(err); } // Calling end() without setImmediate causes error within node-pg setImmediate(() => { client.end(error => { if (error) { - console.error(error) + console.error(error); } - }) - }) - }) - }) - }) - }) + }); + }); + }); + }); + }); + }); } /** @@ -128,8 +128,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = "SELECT 'success' AS TestQuery;" - return runQuery(query, connection) + const query = "SELECT 'success' AS TestQuery;"; + return runQuery(query, connection); } /** @@ -139,7 +139,7 @@ function testConnection(connection) { function getSchema(connection) { return runQuery(SCHEMA_SQL, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -213,7 +213,7 @@ const fields = [ formType: 'TEXT', label: 'Password for socks proxy' } -] +]; module.exports = { id, @@ -222,4 +222,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/postgres/test.js b/server/drivers/postgres/test.js index 1c16b0fc9..ff1e246f0 100644 --- a/server/drivers/postgres/test.js +++ b/server/drivers/postgres/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const postgres = require('./index.js') +const assert = require('assert'); +const postgres = require('./index.js'); const connection = { name: 'test postgres', @@ -9,36 +9,36 @@ const connection = { username: 'sqlpad', password: 'sqlpad', maxRows: 100 -} +}; describe('drivers/postgres', function() { it('tests connection', function() { - return postgres.testConnection(connection) - }) + return postgres.testConnection(connection); + }); it('getSchema()', function() { return postgres.getSchema(connection).then(schemaInfo => { // Should probably create tables and validate them here // For now this is a smoke test of sorts - assert(schemaInfo) - }) - }) + assert(schemaInfo); + }); + }); it('runQuery under limit', function() { return postgres .runQuery('SELECT * FROM generate_series(1, 10) gs;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 10, 'row length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 10, 'row length'); + }); + }); it('runQuery over limit', function() { return postgres .runQuery('SELECT * FROM generate_series(1, 9000) gs;', connection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 100, 'row length') - }) - }) -}) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 100, 'row length'); + }); + }); +}); diff --git a/server/drivers/presto/_presto.js b/server/drivers/presto/_presto.js index 9b7d2ebfa..987154472 100644 --- a/server/drivers/presto/_presto.js +++ b/server/drivers/presto/_presto.js @@ -1,64 +1,64 @@ -const fetch = require('node-fetch') -const NEXT_URI_TIMEOUT = 100 +const fetch = require('node-fetch'); +const NEXT_URI_TIMEOUT = 100; -module.exports = { send } +module.exports = { send }; // Util - setTimeout as a promise function wait(ms) { - return new Promise(resolve => setTimeout(resolve, ms)) + return new Promise(resolve => setTimeout(resolve, ms)); } // Get Presto headers from config function getHeaders(config) { - const headers = { 'X-Presto-User': config.user } + const headers = { 'X-Presto-User': config.user }; if (config.catalog) { - headers['X-Presto-Catalog'] = config.catalog + headers['X-Presto-Catalog'] = config.catalog; } if (config.schema) { - headers['X-Presto-Schema'] = config.schema + headers['X-Presto-Schema'] = config.schema; } - return headers + return headers; } // Given config and query, returns promise with the results function send(config, query) { if (!config.url) { - return Promise.reject(new Error('config.url is required')) + return Promise.reject(new Error('config.url is required')); } const results = { data: [] - } + }; return fetch(`${config.url}/v1/statement`, { method: 'POST', body: query, headers: getHeaders(config) }) .then(response => response.json()) - .then(statement => handleStatementAndGetMore(results, statement, config)) + .then(statement => handleStatementAndGetMore(results, statement, config)); } function updateResults(results, statement) { if (statement.data && statement.data.length) { - results.data = results.data.concat(statement.data) + results.data = results.data.concat(statement.data); } if (statement.columns) { - results.columns = statement.columns + results.columns = statement.columns; } - return results + return results; } function handleStatementAndGetMore(results, statement, config) { if (statement.error) { // A lot of other error data available, // but error.message contains the detail on syntax issue - return Promise.reject(statement.error.message) + return Promise.reject(statement.error.message); } - results = updateResults(results, statement) + results = updateResults(results, statement); if (!statement.nextUri) { - return Promise.resolve(results) + return Promise.resolve(results); } return wait(NEXT_URI_TIMEOUT) .then(() => fetch(statement.nextUri, { headers: getHeaders(config) })) .then(response => response.json()) - .then(statement => handleStatementAndGetMore(results, statement, config)) + .then(statement => handleStatementAndGetMore(results, statement, config)); } diff --git a/server/drivers/presto/index.js b/server/drivers/presto/index.js index d38344cbe..2cbb602e3 100644 --- a/server/drivers/presto/index.js +++ b/server/drivers/presto/index.js @@ -1,11 +1,11 @@ -const presto = require('./_presto') -const { formatSchemaQueryResults } = require('../utils') +const presto = require('./_presto'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'presto' -const name = 'Presto' +const id = 'presto'; +const name = 'Presto'; function getPrestoSchemaSql(catalog, schema) { - const schemaSql = schema ? `AND table_schema = '${schema}'` : '' + const schemaSql = schema ? `AND table_schema = '${schema}'` : ''; return ` SELECT c.table_schema, @@ -21,7 +21,7 @@ function getPrestoSchemaSql(catalog, schema) { c.table_schema, c.table_name, c.ordinal_position - ` + `; } /** @@ -31,33 +31,33 @@ function getPrestoSchemaSql(catalog, schema) { * @param {object} connection */ function runQuery(query, connection) { - let incomplete = false - const rows = [] - const port = connection.port || 8080 + let incomplete = false; + const rows = []; + const port = connection.port || 8080; const prestoConfig = { url: `http://${connection.host}:${port}`, user: connection.username, catalog: connection.prestoCatalog, schema: connection.prestoSchema - } + }; return presto.send(prestoConfig, query).then(result => { if (!result) { - throw new Error('No result returned') + throw new Error('No result returned'); } - let { data, columns } = result + let { data, columns } = result; if (data.length > connection.maxRows) { - incomplete = true - data = data.slice(0, connection.maxRows) + incomplete = true; + data = data.slice(0, connection.maxRows); } for (let r = 0; r < data.length; r++) { - const row = {} + const row = {}; for (let c = 0; c < columns.length; c++) { - row[columns[c].name] = data[r][c] + row[columns[c].name] = data[r][c]; } - rows.push(row) + rows.push(row); } - return { rows, incomplete } - }) + return { rows, incomplete }; + }); } /** @@ -66,8 +66,8 @@ function runQuery(query, connection) { */ function testConnection(connection) { // Presto cannot have ; at end of query - const query = "SELECT 'success' AS TestQuery" - return runQuery(query, connection) + const query = "SELECT 'success' AS TestQuery"; + return runQuery(query, connection); } /** @@ -78,10 +78,10 @@ function getSchema(connection) { const schemaSql = getPrestoSchemaSql( connection.prestoCatalog, connection.prestoSchema - ) + ); return runQuery(schemaSql, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -110,7 +110,7 @@ const fields = [ formType: 'TEXT', label: 'Schema' } -] +]; module.exports = { id, @@ -119,4 +119,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/presto/test.js b/server/drivers/presto/test.js index 56ee8f3aa..1257c7896 100644 --- a/server/drivers/presto/test.js +++ b/server/drivers/presto/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const presto = require('./index.js') +const assert = require('assert'); +const presto = require('./index.js'); const connection = { name: 'test presto', @@ -10,86 +10,87 @@ const connection = { prestoCatalog: 'memory', // will be set after schema is created prestoSchema: null -} +}; -const schemaSql = 'CREATE SCHEMA test' -const tableSql = 'CREATE TABLE test (id INT, some_text VARCHAR)' +const schemaSql = 'CREATE SCHEMA test'; +const tableSql = 'CREATE TABLE test (id INT, some_text VARCHAR)'; // For presto, we should test to make sure driver follows the nextUri links properly // To help with that we can add lots of data -const values = [] +const values = []; for (let i = 0; i < 1000; i++) { - values.push(`(${i}, 'some text for the text field ${i}')`) + values.push(`(${i}, 'some text for the text field ${i}')`); } -const insertSql = 'INSERT INTO test (id, some_text) VALUES ' + values.join(', ') +const insertSql = + 'INSERT INTO test (id, some_text) VALUES ' + values.join(', '); describe('drivers/presto', function() { before(function() { - this.timeout(60000) + this.timeout(60000); return presto .runQuery(schemaSql, connection) .then(() => { // prestoSchema needs to be set or otherwise always specified - connection.prestoSchema = 'test' - return presto.runQuery(tableSql, connection) + connection.prestoSchema = 'test'; + return presto.runQuery(tableSql, connection); }) .then(() => { - let seq = Promise.resolve() + let seq = Promise.resolve(); for (let i = 0; i < 10; i++) { - seq = seq.then(() => presto.runQuery(insertSql, connection)) + seq = seq.then(() => presto.runQuery(insertSql, connection)); } - return seq - }) - }) + return seq; + }); + }); it('tests connection', function() { - return presto.testConnection(connection) - }) + return presto.testConnection(connection); + }); it('getSchema()', function() { return presto.getSchema(connection).then(schemaInfo => { - assert(schemaInfo) - assert(schemaInfo.test, 'test') - assert(schemaInfo.test.test, 'test.test') - const columns = schemaInfo.test.test - assert.equal(columns.length, 2, 'columns.length') - assert.equal(columns[0].table_schema, 'test', 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') - assert.equal(columns[0].column_name, 'id', 'column_name') - assert(columns[0].hasOwnProperty('data_type'), 'data_type') - }) - }) + assert(schemaInfo); + assert(schemaInfo.test, 'test'); + assert(schemaInfo.test.test, 'test.test'); + const columns = schemaInfo.test.test; + assert.equal(columns.length, 2, 'columns.length'); + assert.equal(columns[0].table_schema, 'test', 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); + assert.equal(columns[0].column_name, 'id', 'column_name'); + assert(columns[0].hasOwnProperty('data_type'), 'data_type'); + }); + }); it('runQuery under limit', function() { return presto .runQuery('SELECT id FROM test WHERE id = 1 LIMIT 1', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'rows length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }) + const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); return presto .runQuery('SELECT * FROM test LIMIT 10', limitedConnection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); it('returns descriptive error message', function() { - let error + let error; return presto .runQuery('SELECT * FROM missing_table', connection) .catch(e => { - error = e + error = e; }) .then(() => { - assert(error) - assert(error.toString().indexOf('missing_table') > -1) - }) - }) -}) + assert(error); + assert(error.toString().indexOf('missing_table') > -1); + }); + }); +}); diff --git a/server/drivers/sqlserver/index.js b/server/drivers/sqlserver/index.js index 9b86ea64e..d0697714f 100644 --- a/server/drivers/sqlserver/index.js +++ b/server/drivers/sqlserver/index.js @@ -1,8 +1,8 @@ -const mssql = require('mssql') -const { formatSchemaQueryResults } = require('../utils') +const mssql = require('mssql'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'sqlserver' -const name = 'SQL Server' +const id = 'sqlserver'; +const name = 'SQL Server'; const SCHEMA_SQL = ` SELECT @@ -19,7 +19,7 @@ const SCHEMA_SQL = ` t.table_schema, t.table_name, c.ordinal_position -` +`; /** * Run query for connection @@ -46,62 +46,62 @@ function runQuery(query, connection) { min: 0, idleTimeoutMillis: 1000 } - } + }; - let incomplete - const rows = [] + let incomplete; + const rows = []; return new Promise((resolve, reject) => { const pool = new mssql.ConnectionPool(config, err => { if (err) { - return reject(err) + return reject(err); } - const request = new mssql.Request(pool) + const request = new mssql.Request(pool); // Stream set a config level doesn't seem to work - request.stream = true - request.query(query) + request.stream = true; + request.query(query); request.on('row', row => { // Special handling if columns were not given names if (row[''] && row[''].length) { for (let i = 0; i < row[''].length; i++) { - row['UNNAMED COLUMN ' + (i + 1)] = row[''][i] + row['UNNAMED COLUMN ' + (i + 1)] = row[''][i]; } - delete row[''] + delete row['']; } if (rows.length < connection.maxRows) { - return rows.push(row) + return rows.push(row); } // If reached it means we received a row event for more than maxRows // If we haven't flagged incomplete yet, flag it, // Resolve what we have and cancel request // Note that this will yield a cancel error if (!incomplete) { - incomplete = true - resolve({ rows, incomplete }) - request.cancel() + incomplete = true; + resolve({ rows, incomplete }); + request.cancel(); } - }) + }); // Error events may fire multiple times // If we get an ECANCEL error and too many rows were handled it was intentional request.on('error', err => { if (err.code === 'ECANCEL' && incomplete) { - return + return; } - return reject(err) - }) + return reject(err); + }); // Always emitted as the last one request.on('done', () => { - resolve({ rows, incomplete }) - pool.close() - }) - }) + resolve({ rows, incomplete }); + pool.close(); + }); + }); - pool.on('error', err => reject(err)) - }) + pool.on('error', err => reject(err)); + }); } /** @@ -109,8 +109,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = "SELECT 'success' AS TestQuery;" - return runQuery(query, connection) + const query = "SELECT 'success' AS TestQuery;"; + return runQuery(query, connection); } /** @@ -120,7 +120,7 @@ function testConnection(connection) { function getSchema(connection) { return runQuery(SCHEMA_SQL, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -159,7 +159,7 @@ const fields = [ formType: 'CHECKBOX', label: 'Encrypt (necessary for Azure)' } -] +]; module.exports = { id, @@ -168,4 +168,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/sqlserver/test.js b/server/drivers/sqlserver/test.js index 0efef7dbf..eeebdd69d 100644 --- a/server/drivers/sqlserver/test.js +++ b/server/drivers/sqlserver/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const sqlserver = require('./index.js') +const assert = require('assert'); +const sqlserver = require('./index.js'); const masterConnection = { name: 'test sqlserver', @@ -8,7 +8,7 @@ const masterConnection = { database: 'master', username: 'sa', password: 'SuperP4ssw0rd!' -} +}; const connection = { name: 'test sqlserver', @@ -18,53 +18,53 @@ const connection = { username: 'sa', password: 'SuperP4ssw0rd!', maxRows: 2 -} +}; -const createDb = 'CREATE DATABASE test;' -const createTable = 'CREATE TABLE test (id int);' -const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);' +const createDb = 'CREATE DATABASE test;'; +const createTable = 'CREATE TABLE test (id int);'; +const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);'; describe('drivers/sqlserver', function() { before(function() { - this.timeout(10000) + this.timeout(10000); return sqlserver .runQuery(createDb, masterConnection) .then(() => sqlserver.runQuery(createTable, connection)) - .then(() => sqlserver.runQuery(inserts, connection)) - }) + .then(() => sqlserver.runQuery(inserts, connection)); + }); it('tests connection', function() { - return sqlserver.testConnection(connection) - }) + return sqlserver.testConnection(connection); + }); it('getSchema()', function() { return sqlserver.getSchema(connection).then(schemaInfo => { - assert(schemaInfo.dbo, 'dbo') - assert(schemaInfo.dbo.test, 'dbo.test') - const columns = schemaInfo.dbo.test - assert.equal(columns.length, 1, 'columns.length') - assert.equal(columns[0].table_schema, 'dbo', 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') - assert.equal(columns[0].column_name, 'id', 'column_name') - assert.equal(columns[0].data_type, 'int', 'data_type') - }) - }) + assert(schemaInfo.dbo, 'dbo'); + assert(schemaInfo.dbo.test, 'dbo.test'); + const columns = schemaInfo.dbo.test; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, 'dbo', 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); + assert.equal(columns[0].column_name, 'id', 'column_name'); + assert.equal(columns[0].data_type, 'int', 'data_type'); + }); + }); it('runQuery under limit', function() { return sqlserver .runQuery('SELECT * FROM test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'row length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'row length'); + }); + }); it('runQuery over limit', function() { return sqlserver .runQuery('SELECT * FROM test;', connection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) -}) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); +}); diff --git a/server/drivers/unixodbc/index.js b/server/drivers/unixodbc/index.js index 55d79fa51..004e0b3fd 100644 --- a/server/drivers/unixodbc/index.js +++ b/server/drivers/unixodbc/index.js @@ -1,8 +1,8 @@ -const odbc = require('odbc')() -const { formatSchemaQueryResults } = require('../utils') +const odbc = require('odbc')(); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'unixodbc' -const name = 'unixODBC' +const id = 'unixodbc'; +const name = 'unixODBC'; // Default to using INFORMATION_SCHEMA with old-style join for maximum compatibility // INFORMATION_SCHEMA is not supported by every DBMS but it is supported by @@ -23,7 +23,7 @@ const SCHEMA_SQL_INFORMATION_SCHEMA = ` c.table_schema, c.table_name, c.ordinal_position -` +`; /** * Run query for connection @@ -37,53 +37,53 @@ function runQuery(query, connection) { user: connection.username, password: connection.password, connection_string: connection.connection_string - } + }; // TODO use connection pool // TODO handle connection.maxRows - let cn = config.connection_string + let cn = config.connection_string; // Not all drivers require auth if (config.user) { - cn = cn + ';Uid=' + config.user + cn = cn + ';Uid=' + config.user; } if (config.password) { - cn = cn + ';Pwd=' + config.password + cn = cn + ';Pwd=' + config.password; } return openConnection(cn) .then(connectionStatus => { - return executeQuery(query) + return executeQuery(query); }) .then(queryResult => { - odbc.close() // TODO consider putting into finally()? - return Promise.resolve({ rows: queryResult, incomplete: false }) + odbc.close(); // TODO consider putting into finally()? + return Promise.resolve({ rows: queryResult, incomplete: false }); }) .catch(function(e) { - console.error(e, e.stack) - }) + console.error(e, e.stack); + }); } function executeQuery(sqlString) { return new Promise((resolve, reject) => { odbc.query(sqlString, function(err, data) { if (err) { - reject(err) + reject(err); } - resolve(data) - }) - }) + resolve(data); + }); + }); } function openConnection(connectionString) { return new Promise((resolve, reject) => { odbc.open(connectionString, function(err) { if (err) { - reject(err) + reject(err); } - resolve('Connection Open') - }) - }) + resolve('Connection Open'); + }); + }); } /** @@ -91,8 +91,8 @@ function openConnection(connectionString) { * @param {*} connection */ function testConnection(connection) { - const query = "SELECT 'success' AS TestQuery;" - return runQuery(query, connection) + const query = "SELECT 'success' AS TestQuery;"; + return runQuery(query, connection); } // TODO - reviewed no change needed? datatypes need reviewing @@ -103,10 +103,10 @@ function testConnection(connection) { function getSchema(connection) { const schema_sql = connection.schema_sql ? connection.schema_sql - : SCHEMA_SQL_INFORMATION_SCHEMA + : SCHEMA_SQL_INFORMATION_SCHEMA; return runQuery(schema_sql, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -132,7 +132,7 @@ const fields = [ formType: 'PASSWORD', label: 'Database Password (optional)' } -] +]; module.exports = { id, @@ -141,4 +141,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/unixodbc/test.js b/server/drivers/unixodbc/test.js index 2e0f69882..71395a458 100644 --- a/server/drivers/unixodbc/test.js +++ b/server/drivers/unixodbc/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const unixodbc = require('./index.js') +const assert = require('assert'); +const unixodbc = require('./index.js'); const connection = { connection_string: process.env.ODBC_CONNECTION_STRING, // I.e. ensure os variable is set to connection string @@ -12,13 +12,13 @@ const connection = { FROM sqlite_master WHERE type = 'table'; ` -} -const test_schema_name = 'dba' // sqlite3 does not really have owner +}; +const test_schema_name = 'dba'; // sqlite3 does not really have owner -const createTable = 'CREATE TABLE test (id integer);' // NOTE test(s) will fail if table already exists, expect empty database -const insert1 = 'INSERT INTO test (id) VALUES (1);' -const insert2 = 'INSERT INTO test (id) VALUES (2);' -const insert3 = 'INSERT INTO test (id) VALUES (3);' +const createTable = 'CREATE TABLE test (id integer);'; // NOTE test(s) will fail if table already exists, expect empty database +const insert1 = 'INSERT INTO test (id) VALUES (1);'; +const insert2 = 'INSERT INTO test (id) VALUES (2);'; +const insert3 = 'INSERT INTO test (id) VALUES (3);'; // TODO test more datatypes: // * integer (different sizes @@ -31,47 +31,47 @@ const insert3 = 'INSERT INTO test (id) VALUES (3);' // * interval describe('drivers/unixodbc', function() { before(function() { - this.timeout(10000) + this.timeout(10000); return unixodbc .runQuery(createTable, connection) .then(() => unixodbc.runQuery(insert1, connection)) .then(() => unixodbc.runQuery(insert2, connection)) - .then(() => unixodbc.runQuery(insert3, connection)) - }) + .then(() => unixodbc.runQuery(insert3, connection)); + }); it('tests connection', function() { - return unixodbc.testConnection(connection) - }) + return unixodbc.testConnection(connection); + }); it('getSchema()', function() { return unixodbc.getSchema(connection).then(schemaInfo => { - assert(schemaInfo[test_schema_name], test_schema_name) - assert(schemaInfo[test_schema_name].test, test_schema_name + '.test') - const columns = schemaInfo[test_schema_name].test - assert.equal(columns.length, 1, 'columns.length') - assert.equal(columns[0].table_schema, test_schema_name, 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') + assert(schemaInfo[test_schema_name], test_schema_name); + assert(schemaInfo[test_schema_name].test, test_schema_name + '.test'); + const columns = schemaInfo[test_schema_name].test; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, test_schema_name, 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); // column metadata not available in sqlite3 - assert.equal(columns[0].column_name, 'unknown', 'column_name') - assert.equal(columns[0].data_type, 'unknown', 'data_type') - }) - }) + assert.equal(columns[0].column_name, 'unknown', 'column_name'); + assert.equal(columns[0].data_type, 'unknown', 'data_type'); + }); + }); it('runQuery under limit', function() { return unixodbc .runQuery('SELECT * FROM test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'row length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'row length'); + }); + }); it('runQuery over limit', function() { return unixodbc .runQuery('SELECT * FROM test;', connection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) -}) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); +}); diff --git a/server/drivers/utils.js b/server/drivers/utils.js index 1a47e959b..bfa00ee98 100644 --- a/server/drivers/utils.js +++ b/server/drivers/utils.js @@ -1,4 +1,4 @@ -const _ = require('lodash') +const _ = require('lodash'); /** * Formats schema query results into @@ -7,29 +7,29 @@ const _ = require('lodash') */ function formatSchemaQueryResults(queryResult) { if (!queryResult || !queryResult.rows || !queryResult.rows.length) { - return {} + return {}; } // queryResult row casing may not always be consistent with what is specified in query // HANA is always uppercase despire aliasing as lower case for example // To account for this loop through rows and normalize the case const rows = queryResult.rows.map(row => { - const cleanRow = {} + const cleanRow = {}; Object.keys(row).forEach(key => { - cleanRow[key.toLowerCase()] = row[key] - }) - return cleanRow - }) + cleanRow[key.toLowerCase()] = row[key]; + }); + return cleanRow; + }); - const tree = {} - const bySchema = _.groupBy(rows, 'table_schema') + const tree = {}; + const bySchema = _.groupBy(rows, 'table_schema'); for (const schema in bySchema) { if (bySchema.hasOwnProperty(schema)) { - tree[schema] = {} - const byTableName = _.groupBy(bySchema[schema], 'table_name') + tree[schema] = {}; + const byTableName = _.groupBy(bySchema[schema], 'table_name'); for (const tableName in byTableName) { if (byTableName.hasOwnProperty(tableName)) { - tree[schema][tableName] = byTableName[tableName] + tree[schema][tableName] = byTableName[tableName]; } } } @@ -47,7 +47,7 @@ function formatSchemaQueryResults(queryResult) { } } */ - return tree + return tree; } /** @@ -58,21 +58,21 @@ function formatSchemaQueryResults(queryResult) { */ function ensureBoolean(value) { if (typeof value === 'boolean') { - return value + return value; } if (typeof value === 'string' && value.toLowerCase() === 'true') { - return true + return true; } else if (typeof value === 'string' && value.toLowerCase() === 'false') { - return false + return false; } else if (value === 1) { - return true + return true; } else if (value === 0) { - return false + return false; } - throw new Error(`Unexpected value for boolean: ${value}`) + throw new Error(`Unexpected value for boolean: ${value}`); } module.exports = { ensureBoolean, formatSchemaQueryResults -} +}; diff --git a/server/drivers/vertica/index.js b/server/drivers/vertica/index.js index fd839b941..d860fd506 100644 --- a/server/drivers/vertica/index.js +++ b/server/drivers/vertica/index.js @@ -1,8 +1,8 @@ -const vertica = require('vertica') -const { formatSchemaQueryResults } = require('../utils') +const vertica = require('vertica'); +const { formatSchemaQueryResults } = require('../utils'); -const id = 'vertica' -const name = 'Vertica' +const id = 'vertica'; +const name = 'Vertica'; const SCHEMA_SQL = ` SELECT @@ -20,7 +20,7 @@ const SCHEMA_SQL = ` vt.table_schema, vt.table_name, vc.ordinal_position -` +`; /** * Run query for connection @@ -35,59 +35,59 @@ function runQuery(query, connection) { user: connection.username, password: connection.password, database: connection.database - } + }; return new Promise((resolve, reject) => { const client = vertica.connect(params, function(err) { if (err) { - client.disconnect() - return reject(err) + client.disconnect(); + return reject(err); } - let incomplete = false - const rows = [] - let finished = false - let columnNames = [] + let incomplete = false; + const rows = []; + let finished = false; + let columnNames = []; - const verticaQuery = client.query(query) + const verticaQuery = client.query(query); verticaQuery.on('fields', fields => { - columnNames = fields.map(field => field.name) - }) + columnNames = fields.map(field => field.name); + }); verticaQuery.on('row', function(row) { if (rows.length < connection.maxRows) { - const resultRow = {} + const resultRow = {}; row.forEach((value, index) => { - resultRow[columnNames[index]] = value - }) - return rows.push(resultRow) + resultRow[columnNames[index]] = value; + }); + return rows.push(resultRow); } if (!finished) { - finished = true - client.disconnect() - incomplete = true - return resolve({ rows, incomplete }) + finished = true; + client.disconnect(); + incomplete = true; + return resolve({ rows, incomplete }); } - }) + }); verticaQuery.on('end', function() { if (!finished) { - finished = true - client.disconnect() - return resolve({ rows, incomplete }) + finished = true; + client.disconnect(); + return resolve({ rows, incomplete }); } - }) + }); verticaQuery.on('error', function(err) { if (!finished) { - finished = true - client.disconnect() - return reject(err) + finished = true; + client.disconnect(); + return reject(err); } - }) - }) - }) + }); + }); + }); } /** @@ -95,8 +95,8 @@ function runQuery(query, connection) { * @param {*} connection */ function testConnection(connection) { - const query = "SELECT 'success' AS TestQuery;" - return runQuery(query, connection) + const query = "SELECT 'success' AS TestQuery;"; + return runQuery(query, connection); } /** @@ -106,7 +106,7 @@ function testConnection(connection) { function getSchema(connection) { return runQuery(SCHEMA_SQL, connection).then(queryResult => formatSchemaQueryResults(queryResult) - ) + ); } const fields = [ @@ -135,7 +135,7 @@ const fields = [ formType: 'PASSWORD', label: 'Database Password' } -] +]; module.exports = { id, @@ -144,4 +144,4 @@ module.exports = { getSchema, runQuery, testConnection -} +}; diff --git a/server/drivers/vertica/test.js b/server/drivers/vertica/test.js index b43e90573..58ddf53eb 100644 --- a/server/drivers/vertica/test.js +++ b/server/drivers/vertica/test.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const vertica = require('./index.js') +const assert = require('assert'); +const vertica = require('./index.js'); const connection = { name: 'test vertica', @@ -7,7 +7,7 @@ const connection = { host: 'localhost', username: 'dbadmin', maxRows: 50000 -} +}; const initSql = ` DROP TABLE IF EXISTS test; @@ -20,60 +20,60 @@ const initSql = ` INSERT INTO test (id) VALUES (2); INSERT INTO test (id) VALUES (3); COMMIT; -` +`; describe('drivers/vertica', function() { before(function() { - this.timeout(10000) - return vertica.runQuery(initSql, connection) - }) + this.timeout(10000); + return vertica.runQuery(initSql, connection); + }); it('tests connection', function() { - return vertica.testConnection(connection) - }) + return vertica.testConnection(connection); + }); it('getSchema()', function() { return vertica.getSchema(connection).then(schemaInfo => { - assert(schemaInfo.public, 'public') - assert(schemaInfo.public.test, 'public.test') - const columns = schemaInfo.public.test - assert.equal(columns.length, 1, 'columns.length') - assert.equal(columns[0].table_schema, 'public', 'table_schema') - assert.equal(columns[0].table_name, 'test', 'table_name') - assert.equal(columns[0].column_name, 'id', 'column_name') - assert(columns[0].hasOwnProperty('data_type'), 'data_type') - }) - }) + assert(schemaInfo.public, 'public'); + assert(schemaInfo.public.test, 'public.test'); + const columns = schemaInfo.public.test; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, 'public', 'table_schema'); + assert.equal(columns[0].table_name, 'test', 'table_name'); + assert.equal(columns[0].column_name, 'id', 'column_name'); + assert(columns[0].hasOwnProperty('data_type'), 'data_type'); + }); + }); it('runQuery under limit', function() { return vertica .runQuery('SELECT id FROM test WHERE id = 1;', connection) .then(results => { - assert(!results.incomplete, 'not incomplete') - assert.equal(results.rows.length, 1, 'rows length') - }) - }) + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }) + const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); return vertica .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { - assert(results.incomplete, 'incomplete') - assert.equal(results.rows.length, 2, 'row length') - }) - }) + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); it('returns descriptive error message', function() { - let error + let error; return vertica .runQuery('SELECT * FROM missing_table;', connection) .catch(e => { - error = e + error = e; }) .then(() => { - assert(error) - assert(error.toString().indexOf('missing_table') > -1) - }) - }) -}) + assert(error); + assert(error.toString().indexOf('missing_table') > -1); + }); + }); +}); diff --git a/server/lib/check-whitelist.js b/server/lib/check-whitelist.js index 5149d3f56..22f8e0841 100644 --- a/server/lib/check-whitelist.js +++ b/server/lib/check-whitelist.js @@ -17,12 +17,12 @@ */ module.exports = function checkWhitelist(whitelistedDomains, email) { if (whitelistedDomains) { - const domain = email.split('@')[1] + const domain = email.split('@')[1]; const whitelistDomains = whitelistedDomains .split(' ') - .map(domain => domain.trim()) + .map(domain => domain.trim()); - return whitelistDomains.includes(domain) + return whitelistDomains.includes(domain); } - return false -} + return false; +}; diff --git a/server/lib/cipher.js b/server/lib/cipher.js index cc92e37cc..ed7d4ccac 100644 --- a/server/lib/cipher.js +++ b/server/lib/cipher.js @@ -1,8 +1,8 @@ -const crypto = require('crypto') -const algorithm = 'aes256' -const { passphrase } = require('../lib/config').getPreDbConfig() +const crypto = require('crypto'); +const algorithm = 'aes256'; +const { passphrase } = require('../lib/config').getPreDbConfig(); module.exports = function(text) { - const myCipher = crypto.createCipher(algorithm, passphrase) - return myCipher.update(text, 'utf8', 'hex') + myCipher.final('hex') -} + const myCipher = crypto.createCipher(algorithm, passphrase); + return myCipher.update(text, 'utf8', 'hex') + myCipher.final('hex'); +}; diff --git a/server/lib/cli-flow.js b/server/lib/cli-flow.js index 4f10c2b3d..df7fde743 100644 --- a/server/lib/cli-flow.js +++ b/server/lib/cli-flow.js @@ -1,11 +1,11 @@ -const fs = require('fs') -const path = require('path') -const minimist = require('minimist') -const argv = minimist(process.argv.slice(2)) -const packageJson = require('../package.json') +const fs = require('fs'); +const path = require('path'); +const minimist = require('minimist'); +const argv = minimist(process.argv.slice(2)); +const packageJson = require('../package.json'); const userHome = - process.platform === 'win32' ? process.env.USERPROFILE : process.env.HOME -const savedCliFilePath = path.join(userHome, '.sqlpadrc') + process.platform === 'win32' ? process.env.USERPROFILE : process.env.HOME; +const savedCliFilePath = path.join(userHome, '.sqlpadrc'); const helpText = ` @@ -47,38 +47,38 @@ Example: sqlpad --dir ./sqlpaddata --ip 127.0.0.1 --port 3000 --passphrase secr3t -` +`; // If version is requested show version then exit if (argv.v || argv.version) { - console.log('SQLPad version ' + packageJson.version) - process.exit() + console.log('SQLPad version ' + packageJson.version); + process.exit(); } // If help is requested show help if (argv.h || argv.help) { - console.log(helpText) - process.exit() + console.log(helpText); + process.exit(); } // if --save was passed in via cli, we should save the cli args // this file is a simple key/value object where key is the config item key if (argv.save) { - console.log('Saving your configuration.') - console.log("Next time just run 'sqlpad' and this config will be loaded.") - fs.writeFileSync(savedCliFilePath, JSON.stringify(argv, null, 2)) + console.log('Saving your configuration.'); + console.log("Next time just run 'sqlpad' and this config will be loaded."); + fs.writeFileSync(savedCliFilePath, JSON.stringify(argv, null, 2)); } // if --forget was passed in via cli we should remove the saved cli args file if (argv.forget) { if (fs.existsSync(savedCliFilePath)) { - fs.unlinkSync(savedCliFilePath) - console.log('Previous configuration removed.') + fs.unlinkSync(savedCliFilePath); + console.log('Previous configuration removed.'); } else { console.log( 'No previous configuration saved. Maybe it was a different user?' - ) + ); } - console.log('Exiting...') - process.exit() + console.log('Exiting...'); + process.exit(); } diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index 7b8a0cadb..647bddac1 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -277,6 +277,6 @@ const configItems = [ 'If disabled, SQLPad will no longer poll npmjs.com to see if an update is available.', default: false } -] +]; -module.exports = configItems +module.exports = configItems; diff --git a/server/lib/config/fromCli.js b/server/lib/config/fromCli.js index 59530261e..2acc7fe00 100644 --- a/server/lib/config/fromCli.js +++ b/server/lib/config/fromCli.js @@ -1,4 +1,4 @@ -const definitions = require('./configItems') +const definitions = require('./configItems'); /** * Gets config values from argv param @@ -9,16 +9,16 @@ module.exports = function getCliConfig(argv) { return definitions .filter(definition => definition.hasOwnProperty('cliFlag')) .reduce((confMap, definition) => { - const { key, cliFlag } = definition + const { key, cliFlag } = definition; // cliFlag could have multiple flags defined // TODO make consistent then deprecate old ones - const flags = Array.isArray(cliFlag) ? cliFlag : [cliFlag] + const flags = Array.isArray(cliFlag) ? cliFlag : [cliFlag]; flags.forEach(flag => { if (argv[flag] != null) { - confMap[key] = argv[flag] + confMap[key] = argv[flag]; } - }) - return confMap - }, {}) -} + }); + return confMap; + }, {}); +}; diff --git a/server/lib/config/fromDb.js b/server/lib/config/fromDb.js index 4a871e90e..5faeaf9d8 100644 --- a/server/lib/config/fromDb.js +++ b/server/lib/config/fromDb.js @@ -1,8 +1,8 @@ -const definitions = require('./configItems') +const definitions = require('./configItems'); const uiKeys = definitions .filter(definition => definition.interface === 'ui') - .map(definition => definition.key) + .map(definition => definition.key); /** * Gets config values set in ui from db @@ -11,18 +11,18 @@ const uiKeys = definitions */ module.exports = function getUiConfig(db) { if (!db) { - return Promise.reject(new Error('db not provided')) + return Promise.reject(new Error('db not provided')); } return db.config.find({}).then(docs => { if (!docs || !docs.length) { - return {} + return {}; } - const configMap = {} + const configMap = {}; docs .filter(doc => uiKeys.includes(doc.key)) .forEach(doc => { - configMap[doc.key] = doc.value - }) - return configMap - }) -} + configMap[doc.key] = doc.value; + }); + return configMap; + }); +}; diff --git a/server/lib/config/fromDefault.js b/server/lib/config/fromDefault.js index 808f4a906..ce86baa5c 100644 --- a/server/lib/config/fromDefault.js +++ b/server/lib/config/fromDefault.js @@ -1,5 +1,5 @@ -const path = require('path') -const definitions = require('./configItems') +const path = require('path'); +const definitions = require('./configItems'); /** * Gets default config values @@ -7,20 +7,20 @@ const definitions = require('./configItems') * @returns {object} configMap */ module.exports = function getDefaultConfig() { - const defaultMap = {} + const defaultMap = {}; definitions.forEach(definition => { if (definition.key === 'dbPath') { const userHome = process.platform === 'win32' ? process.env.USERPROFILE - : process.env.HOME - const defaultDbPath = path.join(userHome, 'sqlpad/db') - defaultMap.dbPath = defaultDbPath + : process.env.HOME; + const defaultDbPath = path.join(userHome, 'sqlpad/db'); + defaultMap.dbPath = defaultDbPath; } else if (definition.hasOwnProperty('default')) { - defaultMap[definition.key] = definition.default + defaultMap[definition.key] = definition.default; } - }) + }); - return defaultMap -} + return defaultMap; +}; diff --git a/server/lib/config/fromEnv.js b/server/lib/config/fromEnv.js index 54d348126..f2f631f13 100644 --- a/server/lib/config/fromEnv.js +++ b/server/lib/config/fromEnv.js @@ -1,4 +1,4 @@ -const definitions = require('./configItems') +const definitions = require('./configItems'); /** * Gets config values from environment @@ -9,10 +9,10 @@ module.exports = function getEnvConfig(env = process.env) { return definitions .filter(definition => definition.hasOwnProperty('envVar')) .reduce((envMap, definition) => { - const { key, envVar } = definition + const { key, envVar } = definition; if (env[envVar]) { - envMap[key] = env[envVar] + envMap[key] = env[envVar]; } - return envMap - }, {}) -} + return envMap; + }, {}); +}; diff --git a/server/lib/config/index.js b/server/lib/config/index.js index 43b194eee..627435af9 100644 --- a/server/lib/config/index.js +++ b/server/lib/config/index.js @@ -1,66 +1,66 @@ -const fs = require('fs') -const path = require('path') -const minimist = require('minimist') -const definitions = require('./configItems') -const fromDb = require('./fromDb') -const fromDefault = require('./fromDefault') -const fromEnv = require('./fromEnv') -const fromCli = require('./fromCli') +const fs = require('fs'); +const path = require('path'); +const minimist = require('minimist'); +const definitions = require('./configItems'); +const fromDb = require('./fromDb'); +const fromDefault = require('./fromDefault'); +const fromEnv = require('./fromEnv'); +const fromCli = require('./fromCli'); // argv -const argv = minimist(process.argv.slice(2)) +const argv = minimist(process.argv.slice(2)); // Saved argv const userHome = - process.platform === 'win32' ? process.env.USERPROFILE : process.env.HOME -const filePath = path.join(userHome, '.sqlpadrc') + process.platform === 'win32' ? process.env.USERPROFILE : process.env.HOME; +const filePath = path.join(userHome, '.sqlpadrc'); const savedArgv = fs.existsSync(filePath) ? JSON.parse(fs.readFileSync(filePath, { encoding: 'utf8' })) - : {} + : {}; -const defaultConfig = fromDefault() -const cliConfig = fromCli(argv) -const savedCliConfig = fromCli(savedArgv) -const envConfig = fromEnv() +const defaultConfig = fromDefault(); +const cliConfig = fromCli(argv); +const savedCliConfig = fromCli(savedArgv); +const envConfig = fromEnv(); function makeSave(db) { return function save(key, value) { - const definition = definitions.find(definition => definition.key === key) + const definition = definitions.find(definition => definition.key === key); if (definition.interface !== 'ui') { return Promise.reject( new Error(`Config Item ${key} must use ui interface to be saved to db`) - ) + ); } return db.config.findOne({ key }).then(doc => { if (doc) { - doc.value = value - doc.modifiedDate = new Date() - return db.config.update({ _id: doc._id }, doc, {}) + doc.value = value; + doc.modifiedDate = new Date(); + return db.config.update({ _id: doc._id }, doc, {}); } const newConfigValue = { key, value, createdDate: new Date(), modifiedDate: new Date() - } - return db.config.insert(newConfigValue) - }) - } + }; + return db.config.insert(newConfigValue); + }); + }; } function setBy(cliConfig, savedCliConfig, envConfig, dbConfig, key) { if (cliConfig[key]) { - return 'cli' + return 'cli'; } else if (savedCliConfig[key]) { - return 'saved cli' + return 'saved cli'; } else if (envConfig[key]) { - return 'env' + return 'env'; } else if (dbConfig[key]) { - return 'db' + return 'db'; } else { - return 'default' + return 'default'; } } @@ -69,8 +69,8 @@ function setBy(cliConfig, savedCliConfig, envConfig, dbConfig, key) { * @returns {object} configMap */ exports.getPreDbConfig = function getPreDbConfig() { - return Object.assign({}, defaultConfig, envConfig, savedCliConfig, cliConfig) -} + return Object.assign({}, defaultConfig, envConfig, savedCliConfig, cliConfig); +}; /** * Gets config helper using all config sources @@ -86,14 +86,14 @@ exports.getHelper = function getHelper(db) { envConfig, savedCliConfig, cliConfig - ) + ); const configHelper = { get: key => { if (!all.hasOwnProperty(key)) { - throw new Error(`config item ${key} not defined in configItems.js`) + throw new Error(`config item ${key} not defined in configItems.js`); } - return all[key] + return all[key]; }, getConfigItems: () => { return definitions @@ -111,27 +111,27 @@ exports.getHelper = function getHelper(db) { cliValue: cliConfig[definition.key], savedCliValue: savedCliConfig[definition.key], dbValue: dbConfig[definition.key] - }) + }); }) .map(item => { if (item.sensitive && item.interface === 'env') { - item.effectiveValue = item.effectiveValue ? '**********' : '' - item.dbValue = item.dbValue ? '**********' : '' - item.default = item.default ? '**********' : '' - item.envValue = item.envValue ? '**********' : '' - item.cliValue = item.cliValue ? '**********' : '' - item.savedCliValue = item.savedCliValue ? '**********' : '' + item.effectiveValue = item.effectiveValue ? '**********' : ''; + item.dbValue = item.dbValue ? '**********' : ''; + item.default = item.default ? '**********' : ''; + item.envValue = item.envValue ? '**********' : ''; + item.cliValue = item.cliValue ? '**********' : ''; + item.savedCliValue = item.savedCliValue ? '**********' : ''; } - return item - }) + return item; + }); }, getUiConfig: () => { return definitions .filter(item => item.uiDependency) .reduce((configMap, item) => { - configMap[item.key] = all[item.key] - return configMap - }, {}) + configMap[item.key] = all[item.key]; + return configMap; + }, {}); }, save: makeSave(db), smtpConfigured: () => @@ -142,8 +142,8 @@ exports.getHelper = function getHelper(db) { all.publicUrl, googleAuthConfigured: () => all.publicUrl && all.googleClientId && all.googleClientSecret - } + }; - return configHelper - }) -} + return configHelper; + }); +}; diff --git a/server/lib/db.js b/server/lib/db.js index 54fe4fc5b..76e5078b3 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -1,15 +1,15 @@ -const path = require('path') -const datastore = require('nedb-promise') -const mkdirp = require('mkdirp') -const { admin, dbPath, debug, port } = require('./config').getPreDbConfig() -const migrateSchema = require('./migrate-schema.js') +const path = require('path'); +const datastore = require('nedb-promise'); +const mkdirp = require('mkdirp'); +const { admin, dbPath, debug, port } = require('./config').getPreDbConfig(); +const migrateSchema = require('./migrate-schema.js'); -mkdirp.sync(path.join(dbPath, '/cache')) +mkdirp.sync(path.join(dbPath, '/cache')); // TODO return db as a Promise -let loaded = false -let loadError = null -const onLoads = [] +let loaded = false; +let loadError = null; +const onLoads = []; const db = { users: datastore({ filename: path.join(dbPath, 'users.db') }), @@ -22,24 +22,24 @@ const db = { instances: ['users', 'connections', 'queries', 'cache', 'config'], onLoad: function(fn) { if (loaded) { - return fn(loadError) + return fn(loadError); } - onLoads.push(fn) + onLoads.push(fn); } -} +}; -module.exports = db +module.exports = db; // Load dbs, migrate data, and apply indexes Promise.resolve() .then(() => { const loadTasks = db.instances.map(dbname => { if (debug) { - console.log('Loading %s..', dbname) + console.log('Loading %s..', dbname); } - return db[dbname].loadDatabase() - }) - return Promise.all(loadTasks) + return db[dbname].loadDatabase(); + }); + return Promise.all(loadTasks); }) .then(() => migrateSchema(db)) .then(() => db.users.ensureIndex({ fieldName: 'email', unique: true })) @@ -47,24 +47,24 @@ Promise.resolve() .then(() => db.config.ensureIndex({ fieldName: 'key', unique: true })) .then(() => { // set autocompaction - const tenMinutes = 1000 * 60 * 10 + const tenMinutes = 1000 * 60 * 10; db.instances.forEach(function(dbname) { - db[dbname].nedb.persistence.setAutocompactionInterval(tenMinutes) - }) - return ensureAdmin() + db[dbname].nedb.persistence.setAutocompactionInterval(tenMinutes); + }); + return ensureAdmin(); }) .then(() => { - loaded = true - onLoads.forEach(fn => fn()) + loaded = true; + onLoads.forEach(fn => fn()); }) .catch(error => { - onLoads.forEach(fn => fn(error)) - }) + onLoads.forEach(fn => fn(error)); + }); function ensureAdmin() { - const adminEmail = admin + const adminEmail = admin; if (!adminEmail) { - return Promise.resolve() + return Promise.resolve(); } // if an admin was passed in the command line, check to see if a user exists with that email @@ -76,32 +76,32 @@ function ensureAdmin() { return db.users .update({ _id: user._id }, { $set: { role: 'admin' } }, {}) .then(() => { - console.log(adminEmail + ' should now have admin access.') + console.log(adminEmail + ' should now have admin access.'); }) .catch(error => { - console.log('ERROR: could not make ' + adminEmail + ' an admin.') - throw error - }) + console.log('ERROR: could not make ' + adminEmail + ' an admin.'); + throw error; + }); } const newAdmin = { email: adminEmail, role: 'admin' - } + }; return db.users .insert(newAdmin) .then(() => { console.log( '\n' + adminEmail + ' has been whitelisted with admin access.' - ) + ); console.log( '\nPlease visit http://localhost:' + port + '/signup/ to complete registration.' - ) + ); }) .catch(error => { - console.log('\n/ERROR: could not make ' + adminEmail + ' an admin.') - throw error - }) - }) + console.log('\n/ERROR: could not make ' + adminEmail + ' an admin.'); + throw error; + }); + }); } diff --git a/server/lib/decipher.js b/server/lib/decipher.js index 1e1203b0f..13b587bbb 100644 --- a/server/lib/decipher.js +++ b/server/lib/decipher.js @@ -1,19 +1,19 @@ -const crypto = require('crypto') -const algorithm = 'aes256' -const { passphrase } = require('../lib/config').getPreDbConfig() +const crypto = require('crypto'); +const algorithm = 'aes256'; +const { passphrase } = require('../lib/config').getPreDbConfig(); /** * @param {string} gibberish ciphered value that needs deciphering * @returns {string} deciphered value */ module.exports = function decipher(gibberish) { - let returnValue = '' + let returnValue = ''; try { - const myDecipher = crypto.createDecipher(algorithm, passphrase) + const myDecipher = crypto.createDecipher(algorithm, passphrase); returnValue = - myDecipher.update(gibberish, 'hex', 'utf8') + myDecipher.final('utf8') + myDecipher.update(gibberish, 'hex', 'utf8') + myDecipher.final('utf8'); } catch (e) { - console.error(e) + console.error(e); } - return returnValue -} + return returnValue; +}; diff --git a/server/lib/email.js b/server/lib/email.js index 99150572a..010d2489b 100644 --- a/server/lib/email.js +++ b/server/lib/email.js @@ -1,49 +1,49 @@ -const nodemailer = require('nodemailer') -const configUtil = require('./config') -const db = require('./db') -const { baseUrl, port, publicUrl } = require('./config').getPreDbConfig() +const nodemailer = require('nodemailer'); +const configUtil = require('./config'); +const db = require('./db'); +const { baseUrl, port, publicUrl } = require('./config').getPreDbConfig(); /** * Get full sqlpad url * @param {string} path - path (leading slash) */ function fullUrl(path) { - const urlPort = port === 80 ? '' : ':' + port - const urlPublicUrl = publicUrl - const urlBaseUrl = baseUrl - return `${urlPublicUrl}${urlPort}${urlBaseUrl}${path}` + const urlPort = port === 80 ? '' : ':' + port; + const urlPublicUrl = publicUrl; + const urlBaseUrl = baseUrl; + return `${urlPublicUrl}${urlPort}${urlBaseUrl}${path}`; } function sendForgotPassword(to, passwordResetPath) { - const url = fullUrl(passwordResetPath) - const text = `Hello! \n\nYou recently requested a password reset for your SQLPad account. \n\nTo reset your password, visit ${url}.` + const url = fullUrl(passwordResetPath); + const text = `Hello! \n\nYou recently requested a password reset for your SQLPad account. \n\nTo reset your password, visit ${url}.`; const html = `

    Hello!

    You recently requested a password reset for your SQLPad account.

    To reset your password, visit ${url}.

    - ` - return send(to, 'SQLPad Password Reset', text, html) + `; + return send(to, 'SQLPad Password Reset', text, html); } function sendInvite(to) { - const url = fullUrl('/signup') - const text = `Hello! \n\nA colleague has invited you to SQLPad. \n\nTo sign up, visit ${url}.` + const url = fullUrl('/signup'); + const text = `Hello! \n\nA colleague has invited you to SQLPad. \n\nTo sign up, visit ${url}.`; const html = `

    Hello!

    A colleague has invited you to SQLPad.

    To sign up, visit '${url}.

    - ` - return send(to, "You've been invited to SQLPad", text, html) + `; + return send(to, "You've been invited to SQLPad", text, html); } function send(to, subject, text, html) { return configUtil.getHelper(db).then(config => { if (!config.smtpConfigured()) { - console.error('email.send() called without being configured') - return + console.error('email.send() called without being configured'); + return; } if (config.get('debug')) { - console.log('sending email') + console.log('sending email'); } const smtpConfig = { host: config.get('smtpHost'), @@ -56,28 +56,28 @@ function send(to, subject, text, html) { tls: { ciphers: 'SSLv3' } - } + }; return new Promise((resolve, reject) => { - const transporter = nodemailer.createTransport(smtpConfig) + const transporter = nodemailer.createTransport(smtpConfig); const mailOptions = { from: config.get('smtpFrom'), to, subject, text, html - } + }; transporter.sendMail(mailOptions, function(err, info) { if (config.get('debug')) { - console.log('sent email: ' + info) + console.log('sent email: ' + info); } if (err) { - console.error(err) - return reject(err) + console.error(err); + return reject(err); } - resolve(info) - }) - }) - }) + resolve(info); + }); + }); + }); } module.exports = { @@ -85,4 +85,4 @@ module.exports = { send, sendForgotPassword, sendInvite -} +}; diff --git a/server/lib/getMeta.js b/server/lib/getMeta.js index 88ace3728..a30f0d054 100644 --- a/server/lib/getMeta.js +++ b/server/lib/getMeta.js @@ -1,4 +1,4 @@ -const _ = require('lodash') +const _ = require('lodash'); /** * Derive whether value is a number number or number as a string @@ -8,22 +8,22 @@ const _ = require('lodash') */ function isNumeric(value) { if (_.isNumber(value)) { - return true + return true; } if (_.isString(value)) { if (!isFinite(value)) { - return false + return false; } // str is a finite number, but not all number strings should be numbers // If the string starts with 0, is more than 1 character, and does not have a period, it should stay a string // It could be an account number for example if (value[0] === '0' && value.length > 1 && value.indexOf('.') === -1) { - return false + return false; } - return true + return true; } - return false + return false; } /** @@ -31,7 +31,7 @@ function isNumeric(value) { * @param {array} rows */ module.exports = function getMeta(rows) { - const meta = {} + const meta = {}; rows.forEach(row => { _.forOwn(row, (value, key) => { @@ -41,22 +41,22 @@ module.exports = function getMeta(rows) { max: null, min: null, maxValueLength: 0 - } + }; } // if there is no value none of what follows will be helpful if (value == null) { - return + return; } // if we don't have a data type and we have a value yet lets try and figure it out if (!meta[key].datatype) { if (_.isDate(value)) { - meta[key].datatype = 'date' + meta[key].datatype = 'date'; } else if (isNumeric(value)) { - meta[key].datatype = 'number' + meta[key].datatype = 'number'; } else if (_.isString(value)) { - meta[key].datatype = 'string' + meta[key].datatype = 'string'; } } @@ -71,51 +71,51 @@ module.exports = function getMeta(rows) { _.isString(value) && !isNumeric(value) ) { - meta[key].datatype = 'string' + meta[key].datatype = 'string'; } // For strings, get max length of the string for display purposes if (meta[key].datatype === 'string' && _.isString(value)) { if (meta[key].maxValueLength < value.length) { - meta[key].maxValueLength = value.length + meta[key].maxValueLength = value.length; } } // if we have a value and are dealing with a number or date, we should get min and max if (meta[key].datatype === 'number' && isNumeric(value)) { - value = Number(value) + value = Number(value); // if we haven't yet defined a max and this row contains a number if (!meta[key].max) { - meta[key].max = value + meta[key].max = value; } else if (value > meta[key].max) { // otherwise this field in this row contains a number, and we should see if its bigger - meta[key].max = value + meta[key].max = value; } // then do the same thing for min if (!meta[key].min) { - meta[key].min = value + meta[key].min = value; } else if (value < meta[key].min) { - meta[key].min = value + meta[key].min = value; } } if (meta[key].datatype === 'date' && _.isDate(value)) { // if we haven't yet defined a max and this row contains a number if (!meta[key].max) { - meta[key].max = value + meta[key].max = value; } else if (value > meta[key].max) { // otherwise this field in this row contains a number, and we should see if its bigger - meta[key].max = value + meta[key].max = value; } // then do the same thing for min if (!meta[key].min) { - meta[key].min = value + meta[key].min = value; } else if (value < meta[key].min) { - meta[key].min = value + meta[key].min = value; } } - }) - }) + }); + }); - return meta -} + return meta; +}; diff --git a/server/lib/migrate-schema.js b/server/lib/migrate-schema.js index e1615b2c9..29efc3705 100644 --- a/server/lib/migrate-schema.js +++ b/server/lib/migrate-schema.js @@ -1,8 +1,8 @@ -const fs = require('fs') -const path = require('path') -const rimraf = require('rimraf') -const { dbPath, debug } = require('../lib/config').getPreDbConfig() -const schemaVersionFilePath = path.join(dbPath + '/schemaVersion.json') +const fs = require('fs'); +const path = require('path'); +const rimraf = require('rimraf'); +const { dbPath, debug } = require('../lib/config').getPreDbConfig(); +const schemaVersionFilePath = path.join(dbPath + '/schemaVersion.json'); // migrations must increment by 1 const migrations = { @@ -15,12 +15,12 @@ const migrations = { db.users.find({}).then(docs => { return Promise.all( docs.map(doc => { - doc.signupDate = doc.createdDate - doc.createdDate = doc.createdDate || new Date() - doc.modifiedDate = doc.modifiedDate || new Date() - return db.users.update({ _id: doc._id }, doc, {}) + doc.signupDate = doc.createdDate; + doc.createdDate = doc.createdDate || new Date(); + doc.modifiedDate = doc.modifiedDate || new Date(); + return db.users.update({ _id: doc._id }, doc, {}); }) - ) + ); }), 2: db => new Promise((resolve, reject) => { @@ -29,17 +29,17 @@ const migrations = { // then remove the cache db records rimraf(path.join(dbPath, '/cache/*'), err => { if (err) { - console.error(err) - return reject(err) + console.error(err); + return reject(err); } db.cache .remove({}, { multi: true }) .then(() => resolve()) .catch(error => { - console.error(error) - return reject(error) - }) - }) + console.error(error); + return reject(error); + }); + }); }), 3: db => // change admin flag to role to allow for future viewer role @@ -49,15 +49,15 @@ const migrations = { return Promise.all( docs.map(doc => { if (doc.admin) { - doc.role = 'admin' + doc.role = 'admin'; } else { - doc.role = 'editor' + doc.role = 'editor'; } - return db.users.update({ _id: doc._id }, doc, {}) + return db.users.update({ _id: doc._id }, doc, {}); }) - ) + ); }) -} +}; /** * Run migrations until latest version @@ -67,28 +67,28 @@ const migrations = { */ function runMigrations(db, currentVersion) { return new Promise((resolve, reject) => { - const nextVersion = currentVersion + 1 + const nextVersion = currentVersion + 1; if (!migrations[nextVersion]) { - return resolve() + return resolve(); } if (debug) { - console.log('Migrating schema to v%d', nextVersion) + console.log('Migrating schema to v%d', nextVersion); } migrations[nextVersion](db) .then(() => { // write new schemaVersion file - const json = JSON.stringify({ schemaVersion: nextVersion }) + const json = JSON.stringify({ schemaVersion: nextVersion }); fs.writeFile(schemaVersionFilePath, json, err => { if (err) { - return reject(err) + return reject(err); } - resolve(runMigrations(db, nextVersion)) - }) + resolve(runMigrations(db, nextVersion)); + }); }) - .catch(reject) - }) + .catch(reject); + }); } /** @@ -100,23 +100,23 @@ module.exports = function migrateSchema(db) { return new Promise((resolve, reject) => { fs.readFile(schemaVersionFilePath, 'utf8', (err, json) => { if (err && err.code !== 'ENOENT') { - return reject(err) + return reject(err); } - const currentVersion = json ? JSON.parse(json).schemaVersion : 0 + const currentVersion = json ? JSON.parse(json).schemaVersion : 0; const latestVersion = Object.keys(migrations).reduce((prev, next) => Math.max(prev, next) - ) + ); if (currentVersion === latestVersion) { if (debug) { - console.log('Schema is up to date (v%d).', latestVersion) + console.log('Schema is up to date (v%d).', latestVersion); } - return resolve() + return resolve(); } - resolve(runMigrations(db, currentVersion)) - }) - }) -} + resolve(runMigrations(db, currentVersion)); + }); + }); +}; diff --git a/server/lib/sendError.js b/server/lib/sendError.js index 8a6a77ff0..ad8fe9ea7 100644 --- a/server/lib/sendError.js +++ b/server/lib/sendError.js @@ -6,9 +6,9 @@ */ module.exports = function sendError(res, error, message) { if (error) { - console.error(error) + console.error(error); } return res.json({ error: message || (error ? error.toString() : 'Something happened') - }) -} + }); +}; diff --git a/server/lib/version.js b/server/lib/version.js index 6971b3938..894c2b51d 100644 --- a/server/lib/version.js +++ b/server/lib/version.js @@ -1,17 +1,17 @@ -const packageJson = require('../package.json') -const latestVersion = require('latest-version') -const semverDiff = require('semver-diff') -const db = require('./db.js') -const configUtil = require('./config') +const packageJson = require('../package.json'); +const latestVersion = require('latest-version'); +const semverDiff = require('semver-diff'); +const db = require('./db.js'); +const configUtil = require('./config'); -const ONE_DAY = 1000 * 60 * 60 * 24 +const ONE_DAY = 1000 * 60 * 60 * 24; const version = { updateAvailable: false, updateType: null, current: packageJson.version, latest: null -} +}; function logUpdateAvailable(version) { console.log(` @@ -22,7 +22,7 @@ function logUpdateAvailable(version) { run npm i -g ${packageJson.name} to update =================================================================== - `) + `); } function checkForUpdate() { @@ -30,29 +30,29 @@ function checkForUpdate() { .getHelper(db) .then(config => { if (config.get('disableUpdateCheck')) { - return + return; } return latestVersion(packageJson.name).then(npmVersion => { - version.latest = npmVersion - const difference = semverDiff(version.current, npmVersion) + version.latest = npmVersion; + const difference = semverDiff(version.current, npmVersion); if (difference) { - version.updateAvailable = true - version.updateType = difference - logUpdateAvailable(version) + version.updateAvailable = true; + version.updateType = difference; + logUpdateAvailable(version); } - }) + }); }) .catch(error => { - console.log(error) - }) + console.log(error); + }); } module.exports = { get: function() { - return Object.assign({}, version) + return Object.assign({}, version); }, scheduleUpdateChecks: function() { - setInterval(checkForUpdate, ONE_DAY) - setTimeout(checkForUpdate, 5000) + setInterval(checkForUpdate, ONE_DAY); + setTimeout(checkForUpdate, 5000); } -} +}; diff --git a/server/middleware/must-be-admin.js b/server/middleware/must-be-admin.js index 95eec87b4..595db9740 100644 --- a/server/middleware/must-be-admin.js +++ b/server/middleware/must-be-admin.js @@ -1,11 +1,11 @@ -const mustBeAuthenticated = require('./must-be-authenticated') +const mustBeAuthenticated = require('./must-be-authenticated'); module.exports = [ mustBeAuthenticated, function mustBeAdmin(req, res, next) { if (req.user.role === 'admin') { - return next() + return next(); } - return res.status(403).json({ error: 'Forbidden' }) + return res.status(403).json({ error: 'Forbidden' }); } -] +]; diff --git a/server/middleware/must-be-authenticated-or-chart-link-noauth.js b/server/middleware/must-be-authenticated-or-chart-link-noauth.js index c955d7854..3dc55356e 100644 --- a/server/middleware/must-be-authenticated-or-chart-link-noauth.js +++ b/server/middleware/must-be-authenticated-or-chart-link-noauth.js @@ -1,15 +1,15 @@ -const passport = require('passport') +const passport = require('passport'); // If authenticated continue // If not and auth header is present, try authenticated with http basic // Otherwise redirect user to signin module.exports = function mustBeAuthenticatedOrChartLinkNoAuth(req, res, next) { - const { config } = req + const { config } = req; if (req.isAuthenticated() || !config.get('tableChartLinksRequireAuth')) { - return next() + return next(); } if (req.headers.authorization) { - return passport.authenticate('basic', { session: false })(req, res, next) + return passport.authenticate('basic', { session: false })(req, res, next); } - res.redirect(config.get('baseUrl') + '/signin') -} + res.redirect(config.get('baseUrl') + '/signin'); +}; diff --git a/server/middleware/must-be-authenticated.js b/server/middleware/must-be-authenticated.js index c8afb2470..672d4bc6b 100644 --- a/server/middleware/must-be-authenticated.js +++ b/server/middleware/must-be-authenticated.js @@ -1,15 +1,15 @@ -const passport = require('passport') +const passport = require('passport'); // If authenticated continue // If not and auth header is present, try authenticated with http basic // Otherwise redirect user to signin module.exports = function mustBeAuthenticated(req, res, next) { - const { config } = req + const { config } = req; if (req.isAuthenticated()) { - return next() + return next(); } if (req.headers.authorization) { - return passport.authenticate('basic', { session: false })(req, res, next) + return passport.authenticate('basic', { session: false })(req, res, next); } - res.redirect(config.get('baseUrl') + '/signin') -} + res.redirect(config.get('baseUrl') + '/signin'); +}; diff --git a/server/middleware/passport.js b/server/middleware/passport.js index d42097785..227a5b10f 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -1,22 +1,22 @@ -const passport = require('passport') -const PassportLocalStrategy = require('passport-local').Strategy -const PassportGoogleStrategy = require('passport-google-oauth20').Strategy -const BasicStrategy = require('passport-http').BasicStrategy -const User = require('../models/User.js') -const configUtil = require('../lib/config') -const db = require('../lib/db') -const checkWhitelist = require('../lib/check-whitelist.js') +const passport = require('passport'); +const PassportLocalStrategy = require('passport-local').Strategy; +const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; +const BasicStrategy = require('passport-http').BasicStrategy; +const User = require('../models/User.js'); +const configUtil = require('../lib/config'); +const db = require('../lib/db'); +const checkWhitelist = require('../lib/check-whitelist.js'); const { baseUrl, googleClientId, googleClientSecret, publicUrl, disableUserpassAuth -} = require('../lib/config').getPreDbConfig() +} = require('../lib/config').getPreDbConfig(); passport.serializeUser(function(user, done) { - done(null, user.id) -}) + done(null, user.id); +}); passport.deserializeUser(function(id, done) { return User.findOneById(id) @@ -27,12 +27,12 @@ passport.deserializeUser(function(id, done) { _id: user._id, role: user.role, email: user.email - }) + }); } - done(null, false) + done(null, false); }) - .catch(error => done(error)) -}) + .catch(error => done(error)); +}); if (!disableUserpassAuth) { passport.use( @@ -44,7 +44,7 @@ if (!disableUserpassAuth) { return User.findOneByEmail(email) .then(user => { if (!user) { - return done(null, false, { message: 'wrong email or password' }) + return done(null, false, { message: 'wrong email or password' }); } return user.comparePasswordToHash(password).then(isMatch => { if (isMatch) { @@ -53,33 +53,33 @@ if (!disableUserpassAuth) { _id: user._id, role: user.role, email: user.email - }) + }); } - return done(null, false, { message: 'wrong email or password' }) - }) + return done(null, false, { message: 'wrong email or password' }); + }); }) - .catch(error => done(error)) + .catch(error => done(error)); } ) - ) + ); passport.use( new BasicStrategy(function(username, password, callback) { return User.findOneByEmail(username) .then(user => { if (!user) { - return callback(null, false) + return callback(null, false); } return user.comparePasswordToHash(password).then(isMatch => { if (!isMatch) { - return callback(null, false) + return callback(null, false); } - return callback(null, user) - }) + return callback(null, user); + }); }) - .catch(error => callback(error)) + .catch(error => callback(error)); }) - ) + ); } if (googleClientId && googleClientSecret && publicUrl) { @@ -94,7 +94,7 @@ if (googleClientId && googleClientSecret && publicUrl) { }, passportGoogleStrategyHandler ) - ) + ); } function passportGoogleStrategyHandler( @@ -103,12 +103,12 @@ function passportGoogleStrategyHandler( profile, done ) { - const email = profile && profile._json && profile._json.email + const email = profile && profile._json && profile._json.email; if (!email) { return done(null, false, { message: 'email not provided from Google' - }) + }); } return Promise.all([ @@ -117,32 +117,32 @@ function passportGoogleStrategyHandler( configUtil.getHelper(db) ]) .then(data => { - let [openAdminRegistration, user, config] = data + let [openAdminRegistration, user, config] = data; if (user) { - user.signupDate = new Date() + user.signupDate = new Date(); return user.save().then(newUser => { - newUser.id = newUser._id - return done(null, newUser) - }) + newUser.id = newUser._id; + return done(null, newUser); + }); } - const whitelistedDomains = config.get('whitelistedDomains') + const whitelistedDomains = config.get('whitelistedDomains'); if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { user = new User({ email, role: openAdminRegistration ? 'admin' : 'editor', signupDate: new Date() - }) + }); return user.save().then(newUser => { - newUser.id = newUser._id - return done(null, newUser) - }) + newUser.id = newUser._id; + return done(null, newUser); + }); } // at this point we don't have an error, but authentication is invalid // per passport docs, we call done() here without an error // instead passing false for user and a message why return done(null, false, { message: "You haven't been invited by an admin yet." - }) + }); }) - .catch(error => done(error, null)) + .catch(error => done(error, null)); } diff --git a/server/models/Cache.js b/server/models/Cache.js index 39e068f4d..39f890b30 100644 --- a/server/models/Cache.js +++ b/server/models/Cache.js @@ -1,10 +1,10 @@ -const fs = require('fs') -const path = require('path') -const Joi = require('joi') -const db = require('../lib/db.js') -const xlsx = require('node-xlsx') -const json2csv = require('json2csv') -const { dbPath } = require('../lib/config').getPreDbConfig() +const fs = require('fs'); +const path = require('path'); +const Joi = require('joi'); +const db = require('../lib/db.js'); +const xlsx = require('node-xlsx'); +const json2csv = require('json2csv'); +const { dbPath } = require('../lib/config').getPreDbConfig(); const schema = { _id: Joi.string().optional(), // will be auto-gen by nedb @@ -14,122 +14,122 @@ const schema = { schema: Joi.any().optional(), // schema tree in JSON if that's what we're caching createdDate: Joi.date().default(new Date(), 'time of creation'), modifiedDate: Joi.date().default(new Date(), 'time of modification') -} +}; function Cache(data) { - this._id = data._id - this.cacheKey = data.cacheKey - this.expiration = data.expiration - this.queryName = data.queryName - this.schema = data.schema // schema tree in JSON if that's what we're caching - this.createdDate = data.createdDate - this.modifiedDate = data.modifiedDate + this._id = data._id; + this.cacheKey = data.cacheKey; + this.expiration = data.expiration; + this.queryName = data.queryName; + this.schema = data.schema; // schema tree in JSON if that's what we're caching + this.createdDate = data.createdDate; + this.modifiedDate = data.modifiedDate; } Cache.prototype.xlsxFilePath = function xlsxFilePath() { - return path.join(dbPath, '/cache/', this.cacheKey + '.xlsx') -} + return path.join(dbPath, '/cache/', this.cacheKey + '.xlsx'); +}; Cache.prototype.csvFilePath = function csvFilePath() { - return path.join(dbPath, '/cache/', this.cacheKey + '.csv') -} + return path.join(dbPath, '/cache/', this.cacheKey + '.csv'); +}; Cache.prototype.filePaths = function filePaths() { // these may not exist. // eventually actual files should be stored on the cache item - return [this.xlsxFilePath(), this.csvFilePath()] -} + return [this.xlsxFilePath(), this.csvFilePath()]; +}; Cache.prototype.removeFiles = function removeFiles() { - const filepaths = this.filePaths() + const filepaths = this.filePaths(); filepaths.forEach(fp => { if (fs.existsSync(fp)) { - fs.unlinkSync(fp) + fs.unlinkSync(fp); } - }) -} + }); +}; Cache.prototype.expire = function expire() { - this.removeFiles() - return db.cache.remove({ _id: this._id }, {}) -} + this.removeFiles(); + return db.cache.remove({ _id: this._id }, {}); +}; Cache.prototype.writeXlsx = function writeXlsx(queryResult) { - const self = this + const self = this; // loop through rows and build out an array of arrays - const resultArray = [] - resultArray.push(queryResult.fields) + const resultArray = []; + resultArray.push(queryResult.fields); for (let i = 0; i < queryResult.rows.length; i++) { - const row = [] + const row = []; for (let c = 0; c < queryResult.fields.length; c++) { - const fieldName = queryResult.fields[c] - row.push(queryResult.rows[i][fieldName]) + const fieldName = queryResult.fields[c]; + row.push(queryResult.rows[i][fieldName]); } - resultArray.push(row) + resultArray.push(row); } - const xlsxBuffer = xlsx.build([{ name: 'query-results', data: resultArray }]) + const xlsxBuffer = xlsx.build([{ name: 'query-results', data: resultArray }]); return new Promise((resolve, reject) => { fs.writeFile(self.xlsxFilePath(), xlsxBuffer, function(err) { // if there's an error log it but otherwise continue on // we can still send results even if download file failed to create if (err) { - console.log(err) + console.log(err); } - return resolve() - }) - }) -} + return resolve(); + }); + }); +}; Cache.prototype.writeCsv = function writeCsv(queryResult) { - const self = this + const self = this; return new Promise((resolve, reject) => { json2csv({ data: queryResult.rows, fields: queryResult.fields }, function( err, csv ) { if (err) { - console.log(err) - return resolve() + console.log(err); + return resolve(); } fs.writeFile(self.csvFilePath(), csv, function(err) { if (err) { - console.log(err) + console.log(err); } - return resolve() - }) - }) - }) -} + return resolve(); + }); + }); + }); +}; Cache.prototype.save = function save() { - const self = this - this.modifiedDate = new Date() - const joiResult = Joi.validate(self, schema) + const self = this; + this.modifiedDate = new Date(); + const joiResult = Joi.validate(self, schema); if (joiResult.error) { - return Promise.reject(joiResult.error) + return Promise.reject(joiResult.error); } return db.cache .update({ cacheKey: self.cacheKey }, joiResult.value, { upsert: true }) - .then(() => Cache.findOneByCacheKey(self.cacheKey)) -} + .then(() => Cache.findOneByCacheKey(self.cacheKey)); +}; /* Query methods ============================================================================== */ Cache.findOneByCacheKey = cacheKey => - db.cache.findOne({ cacheKey }).then(doc => doc && new Cache(doc)) + db.cache.findOne({ cacheKey }).then(doc => doc && new Cache(doc)); Cache.findExpired = () => db.cache .find({ expiration: { $lt: new Date() } }) - .then(docs => docs.map(doc => new Cache(doc))) + .then(docs => docs.map(doc => new Cache(doc))); Cache.removeExpired = () => Cache.findExpired() .then(caches => Promise.all(caches.map(cache => cache.expire()))) - .catch(console.error) + .catch(console.error); // Every five minutes check and expire cache -const FIVE_MINUTES = 1000 * 60 * 5 -setInterval(Cache.removeExpired, FIVE_MINUTES) +const FIVE_MINUTES = 1000 * 60 * 5; +setInterval(Cache.removeExpired, FIVE_MINUTES); -module.exports = Cache +module.exports = Cache; diff --git a/server/models/Query.js b/server/models/Query.js index 17c8e9998..d766cfaeb 100644 --- a/server/models/Query.js +++ b/server/models/Query.js @@ -1,7 +1,7 @@ -const db = require('../lib/db.js') -const configUtil = require('../lib/config') -const Joi = require('joi') -const request = require('request') +const db = require('../lib/db.js'); +const configUtil = require('../lib/config'); +const Joi = require('joi'); +const request = require('request'); /* "chartConfiguration": { @@ -44,57 +44,57 @@ const schema = { createdBy: Joi.string().required(), modifiedBy: Joi.string().required(), lastAccessDate: Joi.date().default(new Date(), 'time of last access') -} +}; function Query(data) { - this._id = data._id - this.name = data.name - this.tags = data.tags - this.connectionId = data.connectionId - this.queryText = data.queryText - this.chartConfiguration = data.chartConfiguration - this.createdDate = data.createdDate - this.createdBy = data.createdBy - this.modifiedDate = data.modifiedDate - this.modifiedBy = data.modifiedBy - this.lastAccessDate = data.lastAccessedDate + this._id = data._id; + this.name = data.name; + this.tags = data.tags; + this.connectionId = data.connectionId; + this.queryText = data.queryText; + this.chartConfiguration = data.chartConfiguration; + this.createdDate = data.createdDate; + this.createdBy = data.createdBy; + this.modifiedDate = data.modifiedDate; + this.modifiedBy = data.modifiedBy; + this.lastAccessDate = data.lastAccessedDate; } Query.prototype.save = function save() { - const self = this - this.modifiedDate = new Date() - this.lastAccessDate = new Date() + const self = this; + this.modifiedDate = new Date(); + this.lastAccessDate = new Date(); // clean tags if present // sqlpad v1 saved a lot of bad inputs if (Array.isArray(self.tags)) { self.tags = self.tags .filter(tag => { - return typeof tag === 'string' && tag.trim() !== '' + return typeof tag === 'string' && tag.trim() !== ''; }) .map(tag => { - return tag.trim() - }) + return tag.trim(); + }); } - const joiResult = Joi.validate(self, schema) + const joiResult = Joi.validate(self, schema); if (joiResult.error) { - return Promise.reject(joiResult.error) + return Promise.reject(joiResult.error); } if (self._id) { return db.queries .update({ _id: self._id }, joiResult.value, { upsert: true }) - .then(() => Query.findOneById(self._id)) + .then(() => Query.findOneById(self._id)); } - return db.queries.insert(joiResult.value).then(doc => new Query(doc)) -} + return db.queries.insert(joiResult.value).then(doc => new Query(doc)); +}; Query.prototype.pushQueryToSlackIfSetup = function() { return configUtil .getHelper(db) .then(config => { - const SLACK_WEBHOOK = config.get('slackWebhook') + const SLACK_WEBHOOK = config.get('slackWebhook'); if (SLACK_WEBHOOK) { - const PUBLIC_URL = config.get('publicUrl') - const BASE_URL = config.get('baseUrl') + const PUBLIC_URL = config.get('publicUrl'); + const BASE_URL = config.get('baseUrl'); const options = { method: 'post', body: { @@ -108,41 +108,41 @@ Query.prototype.pushQueryToSlackIfSetup = function() { }, json: true, url: SLACK_WEBHOOK - } + }; request(options, function(err, httpResponse, body) { if (err) { - console.error('Something went wrong while sending to Slack.') - console.error(err) + console.error('Something went wrong while sending to Slack.'); + console.error(err); } - }) + }); } }) .catch(error => { - console.log('error getting config helper') - console.error(error) - }) -} + console.log('error getting config helper'); + console.error(error); + }); +}; /* Query methods ============================================================================== */ Query.findOneById = id => - db.queries.findOne({ _id: id }).then(doc => new Query(doc)) + db.queries.findOne({ _id: id }).then(doc => new Query(doc)); Query.findAll = () => - db.queries.find({}).then(docs => docs.map(doc => new Query(doc))) + db.queries.find({}).then(docs => docs.map(doc => new Query(doc))); Query.findByFilter = filter => - db.queries.find(filter).then(docs => docs.map(doc => new Query(doc))) + db.queries.find(filter).then(docs => docs.map(doc => new Query(doc))); Query.prototype.logAccess = function logAccess() { - const self = this + const self = this; return db.queries.update( { _id: self._id }, { $set: { lastAccessedDate: new Date() } }, {} - ) -} + ); +}; -Query.removeOneById = id => db.queries.remove({ _id: id }) +Query.removeOneById = id => db.queries.remove({ _id: id }); -module.exports = Query +module.exports = Query; diff --git a/server/models/User.js b/server/models/User.js index 6774989a3..f1301494f 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -1,6 +1,6 @@ -const Joi = require('joi') -const db = require('../lib/db.js') -const bcrypt = require('bcrypt-nodejs') +const Joi = require('joi'); +const db = require('../lib/db.js'); +const bcrypt = require('bcrypt-nodejs'); const schema = { _id: Joi.string().optional(), // will be auto-gen by nedb @@ -19,23 +19,23 @@ const schema = { createdDate: Joi.date().default(new Date(), 'time of creation'), modifiedDate: Joi.date().default(new Date(), 'time of modification'), signupDate: Joi.date().optional() -} +}; function User(data) { - this._id = data._id - this.email = data.email - this.role = data.role - this.passwordResetId = data.passwordResetId - this.passhash = data.passhash - this.password = data.password - this.createdDate = data.createdDate - this.modifiedDate = data.modifiedDate - this.signupDate = data.signupDate + this._id = data._id; + this.email = data.email; + this.role = data.role; + this.passwordResetId = data.passwordResetId; + this.passhash = data.passhash; + this.password = data.password; + this.createdDate = data.createdDate; + this.modifiedDate = data.modifiedDate; + this.signupDate = data.signupDate; } User.prototype.save = function save() { - const self = this - this.modifiedDate = new Date() + const self = this; + this.modifiedDate = new Date(); return Promise.resolve() .then(() => { // if user has password set, we need to hash it before saving @@ -43,25 +43,25 @@ User.prototype.save = function save() { return new Promise((resolve, reject) => { bcrypt.hash(this.password, null, null, (err, hash) => { if (err) { - return reject(err) + return reject(err); } - self.passhash = hash - return resolve() - }) - }) + self.passhash = hash; + return resolve(); + }); + }); } }) .then(() => { // validate and save - const joiResult = Joi.validate(self, schema) + const joiResult = Joi.validate(self, schema); if (joiResult.error) { - return Promise.reject(joiResult.error) + return Promise.reject(joiResult.error); } return db.users .update({ email: self.email }, joiResult.value, { upsert: true }) - .then(() => User.findOneByEmail(self.email)) - }) -} + .then(() => User.findOneByEmail(self.email)); + }); +}; /** * Compare password to hash. Returns promise @@ -73,40 +73,40 @@ User.prototype.comparePasswordToHash = function comparePasswordToHash( return new Promise((resolve, reject) => { bcrypt.compare(password, this.passhash, (err, isMatch) => { if (err) { - return reject(err) + return reject(err); } - resolve(isMatch) - }) - }) -} + resolve(isMatch); + }); + }); +}; /* Query methods ============================================================================== */ User.findOneByEmail = email => db.users .findOne({ email: { $regex: new RegExp(email, 'i') } }) - .then(doc => doc && new User(doc)) + .then(doc => doc && new User(doc)); User.findOneById = id => - db.users.findOne({ _id: id }).then(doc => doc && new User(doc)) + db.users.findOne({ _id: id }).then(doc => doc && new User(doc)); User.findOneByPasswordResetId = id => - db.users.findOne({ passwordResetId: id }).then(doc => doc && new User(doc)) + db.users.findOne({ passwordResetId: id }).then(doc => doc && new User(doc)); User.findAll = () => db.users .cfind({}, { password: 0, passhash: 0 }) .sort({ email: 1 }) .exec() - .then(docs => docs.map(doc => new User(doc))) + .then(docs => docs.map(doc => new User(doc))); /** * Returns boolean regarding whether admin registration should be open or not * @returns {Promise} administrationOpen */ User.adminRegistrationOpen = () => - db.users.findOne({ role: 'admin' }).then(doc => !doc) + db.users.findOne({ role: 'admin' }).then(doc => !doc); -User.removeOneById = id => db.users.remove({ _id: id }) +User.removeOneById = id => db.users.remove({ _id: id }); -module.exports = User +module.exports = User; diff --git a/server/models/connections.js b/server/models/connections.js index 8bdfc6a04..c4c1e9df7 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -1,8 +1,8 @@ -const db = require('../lib/db.js') -const _ = require('lodash') -const drivers = require('../drivers') -const cipher = require('../lib/cipher.js') -const decipher = require('../lib/decipher') +const db = require('../lib/db.js'); +const _ = require('lodash'); +const drivers = require('../drivers'); +const cipher = require('../lib/cipher.js'); +const decipher = require('../lib/decipher'); // TODO this file being named connections makes it awkward to use // because you'll want to do the following: @@ -12,58 +12,58 @@ const decipher = require('../lib/decipher') function decipherConnection(connection) { if (connection.username) { - connection.username = decipher(connection.username) + connection.username = decipher(connection.username); } if (connection.password) { - connection.password = decipher(connection.password) + connection.password = decipher(connection.password); } - return connection + return connection; } const findAll = () => db.connections .find({}) .then(connections => _.sortBy(connections, c => c.name.toLowerCase())) - .then(connections => connections.map(decipherConnection)) + .then(connections => connections.map(decipherConnection)); const findOneById = id => db.connections .findOne({ _id: id }) - .then(connection => decipherConnection(connection)) + .then(connection => decipherConnection(connection)); -const removeOneById = id => db.connections.remove({ _id: id }) +const removeOneById = id => db.connections.remove({ _id: id }); const save = connection => { if (!connection) { - return Promise.reject('connections.save() requires a connection') + return Promise.reject('connections.save() requires a connection'); } - connection.username = cipher(connection.username || '') - connection.password = cipher(connection.password || '') + connection.username = cipher(connection.username || ''); + connection.password = cipher(connection.password || ''); return Promise.resolve().then(() => { if (!connection.createdDate) { - connection.createdDate = new Date() + connection.createdDate = new Date(); } - connection.modifiedDate = new Date() + connection.modifiedDate = new Date(); - connection = drivers.validateConnection(connection) - const { _id } = connection + connection = drivers.validateConnection(connection); + const { _id } = connection; if (_id) { return db.connections .update({ _id }, connection, {}) - .then(() => findOneById(_id)) + .then(() => findOneById(_id)); } return db.connections .insert(connection) - .then(newDoc => findOneById(newDoc._id)) - }) -} + .then(newDoc => findOneById(newDoc._id)); + }); +}; module.exports = { findAll, findOneById, removeOneById, save -} +}; diff --git a/server/routes/app.js b/server/routes/app.js index 913b98104..5d8fcd884 100644 --- a/server/routes/app.js +++ b/server/routes/app.js @@ -1,14 +1,14 @@ -const router = require('express').Router() -const passport = require('passport') -const version = require('../lib/version.js') -const User = require('../models/User.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const passport = require('passport'); +const version = require('../lib/version.js'); +const User = require('../models/User.js'); +const sendError = require('../lib/sendError'); // NOTE: this route needs a wildcard because it is fetched as a relative url // from the front-end. The static SPA does not know if sqlpad is mounted at // the root of a domain or if there is a base-url provided in the config router.get('*/api/app', function(req, res) { - const { config } = req + const { config } = req; return User.adminRegistrationOpen() .then(adminRegistrationOpen => { @@ -19,15 +19,15 @@ router.get('*/api/app', function(req, res) { email: req.user.email, role: req.user.role } - : undefined + : undefined; const strategies = Object.keys(passport._strategies).reduce( (prev, curr) => { - prev[curr] = true - return prev + prev[curr] = true; + return prev; }, {} - ) + ); res.json({ adminRegistrationOpen, @@ -39,9 +39,9 @@ router.get('*/api/app', function(req, res) { passport: { strategies } - }) + }); }) - .catch(error => sendError(res, error, 'Problem querying users')) -}) + .catch(error => sendError(res, error, 'Problem querying users')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/config-items.js b/server/routes/config-items.js index 5486f6763..ec3d98e5d 100644 --- a/server/routes/config-items.js +++ b/server/routes/config-items.js @@ -1,11 +1,11 @@ -const router = require('express').Router() -const mustBeAdmin = require('../middleware/must-be-admin.js') +const router = require('express').Router(); +const mustBeAdmin = require('../middleware/must-be-admin.js'); router.get('/api/config-items', mustBeAdmin, function(req, res) { - const { config } = req + const { config } = req; return res.json({ configItems: config.getConfigItems() - }) -}) + }); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/config-values.js b/server/routes/config-values.js index 52d5b0e28..68d2b12c9 100644 --- a/server/routes/config-values.js +++ b/server/routes/config-values.js @@ -1,13 +1,13 @@ -const router = require('express').Router() -const mustBeAdmin = require('../middleware/must-be-admin.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const mustBeAdmin = require('../middleware/must-be-admin.js'); +const sendError = require('../lib/sendError'); router.post('/api/config-values/:key', mustBeAdmin, function(req, res) { - const { body, config, params } = req + const { body, config, params } = req; config .save(params.key, body.value) .then(() => res.json({})) - .catch(error => sendError(res, error, 'Problem saving config value')) -}) + .catch(error => sendError(res, error, 'Problem saving config value')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/connections.js b/server/routes/connections.js index dbd857932..a77ae9020 100644 --- a/server/routes/connections.js +++ b/server/routes/connections.js @@ -1,12 +1,12 @@ -const router = require('express').Router() -const connections = require('../models/connections.js') -const mustBeAdmin = require('../middleware/must-be-admin.js') -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const connections = require('../models/connections.js'); +const mustBeAdmin = require('../middleware/must-be-admin.js'); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const sendError = require('../lib/sendError'); function removePassword(connection) { - connection.password = '' - return connection + connection.password = ''; + return connection; } router.get('/api/connections', mustBeAuthenticated, function(req, res) { @@ -19,24 +19,24 @@ router.get('/api/connections', mustBeAuthenticated, function(req, res) { ) .catch(error => sendError(res, error, 'Problem querying connection database') - ) -}) + ); +}); router.get('/api/connections/:_id', mustBeAuthenticated, function(req, res) { return connections .findOneById(req.params._id) .then(connection => { if (!connection) { - return sendError(res, null, 'Connection not found') + return sendError(res, null, 'Connection not found'); } return res.json({ connection: removePassword(connection) - }) + }); }) .catch(error => sendError(res, error, 'Problem querying connection database') - ) -}) + ); +}); router.post('/api/connections', mustBeAdmin, function(req, res) { return connections @@ -46,33 +46,33 @@ router.post('/api/connections', mustBeAdmin, function(req, res) { connection: removePassword(newConnection) }) ) - .catch(error => sendError(res, error, 'Problem saving connection')) -}) + .catch(error => sendError(res, error, 'Problem saving connection')); +}); router.put('/api/connections/:_id', mustBeAdmin, function(req, res) { return connections .findOneById(req.params._id) .then(connection => { if (!connection) { - return sendError(res, null, 'Connection not found') + return sendError(res, null, 'Connection not found'); } - Object.assign(connection, req.body) + Object.assign(connection, req.body); return connections.save(connection).then(connection => res.json({ connection: removePassword(connection) }) - ) + ); }) - .catch(error => sendError(res, error, 'Problem saving connection')) -}) + .catch(error => sendError(res, error, 'Problem saving connection')); +}); router.delete('/api/connections/:_id', mustBeAdmin, function(req, res) { return connections .removeOneById(req.params._id) .then(() => res.json({})) - .catch(error => sendError(res, error, 'Problem deleting connection')) -}) + .catch(error => sendError(res, error, 'Problem deleting connection')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/download-results.js b/server/routes/download-results.js index b13794de0..1e58b3c9d 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -1,56 +1,56 @@ -const fs = require('fs') -const router = require('express').Router() -const Cache = require('../models/Cache.js') +const fs = require('fs'); +const router = require('express').Router(); +const Cache = require('../models/Cache.js'); router.get('/download-results/:cacheKey.csv', function(req, res, next) { - const { config } = req + const { config } = req; if (config.get('allowCsvDownload')) { return Cache.findOneByCacheKey(req.params.cacheKey) .then(cache => { if (!cache) { - return next(new Error('Cache not found')) + return next(new Error('Cache not found')); } - var filename = cache.queryName + '.csv' + var filename = cache.queryName + '.csv'; res.setHeader( 'Content-disposition', 'attachment; filename="' + encodeURIComponent(filename) + '"' - ) - res.setHeader('Content-Type', 'text/csv') - fs.createReadStream(cache.csvFilePath()).pipe(res) + ); + res.setHeader('Content-Type', 'text/csv'); + fs.createReadStream(cache.csvFilePath()).pipe(res); }) .catch(error => { - console.error(error) + console.error(error); // TODO figure out what this sends and set manually - return next(error) - }) + return next(error); + }); } -}) +}); router.get('/download-results/:cacheKey.xlsx', function(req, res, next) { - const { config } = req + const { config } = req; if (config.get('allowCsvDownload')) { return Cache.findOneByCacheKey(req.params.cacheKey) .then(cache => { if (!cache) { - return next(new Error('Cache not found')) + return next(new Error('Cache not found')); } - var filename = cache.queryName + '.xlsx' + var filename = cache.queryName + '.xlsx'; res.setHeader( 'Content-disposition', 'attachment; filename="' + encodeURIComponent(filename) + '"' - ) + ); res.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' - ) - fs.createReadStream(cache.xlsxFilePath()).pipe(res) + ); + fs.createReadStream(cache.xlsxFilePath()).pipe(res); }) .catch(error => { - console.error(error) + console.error(error); // TODO figure out what this sends and set manually - return next(error) - }) + return next(error); + }); } -}) +}); -module.exports = router +module.exports = router; diff --git a/server/routes/drivers.js b/server/routes/drivers.js index 52a11ba67..01d13864c 100644 --- a/server/routes/drivers.js +++ b/server/routes/drivers.js @@ -1,16 +1,16 @@ -const router = require('express').Router() -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const drivers = require('../drivers') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const drivers = require('../drivers'); +const sendError = require('../lib/sendError'); router.get('/api/drivers', mustBeAuthenticated, function(req, res) { try { return res.json({ drivers: drivers.getDrivers() - }) + }); } catch (error) { - return sendError(res, error, 'Error getting drivers') + return sendError(res, error, 'Error getting drivers'); } -}) +}); -module.exports = router +module.exports = router; diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index b994d83f5..fdde65037 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -1,17 +1,17 @@ -const router = require('express').Router() -const uuid = require('uuid') -const User = require('../models/User.js') -const email = require('../lib/email') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const uuid = require('uuid'); +const User = require('../models/User.js'); +const email = require('../lib/email'); +const sendError = require('../lib/sendError'); router.post('/api/forgot-password', function(req, res) { - const { config } = req + const { config } = req; if (!req.body.email) { - return sendError(res, null, 'Email address must be provided') + return sendError(res, null, 'Email address must be provided'); } if (!config.smtpConfigured()) { - return sendError(res, null, 'Email must be configured') + return sendError(res, null, 'Email must be configured'); } return User.findOneByEmail(req.body.email) @@ -19,22 +19,22 @@ router.post('/api/forgot-password', function(req, res) { // If user not found send success regardless // This is not a user-validation service if (!user) { - return res.json({}) + return res.json({}); } - user.passwordResetId = uuid.v4() + user.passwordResetId = uuid.v4(); return user.save().then(() => { - const resetPath = `/password-reset/${user.passwordResetId}` + const resetPath = `/password-reset/${user.passwordResetId}`; // Send email, but do not block response to client email .sendForgotPassword(req.body.email, resetPath) - .catch(error => console.error(error)) + .catch(error => console.error(error)); - return res.json({}) - }) + return res.json({}); + }); }) - .catch(error => sendError(res, error, 'Problem saving user')) -}) + .catch(error => sendError(res, error, 'Problem saving user')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/homepage.js b/server/routes/homepage.js index f0b4b830f..3b6e938d5 100644 --- a/server/routes/homepage.js +++ b/server/routes/homepage.js @@ -1,25 +1,25 @@ -const router = require('express').Router() -const connections = require('../models/connections.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const connections = require('../models/connections.js'); +const sendError = require('../lib/sendError'); // TODO FIXME - This was meant to redirect user to appropriate page depending on state of setup // I do not think it works anymore and should be revisited (this can be done client-side too) router.get('/', function(req, res, next) { - const { config } = req - const BASE_URL = config.get('baseUrl') + const { config } = req; + const BASE_URL = config.get('baseUrl'); return connections .findAll() .then(docs => { if (!req.user) { - return res.redirect(BASE_URL + '/signin') + return res.redirect(BASE_URL + '/signin'); } if (docs.length === 0 && req.user.role === 'admin') { - return res.redirect(BASE_URL + '/connections') + return res.redirect(BASE_URL + '/connections'); } - return res.redirect(BASE_URL + '/queries') + return res.redirect(BASE_URL + '/queries'); }) - .catch(error => sendError(res, error)) -}) + .catch(error => sendError(res, error)); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/oauth.js b/server/routes/oauth.js index 98c07b2cc..6407f7501 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -1,11 +1,11 @@ -const passport = require('passport') -const router = require('express').Router() -const { baseUrl } = require('../lib/config').getPreDbConfig() +const passport = require('passport'); +const router = require('express').Router(); +const { baseUrl } = require('../lib/config').getPreDbConfig(); router.get( '/auth/google', passport.authenticate('google', { scope: ['profile email'] }) -) +); router.get( '/auth/google/callback', @@ -13,6 +13,6 @@ router.get( successRedirect: baseUrl + '/', failureRedirect: baseUrl + '/signin' }) -) +); -module.exports = router +module.exports = router; diff --git a/server/routes/password-reset.js b/server/routes/password-reset.js index 1b4110b67..315b11992 100644 --- a/server/routes/password-reset.js +++ b/server/routes/password-reset.js @@ -1,25 +1,25 @@ -const router = require('express').Router() -const User = require('../models/User.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const User = require('../models/User.js'); +const sendError = require('../lib/sendError'); // This route used to set new password given a passwordResetId router.post('/api/password-reset/:passwordResetId', function(req, res) { return User.findOneByPasswordResetId(req.params.passwordResetId) .then(user => { if (!user) { - return sendError(res, null, 'Password reset permissions not found') + return sendError(res, null, 'Password reset permissions not found'); } if (req.body.email !== user.email) { - return sendError(res, null, 'Incorrect email address') + return sendError(res, null, 'Incorrect email address'); } if (req.body.password !== req.body.passwordConfirmation) { - return sendError(res, null, 'Passwords do not match') + return sendError(res, null, 'Passwords do not match'); } - user.password = req.body.password - user.passwordResetId = '' - return user.save().then(() => res.json({})) + user.password = req.body.password; + user.passwordResetId = ''; + return user.save().then(() => res.json({})); }) - .catch(error => sendError(res, error, 'Problem querying user database')) -}) + .catch(error => sendError(res, error, 'Problem querying user database')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/queries.js b/server/routes/queries.js index 0cdd5cb01..4b07db13f 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -1,8 +1,8 @@ -const router = require('express').Router() -const Query = require('../models/Query.js') -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const Query = require('../models/Query.js'); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); +const sendError = require('../lib/sendError'); /* render page routes ============================================================================= */ @@ -13,15 +13,15 @@ router.get('/queries/:_id', mustBeAuthenticatedOrChartLink, function( res, next ) { - const { config, query, params } = req - const { format } = query + const { config, query, params } = req; + const { format } = query; if (format === 'table') { - return res.redirect(config.get('baseUrl') + '/query-table/' + params._id) + return res.redirect(config.get('baseUrl') + '/query-table/' + params._id); } else if (format === 'chart') { - return res.redirect(config.get('baseUrl') + '/query-chart/' + params._id) + return res.redirect(config.get('baseUrl') + '/query-chart/' + params._id); } - next() -}) + next(); +}); /* API routes ============================================================================= */ @@ -29,14 +29,14 @@ router.get('/queries/:_id', mustBeAuthenticatedOrChartLink, function( router.delete('/api/queries/:_id', mustBeAuthenticated, function(req, res) { return Query.removeOneById(req.params._id) .then(() => res.json({})) - .catch(error => sendError(res, error, 'Problem deleting query')) -}) + .catch(error => sendError(res, error, 'Problem deleting query')); +}); router.get('/api/queries', mustBeAuthenticated, function(req, res) { return Query.findAll() .then(queries => res.json({ queries })) - .catch(error => sendError(res, error, 'Problem querying query database')) -}) + .catch(error => sendError(res, error, 'Problem querying query database')); +}); router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, function( req, @@ -47,12 +47,12 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, function( if (!query) { return res.json({ query: {} - }) + }); } - return res.json({ query }) + return res.json({ query }); }) - .catch(error => sendError('Problem getting query')) -}) + .catch(error => sendError('Problem getting query')); +}); // create new router.post('/api/queries', mustBeAuthenticated, function(req, res) { @@ -64,36 +64,36 @@ router.post('/api/queries', mustBeAuthenticated, function(req, res) { chartConfiguration: req.body.chartConfiguration, createdBy: req.user.email, modifiedBy: req.user.email - }) + }); return query .save() .then(newQuery => { // This is async, but save operation doesn't care about when/if finished - newQuery.pushQueryToSlackIfSetup() + newQuery.pushQueryToSlackIfSetup(); return res.json({ query: newQuery - }) + }); }) - .catch(error => sendError(res, error, 'Problem saving query')) -}) + .catch(error => sendError(res, error, 'Problem saving query')); +}); router.put('/api/queries/:_id', mustBeAuthenticated, function(req, res) { return Query.findOneById(req.params._id) .then(query => { if (!query) { - return sendError(res, null, 'Query not found') + return sendError(res, null, 'Query not found'); } - query.name = req.body.name || '' - query.tags = req.body.tags - query.connectionId = req.body.connectionId - query.queryText = req.body.queryText - query.chartConfiguration = req.body.chartConfiguration - query.modifiedBy = req.user.email + query.name = req.body.name || ''; + query.tags = req.body.tags; + query.connectionId = req.body.connectionId; + query.queryText = req.body.queryText; + query.chartConfiguration = req.body.chartConfiguration; + query.modifiedBy = req.user.email; - return query.save().then(newQuery => res.json({ query: newQuery })) + return query.save().then(newQuery => res.json({ query: newQuery })); }) - .catch(error => sendError(res, error, 'Problem saving query')) -}) + .catch(error => sendError(res, error, 'Problem saving query')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/query-result.js b/server/routes/query-result.js index fe45a8d47..9956db4af 100644 --- a/server/routes/query-result.js +++ b/server/routes/query-result.js @@ -1,13 +1,13 @@ -const sanitize = require('sanitize-filename') -const moment = require('moment') -const router = require('express').Router() -const { runQuery } = require('../drivers/index') -const connections = require('../models/connections.js') -const Cache = require('../models/Cache.js') -const Query = require('../models/Query.js') -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js') -const sendError = require('../lib/sendError') +const sanitize = require('sanitize-filename'); +const moment = require('moment'); +const router = require('express').Router(); +const { runQuery } = require('../drivers/index'); +const connections = require('../models/connections.js'); +const Cache = require('../models/Cache.js'); +const Query = require('../models/Query.js'); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); +const sendError = require('../lib/sendError'); // This allows executing a query relying on the saved query text // Instead of relying on an open endpoint that executes arbitrary sql @@ -18,7 +18,7 @@ router.get( return Query.findOneById(req.params._queryId) .then(query => { if (!query) { - return sendError(res, null, 'Query not found (save query first)') + return sendError(res, null, 'Query not found (save query first)'); } const data = { connectionId: query.connectionId, @@ -26,15 +26,15 @@ router.get( queryName: query.name, queryText: query.queryText, config: req.config - } + }; // NOTE: Sends actual error here since it might have info on why the query is bad return getQueryResult(data) .then(queryResult => res.send({ queryResult })) - .catch(error => sendError(res, error)) + .catch(error => sendError(res, error)); }) - .catch(error => sendError(res, error, 'Problem querying query database')) + .catch(error => sendError(res, error, 'Problem querying query database')); } -) +); // Accepts raw inputs from client // Used during query editing @@ -46,59 +46,59 @@ router.post('/api/query-result', mustBeAuthenticated, function(req, res) { queryName: req.body.queryName, queryText: req.body.queryText, user: req.user - } + }; return getQueryResult(data) .then(queryResult => res.send({ queryResult })) - .catch(error => sendError(res, error)) -}) + .catch(error => sendError(res, error)); +}); function getQueryResult(data) { return connections .findOneById(data.connectionId) .then(connection => { if (!connection) { - throw new Error('Please choose a connection') + throw new Error('Please choose a connection'); } - connection.maxRows = Number(data.config.get('queryResultMaxRows')) - data.connection = connection - return Cache.findOneByCacheKey(data.cacheKey) + connection.maxRows = Number(data.config.get('queryResultMaxRows')); + data.connection = connection; + return Cache.findOneByCacheKey(data.cacheKey); }) .then(cache => { if (!cache) { - cache = new Cache({ cacheKey: data.cacheKey }) + cache = new Cache({ cacheKey: data.cacheKey }); } cache.queryName = sanitize( (data.queryName || 'SQLPad Query Results') + ' ' + moment().format('YYYY-MM-DD') - ) + ); // Expire cache in 8 hours - const now = new Date() - cache.expiration = new Date(now.getTime() + 1000 * 60 * 60 * 8) - return cache.save() + const now = new Date(); + cache.expiration = new Date(now.getTime() + 1000 * 60 * 60 * 8); + return cache.save(); }) .then(newCache => { - data.cache = newCache + data.cache = newCache; return runQuery(data.queryText, data.connection, data.user).then( queryResult => { - data.queryResult = queryResult - data.queryResult.cacheKey = data.cacheKey + data.queryResult = queryResult; + data.queryResult.cacheKey = data.cacheKey; } - ) + ); }) .then(() => { if (data.config.get('allowCsvDownload')) { - const queryResult = data.queryResult - const cache = data.cache + const queryResult = data.queryResult; + const cache = data.cache; return cache .writeXlsx(queryResult) - .then(() => cache.writeCsv(queryResult)) + .then(() => cache.writeCsv(queryResult)); } }) .then(() => { - return data && data.queryResult ? data.queryResult : null - }) + return data && data.queryResult ? data.queryResult : null; + }); } -module.exports = router +module.exports = router; diff --git a/server/routes/schema-info.js b/server/routes/schema-info.js index 2cafa7f20..97ef161f0 100644 --- a/server/routes/schema-info.js +++ b/server/routes/schema-info.js @@ -1,57 +1,57 @@ -const router = require('express').Router() -const connections = require('../models/connections') -const Cache = require('../models/Cache.js') -const driver = require('../drivers') -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const connections = require('../models/connections'); +const Cache = require('../models/Cache.js'); +const driver = require('../drivers'); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const sendError = require('../lib/sendError'); router.get('/api/schema-info/:connectionId', mustBeAuthenticated, function( req, res ) { - const reload = req.query.reload === 'true' - const cacheKey = 'schemaCache:' + req.params.connectionId + const reload = req.query.reload === 'true'; + const cacheKey = 'schemaCache:' + req.params.connectionId; return Promise.all([ connections.findOneById(req.params.connectionId), // This has problems in TravisCI for some reason... Cache.findOneByCacheKey(cacheKey) ]) .then(results => { - let [conn, cache] = results + let [conn, cache] = results; if (!conn) { - throw new Error('Connection not found') + throw new Error('Connection not found'); } if (cache && !reload) { const schemaInfo = typeof cache.schema === 'string' ? JSON.parse(cache.schema) - : cache.schema + : cache.schema; - return res.json({ schemaInfo }) + return res.json({ schemaInfo }); } if (!cache) { - cache = new Cache({ cacheKey }) + cache = new Cache({ cacheKey }); } return driver.getSchema(conn).then(schemaInfo => { if (Object.keys(schemaInfo).length) { // Schema needs to be stringified as JSON // Column names could have dots in name (incompatible with nedb) - cache.schema = JSON.stringify(schemaInfo) - cache.save().catch(error => console.log(error)) + cache.schema = JSON.stringify(schemaInfo); + cache.save().catch(error => console.log(error)); } - return res.json({ schemaInfo }) - }) + return res.json({ schemaInfo }); + }); }) .catch(error => { if (error.message === 'Connection not found') { - return sendError(res, error) + return sendError(res, error); } - sendError(res, error, 'Problem getting schema info') - }) -}) + sendError(res, error, 'Problem getting schema info'); + }); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index 418e4d8b1..ec429abcd 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -1,34 +1,34 @@ -const passport = require('passport') -const router = require('express').Router() -const checkWhitelist = require('../lib/check-whitelist') -const User = require('../models/User.js') -const sendError = require('../lib/sendError') +const passport = require('passport'); +const router = require('express').Router(); +const checkWhitelist = require('../lib/check-whitelist'); +const User = require('../models/User.js'); +const sendError = require('../lib/sendError'); // NOTE: getting config here during module init is okay // since these configs are set via env or cli -const { disableUserpassAuth } = require('../lib/config').getPreDbConfig() +const { disableUserpassAuth } = require('../lib/config').getPreDbConfig(); /* Some routes should only exist if userpath auth is enabled ============================================================================= */ if (!disableUserpassAuth) { router.post('/api/signup', function(req, res) { - const whitelistedDomains = req.config.get('whitelistedDomains') + const whitelistedDomains = req.config.get('whitelistedDomains'); if (req.body.password !== req.body.passwordConfirmation) { - return sendError(res, null, 'Passwords do not match') + return sendError(res, null, 'Passwords do not match'); } return Promise.all([ User.findOneByEmail(req.body.email), User.adminRegistrationOpen() ]) .then(data => { - let [user, adminRegistrationOpen] = data + let [user, adminRegistrationOpen] = data; if (user && user.passhash) { - return sendError(res, null, 'User already signed up') + return sendError(res, null, 'User already signed up'); } if (user) { - user.password = req.body.password - user.signupDate = new Date() + user.password = req.body.password; + user.signupDate = new Date(); } if (!user) { // if open admin registration or whitelisted email create user @@ -42,37 +42,37 @@ if (!disableUserpassAuth) { password: req.body.password, role: adminRegistrationOpen ? 'admin' : 'editor', signupDate: new Date() - }) + }); } else { - return sendError(res, null, 'Email address not whitelisted') + return sendError(res, null, 'Email address not whitelisted'); } } - return user.save().then(newUser => res.json({})) + return user.save().then(newUser => res.json({})); }) - .catch(error => sendError(res, error, 'Error saving user')) - }) + .catch(error => sendError(res, error, 'Error saving user')); + }); router.post('/api/signin', passport.authenticate('local'), function( req, res ) { // if it makes it here, the authentication succeded - res.json({}) - }) + res.json({}); + }); } /* These auth routes should always exist regardless of strategy ============================================================================= */ router.get('/api/signout', function(req, res) { if (!req.session) { - return res.json({}) + return res.json({}); } req.session.destroy(function(err) { if (err) { - console.error(err) + console.error(err); } - res.json({}) - }) -}) + res.json({}); + }); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/tags.js b/server/routes/tags.js index 428036592..d0b39bd4b 100644 --- a/server/routes/tags.js +++ b/server/routes/tags.js @@ -1,21 +1,21 @@ -const _ = require('lodash') -const router = require('express').Router() -const Query = require('../models/Query.js') -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const sendError = require('../lib/sendError') +const _ = require('lodash'); +const router = require('express').Router(); +const Query = require('../models/Query.js'); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const sendError = require('../lib/sendError'); router.get('/api/tags', mustBeAuthenticated, function(req, res) { return Query.findAll() .then(queries => { const tags = _.uniq(_.flatten(_.map(queries, 'tags'))) .sort() - .filter(t => t) + .filter(t => t); return res.json({ tags: tags - }) + }); }) - .catch(error => sendError(res, error, 'Problem getting tags')) -}) + .catch(error => sendError(res, error, 'Problem getting tags')); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/test-connection.js b/server/routes/test-connection.js index fba4fdcd0..161621b49 100644 --- a/server/routes/test-connection.js +++ b/server/routes/test-connection.js @@ -1,16 +1,16 @@ -const router = require('express').Router() -const { testConnection } = require('../drivers/index') -const mustBeAdmin = require('../middleware/must-be-admin.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const { testConnection } = require('../drivers/index'); +const mustBeAdmin = require('../middleware/must-be-admin.js'); +const sendError = require('../lib/sendError'); /** * A non-error response is considered a success or valid connection config */ router.post('/api/test-connection', mustBeAdmin, function(req, res) { - const { body } = req + const { body } = req; return testConnection(body) .then(queryResult => res.send({ success: true })) - .catch(error => sendError(res, error)) -}) + .catch(error => sendError(res, error)); +}); -module.exports = router +module.exports = router; diff --git a/server/routes/users.js b/server/routes/users.js index 454d8d9f7..6a522928d 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -1,68 +1,68 @@ -const router = require('express').Router() -const User = require('../models/User.js') -const email = require('../lib/email') -const mustBeAdmin = require('../middleware/must-be-admin.js') -const mustBeAuthenticated = require('../middleware/must-be-authenticated.js') -const sendError = require('../lib/sendError') +const router = require('express').Router(); +const User = require('../models/User.js'); +const email = require('../lib/email'); +const mustBeAdmin = require('../middleware/must-be-admin.js'); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const sendError = require('../lib/sendError'); router.get('/api/users', mustBeAuthenticated, function(req, res) { return User.findAll() .then(users => res.json({ users })) - .catch(error => sendError(res, error, 'Problem getting uers')) -}) + .catch(error => sendError(res, error, 'Problem getting uers')); +}); // create/whitelist/invite user router.post('/api/users', mustBeAdmin, function(req, res) { - const { config } = req + const { config } = req; return User.findOneByEmail(req.body.email) .then(user => { if (user) { - return sendError(res, null, 'User already exists') + return sendError(res, null, 'User already exists'); } const newUser = new User({ email: req.body.email.toLowerCase(), role: req.body.role - }) + }); return newUser.save().then(user => { if (config.smtpConfigured()) { - email.sendInvite(req.body.email).catch(error => console.error(error)) + email.sendInvite(req.body.email).catch(error => console.error(error)); } - return res.json({ user }) - }) + return res.json({ user }); + }); }) - .catch(error => sendError(res, error, 'Problem saving user')) -}) + .catch(error => sendError(res, error, 'Problem saving user')); +}); router.put('/api/users/:_id', mustBeAdmin, function(req, res) { - const { params, body, user } = req + const { params, body, user } = req; if (user._id === params._id && user.role === 'admin' && body.role != null) { - return sendError(res, null, "You can't unadmin yourself") + return sendError(res, null, "You can't unadmin yourself"); } return User.findOneById(params._id) .then(user => { if (!user) { - return sendError(res, null, 'user not found') + return sendError(res, null, 'user not found'); } // this route could handle potentially different kinds of updates // only update user properties that are explicitly provided in body if (body.role != null) { - user.role = body.role + user.role = body.role; } if (body.passwordResetId != null) { - user.passwordResetId = body.passwordResetId + user.passwordResetId = body.passwordResetId; } - return user.save().then(() => res.json({ user })) + return user.save().then(() => res.json({ user })); }) - .catch(error => sendError(res, error, 'Problem saving user')) -}) + .catch(error => sendError(res, error, 'Problem saving user')); +}); router.delete('/api/users/:_id', mustBeAdmin, function(req, res) { if (req.user._id === req.params._id) { - return sendError(res, null, "You can't delete yourself") + return sendError(res, null, "You can't delete yourself"); } return User.removeOneById(req.params._id) .then(() => res.json({})) - .catch(error => sendError(res, error, 'Problem deleting user')) -}) + .catch(error => sendError(res, error, 'Problem deleting user')); +}); -module.exports = router +module.exports = router; diff --git a/server/server.js b/server/server.js index d33b92e56..4fb9ae34d 100755 --- a/server/server.js +++ b/server/server.js @@ -1,14 +1,14 @@ #!/usr/bin/env node -const fs = require('fs') -const http = require('http') -const https = require('https') -const detectPort = require('detect-port') +const fs = require('fs'); +const http = require('http'); +const https = require('https'); +const detectPort = require('detect-port'); // Parse command line flags to see if anything special needs to happen -require('./lib/cli-flow.js') +require('./lib/cli-flow.js'); -const app = require('./app') +const app = require('./app'); const { baseUrl, ip, @@ -18,11 +18,11 @@ const { keyPath, certPath, systemdSocket -} = require('./lib/config').getPreDbConfig() -const db = require('./lib/db') +} = require('./lib/config').getPreDbConfig(); +const db = require('./lib/db'); function isFdObject(ob) { - return ob && typeof ob.fd === 'number' + return ob && typeof ob.fd === 'number'; } // When --systemd-socket is passed we will try to acquire the bound socket @@ -35,31 +35,31 @@ function isFdObject(ob) { // https://www.freedesktop.org/software/systemd/man/sd_listen_fds.html function detectPortOrSystemd(port) { if (systemdSocket) { - const passedSocketCount = parseInt(process.env.LISTEN_FDS, 10) || 0 + const passedSocketCount = parseInt(process.env.LISTEN_FDS, 10) || 0; // LISTEN_FDS contains number of sockets passed by Systemd. At least one // must be passed. The sockets are set to file descriptors starting from 3. // We just crab the first socket from fd 3 since sqlpad binds only one // port. if (passedSocketCount > 0) { - console.log('Using port from Systemd') - return Promise.resolve({ fd: 3 }) + console.log('Using port from Systemd'); + return Promise.resolve({ fd: 3 }); } else { console.error( 'Warning: Systemd socket asked but not found. Trying to bind port ' + port + ' manually' - ) + ); } } - return detectPort(port) + return detectPort(port); } /* Start the Server ============================================================================= */ db.onLoad(function(err) { - if (err) throw err + if (err) throw err; // determine if key pair exists for certs if (keyPath && certPath) { @@ -70,25 +70,25 @@ db.onLoad(function(err) { '\nPort %d already occupied. Using port %d instead.', httpsPort, _port - ) + ); // TODO FIXME XXX Persist the new port to the in-memory store. // config.set('httpsPort', _port) } - const privateKey = fs.readFileSync(keyPath, 'utf8') - const certificate = fs.readFileSync(certPath, 'utf8') + const privateKey = fs.readFileSync(keyPath, 'utf8'); + const certificate = fs.readFileSync(certPath, 'utf8'); const httpsOptions = { key: privateKey, cert: certificate, passphrase: certPassphrase - } + }; https.createServer(httpsOptions, app).listen(_port, ip, function() { - const hostIp = ip === '0.0.0.0' ? 'localhost' : ip - const url = `https://${hostIp}:${_port}${baseUrl}` - console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`) - }) - }) + const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; + const url = `https://${hostIp}:${_port}${baseUrl}`; + console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); + }); + }); } else { // http only detectPortOrSystemd(port).then(function(_port) { @@ -97,15 +97,15 @@ db.onLoad(function(err) { '\nPort %d already occupied. Using port %d instead.', port, _port - ) + ); // TODO FIXME XXX Persist the new port to the in-memory store. // config.set('port', _port) } http.createServer(app).listen(_port, ip, function() { - const hostIp = ip === '0.0.0.0' ? 'localhost' : ip - const url = `http://${hostIp}:${_port}${baseUrl}` - console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`) - }) - }) + const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; + const url = `http://${hostIp}:${_port}${baseUrl}`; + console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); + }); + }); } -}) +}); diff --git a/server/test/api/app.js b/server/test/api/app.js index 1ef657294..de8e78460 100644 --- a/server/test/api/app.js +++ b/server/test/api/app.js @@ -1,5 +1,5 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); const expectedKeys = [ 'adminRegistrationOpen', @@ -8,7 +8,7 @@ const expectedKeys = [ 'googleAuthConfigured', 'version', 'passport' -] +]; const expectedConfigKeys = [ 'baseUrl', @@ -17,24 +17,24 @@ const expectedConfigKeys = [ 'queryResultMaxRows', 'showSchemaCopyButton', 'publicUrl' -] +]; describe('api/app', function() { it('returns expected values', function() { return utils.get(null, '/api/app').then(body => { - utils.expectKeys(body, expectedKeys) - utils.expectKeys(body.config, expectedConfigKeys) + utils.expectKeys(body, expectedKeys); + utils.expectKeys(body.config, expectedConfigKeys); assert.equal( Object.keys(body.config).length, expectedConfigKeys.length, 'config should only have keys specified' - ) - }) - }) + ); + }); + }); it('handles unknown baseUrl', function() { return utils .get(null, '/literally/any/path/api/app') - .then(body => utils.expectKeys(body, expectedKeys)) - }) -}) + .then(body => utils.expectKeys(body, expectedKeys)); + }); +}); diff --git a/server/test/api/config-values.js b/server/test/api/config-values.js index dea9729dd..15cd40132 100644 --- a/server/test/api/config-values.js +++ b/server/test/api/config-values.js @@ -1,38 +1,38 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api config-item & config-values', function() { before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('GET api/config-items (check default)', function() { return utils.get('admin', '/api/config-items').then(body => { - const { configItems, error } = body - assert(!error, 'Expect no error') - const item = configItems.find(i => i.key === 'allowCsvDownload') + const { configItems, error } = body; + assert(!error, 'Expect no error'); + const item = configItems.find(i => i.key === 'allowCsvDownload'); assert.equal( item.default, item.effectiveValue, 'default is effectiveValue' - ) - }) - }) + ); + }); + }); it('POST api/config-values (change value)', function() { return utils .post('admin', '/api/config-values/allowCsvDownload', { value: false }) - .then(body => assert(!body.error, 'Expect no error')) - }) + .then(body => assert(!body.error, 'Expect no error')); + }); it('GET api/config-items (validate change)', function() { return utils.get('admin', '/api/config-items').then(body => { - const { configItems, error } = body - assert(!error, 'Expect no error') - const item = configItems.find(i => i.key === 'allowCsvDownload') - assert.equal(item.effectiveValue, false, 'default is effectiveValue') - }) - }) -}) + const { configItems, error } = body; + assert(!error, 'Expect no error'); + const item = configItems.find(i => i.key === 'allowCsvDownload'); + assert.equal(item.effectiveValue, false, 'default is effectiveValue'); + }); + }); +}); diff --git a/server/test/api/connections.js b/server/test/api/connections.js index 299f34e6b..e389114a1 100644 --- a/server/test/api/connections.js +++ b/server/test/api/connections.js @@ -1,20 +1,20 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/connections', function() { - let connection + let connection; before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('Returns empty array', function() { return utils.get('admin', '/api/connections').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.connections), 'connections is an array') - assert.equal(body.connections.length, 0, '0 length') - }) - }) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.connections), 'connections is an array'); + assert.equal(body.connections.length, 0, '0 length'); + }); + }); it('Creates connection', function() { return utils @@ -27,19 +27,19 @@ describe('api/connections', function() { password: 'password' }) .then(body => { - assert(!body.error, 'no error') - assert(body.connection._id, 'has _id') - assert.equal(body.connection.driver, 'postgres') - assert.equal(body.connection.username, 'username') - connection = body.connection - }) - }) + assert(!body.error, 'no error'); + assert(body.connection._id, 'has _id'); + assert.equal(body.connection.driver, 'postgres'); + assert.equal(body.connection.username, 'username'); + connection = body.connection; + }); + }); it('Gets array of 1', function() { return utils .get('admin', '/api/connections') - .then(body => assert.equal(body.connections.length, 1, '0 length')) - }) + .then(body => assert.equal(body.connections.length, 1, '0 length')); + }); it('Updates connection', function() { return utils @@ -52,26 +52,26 @@ describe('api/connections', function() { password: 'password' }) .then(body => { - assert(!body.error, 'no error') - assert(body.connection._id, 'has _id') - assert.equal(body.connection.name, 'test connection update') - assert.equal(body.connection.driver, 'postgres') - assert.equal(body.connection.username, 'username') - }) - }) + assert(!body.error, 'no error'); + assert(body.connection._id, 'has _id'); + assert.equal(body.connection.name, 'test connection update'); + assert.equal(body.connection.driver, 'postgres'); + assert.equal(body.connection.username, 'username'); + }); + }); it('Gets updated connection', function() { return utils .get('admin', `/api/connections/${connection._id}`) .then(body => { - assert(!body.error, 'no error') - assert.equal(body.connection.name, 'test connection update') - }) - }) + assert(!body.error, 'no error'); + assert.equal(body.connection.name, 'test connection update'); + }); + }); it('Requires authentication', function() { - return utils.get(null, `/api/connections/${connection._id}`, 302) - }) + return utils.get(null, `/api/connections/${connection._id}`, 302); + }); it('Create requires admin', function() { return utils.post( @@ -86,20 +86,20 @@ describe('api/connections', function() { password: 'password' }, 403 - ) - }) + ); + }); it('Deletes connection', function() { return utils .del('admin', `/api/connections/${connection._id}`) - .then(body => assert(!body.error, 'no error')) - }) + .then(body => assert(!body.error, 'no error')); + }); it('Returns empty array', function() { return utils.get('admin', '/api/connections').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.connections), 'connections is an array') - assert.equal(body.connections.length, 0, '0 length') - }) - }) -}) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.connections), 'connections is an array'); + assert.equal(body.connections.length, 0, '0 length'); + }); + }); +}); diff --git a/server/test/api/drivers.js b/server/test/api/drivers.js index 95c8bd7fb..af1046049 100644 --- a/server/test/api/drivers.js +++ b/server/test/api/drivers.js @@ -1,16 +1,16 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/drivers', function() { before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('gets drivers', function() { return utils.get('editor', '/api/drivers').then(body => { - const { drivers, error } = body - assert(!error, 'Expect no error') - assert(drivers.find(i => i.id === 'postgres'), 'has postgres') - }) - }) -}) + const { drivers, error } = body; + assert(!error, 'Expect no error'); + assert(drivers.find(i => i.id === 'postgres'), 'has postgres'); + }); + }); +}); diff --git a/server/test/api/password-reset.js b/server/test/api/password-reset.js index 20ccbceb3..8d1e39201 100644 --- a/server/test/api/password-reset.js +++ b/server/test/api/password-reset.js @@ -1,20 +1,20 @@ -const assert = require('assert') -const utils = require('../utils') -const uuid = require('uuid') -const User = require('../../models/User') +const assert = require('assert'); +const utils = require('../utils'); +const uuid = require('uuid'); +const User = require('../../models/User'); function setReset() { return User.findOneByEmail('admin@test.com').then(user => { - const passwordResetId = uuid.v4() - user.passwordResetId = passwordResetId - return user.save().then(() => passwordResetId) - }) + const passwordResetId = uuid.v4(); + user.passwordResetId = passwordResetId; + return user.save().then(() => passwordResetId); + }); } describe('api/password-reset', function() { before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('Allows resetting password', function() { return setReset().then(passwordResetId => { @@ -24,9 +24,9 @@ describe('api/password-reset', function() { password: 'admin', passwordConfirmation: 'admin' }) - .then(body => assert(!body.error, 'Expect no error')) - }) - }) + .then(body => assert(!body.error, 'Expect no error')); + }); + }); it('Errors for wrong passwordResetId', function() { return setReset().then(passwordResetId => { @@ -36,9 +36,9 @@ describe('api/password-reset', function() { password: 'admin', passwordConfirmation: 'admin' }) - .then(body => assert(body.error, 'Expect error')) - }) - }) + .then(body => assert(body.error, 'Expect error')); + }); + }); it('Errors for wrong email', function() { return setReset().then(passwordResetId => { @@ -48,9 +48,9 @@ describe('api/password-reset', function() { password: 'admin', passwordConfirmation: 'admin' }) - .then(body => assert(body.error, 'Expect error')) - }) - }) + .then(body => assert(body.error, 'Expect error')); + }); + }); it('Errors for mismatched passwords', function() { return setReset().then(passwordResetId => { @@ -60,7 +60,7 @@ describe('api/password-reset', function() { password: 'admin2', passwordConfirmation: 'admin' }) - .then(body => assert(body.error, 'Expect error')) - }) - }) -}) + .then(body => assert(body.error, 'Expect error')); + }); + }); +}); diff --git a/server/test/api/queries.js b/server/test/api/queries.js index dba7799eb..468345e6f 100644 --- a/server/test/api/queries.js +++ b/server/test/api/queries.js @@ -1,20 +1,20 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/queries', function() { - let query + let query; before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('Returns empty array', function() { return utils.get('admin', '/api/queries').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.queries), 'queries is an array') - assert.equal(body.queries.length, 0, '0 length') - }) - }) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.queries), 'queries is an array'); + assert.equal(body.queries.length, 0, '0 length'); + }); + }); it('Creates query', function() { return utils @@ -32,18 +32,18 @@ describe('api/queries', function() { } }) .then(body => { - assert(!body.error, 'no error') - assert(body.query._id, 'has _id') - assert.equal(body.query.name, 'test query') - query = body.query - }) - }) + assert(!body.error, 'no error'); + assert(body.query._id, 'has _id'); + assert.equal(body.query.name, 'test query'); + query = body.query; + }); + }); it('Gets array of 1', function() { return utils.get('admin', '/api/queries').then(body => { - assert.equal(body.queries.length, 1, '1 length') - }) - }) + assert.equal(body.queries.length, 1, '1 length'); + }); + }); it('Updates query', function() { return utils @@ -53,34 +53,34 @@ describe('api/queries', function() { connectionId: 'TODO' }) .then(body => { - assert(!body.error, 'no error') - assert(body.query._id, 'has _id') - assert.equal(body.query.name, 'test query2') - }) - }) + assert(!body.error, 'no error'); + assert(body.query._id, 'has _id'); + assert.equal(body.query.name, 'test query2'); + }); + }); it('Gets updated connection', function() { return utils.get('admin', `/api/queries/${query._id}`).then(body => { - assert(!body.error, 'no error') - assert.equal(body.query.name, 'test query2') - }) - }) + assert(!body.error, 'no error'); + assert.equal(body.query.name, 'test query2'); + }); + }); it('Requires authentication', function() { - return utils.get(null, `/api/queries/${query._id}`, 302) - }) + return utils.get(null, `/api/queries/${query._id}`, 302); + }); it('Deletes query', function() { return utils.del('admin', `/api/queries/${query._id}`).then(body => { - assert(!body.error, 'no error') - }) - }) + assert(!body.error, 'no error'); + }); + }); it('Returns empty array', function() { return utils.get('admin', '/api/queries').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.queries), 'queries is an array') - assert.equal(body.queries.length, 0, '0 length') - }) - }) -}) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.queries), 'queries is an array'); + assert.equal(body.queries.length, 0, '0 length'); + }); + }); +}); diff --git a/server/test/api/query-result.js b/server/test/api/query-result.js index f4fdef7b4..88514683f 100644 --- a/server/test/api/query-result.js +++ b/server/test/api/query-result.js @@ -1,31 +1,31 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); const queryText = ` -- dimensions = department 10, orderdate 10 -- measures = cost, revenue, profit -- orderby = department desc, orderdate asc -- limit = 100 -` +`; function validateQueryResult(queryResult) { - assert(queryResult.id, 'id') - assert(queryResult.cacheKey, 'cacheKey') - assert(queryResult.startTime, 'startTime') - assert(queryResult.stopTime, 'stopTime') - assert(queryResult.queryRunTime >= 0, 'queryRunTime') - assert(Array.isArray(queryResult.fields), 'fields') - assert.equal(queryResult.fields.length, 5, 'fields length') - assert.equal(queryResult.fields[0], 'department', 'field department') - assert.equal(queryResult.incomplete, false, 'incomplete') - assert(queryResult.meta, 'meta') - assert(queryResult.meta.department, 'meta.department') - assert(Array.isArray(queryResult.rows), 'rows is array') - assert.equal(queryResult.rows.length, 100, 'rows length') + assert(queryResult.id, 'id'); + assert(queryResult.cacheKey, 'cacheKey'); + assert(queryResult.startTime, 'startTime'); + assert(queryResult.stopTime, 'stopTime'); + assert(queryResult.queryRunTime >= 0, 'queryRunTime'); + assert(Array.isArray(queryResult.fields), 'fields'); + assert.equal(queryResult.fields.length, 5, 'fields length'); + assert.equal(queryResult.fields[0], 'department', 'field department'); + assert.equal(queryResult.incomplete, false, 'incomplete'); + assert(queryResult.meta, 'meta'); + assert(queryResult.meta.department, 'meta.department'); + assert(Array.isArray(queryResult.rows), 'rows is array'); + assert.equal(queryResult.rows.length, 100, 'rows length'); } describe('api/query-result', function() { - let query, connection + let query, connection; before(function() { return utils @@ -41,8 +41,8 @@ describe('api/query-result', function() { password: 'sqlpad' }) .then(body => { - connection = body.connection - }) + connection = body.connection; + }); }) .then(() => { return utils @@ -53,17 +53,17 @@ describe('api/query-result', function() { queryText }) .then(body => { - query = body.query - }) - }) - }) + query = body.query; + }); + }); + }); it('GET /api/query-result/:queryId', function() { return utils.get('admin', `/api/query-result/${query._id}`).then(body => { - assert(!body.error, 'Expect no error') - validateQueryResult(body.queryResult) - }) - }) + assert(!body.error, 'Expect no error'); + validateQueryResult(body.queryResult); + }); + }); it('POST /api/query-result', function() { return utils @@ -74,8 +74,8 @@ describe('api/query-result', function() { queryText }) .then(body => { - assert(!body.error, 'Expect no error') - validateQueryResult(body.queryResult) - }) - }) -}) + assert(!body.error, 'Expect no error'); + validateQueryResult(body.queryResult); + }); + }); +}); diff --git a/server/test/api/schema-info.js b/server/test/api/schema-info.js index 732a97bc3..c81cfef5e 100644 --- a/server/test/api/schema-info.js +++ b/server/test/api/schema-info.js @@ -1,8 +1,8 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/schema-info', function() { - let connection + let connection; before(function() { return utils.resetWithUser().then(() => { @@ -16,18 +16,18 @@ describe('api/schema-info', function() { password: 'sqlpad' }) .then(body => { - assert(!body.error, 'no error') - connection = body.connection - }) - }) - }) + assert(!body.error, 'no error'); + connection = body.connection; + }); + }); + }); it('Gets schema-info', function() { return utils .get('admin', `/api/schema-info/${connection._id}`) .then(body => { - assert(!body.error, 'Expect no error') - assert(body.schemaInfo, 'body.schemaInfo') - }) - }) -}) + assert(!body.error, 'Expect no error'); + assert(body.schemaInfo, 'body.schemaInfo'); + }); + }); +}); diff --git a/server/test/api/signup-signin.js b/server/test/api/signup-signin.js index 5243fc702..29aec9b44 100644 --- a/server/test/api/signup-signin.js +++ b/server/test/api/signup-signin.js @@ -1,10 +1,10 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/signup', function() { before(function() { - return utils.reset() - }) + return utils.reset(); + }); it('allows new user signup', function() { return utils @@ -13,8 +13,8 @@ describe('api/signup', function() { passwordConfirmation: 'admin', email: 'admin@test.com' }) - .then(body => assert(!body.error, 'Expect no error')) - }) + .then(body => assert(!body.error, 'Expect no error')); + }); it('prevents duplicate signups', function() { return utils @@ -23,8 +23,8 @@ describe('api/signup', function() { passwordConfirmation: 'admin', email: 'admin@test.com' }) - .then(body => assert(body.error, 'Expect error user already signed up')) - }) + .then(body => assert(body.error, 'Expect error user already signed up')); + }); it('prevents open signups', function() { return utils @@ -33,8 +33,8 @@ describe('api/signup', function() { passwordConfirmation: 'notwhitelisted', email: 'notwhitelisted@test.com' }) - .then(body => assert(body.error, 'Expect error needing whitelist')) - }) + .then(body => assert(body.error, 'Expect error needing whitelist')); + }); it('supports case insensitive login', function() { return utils @@ -43,27 +43,27 @@ describe('api/signup', function() { role: 'editor' }) .then(body => { - assert(!body.error, 'no error') + assert(!body.error, 'no error'); return utils.post(null, '/api/signup', { password: 'password', passwordConfirmation: 'password', email: 'Usercase@test.com' - }) + }); }) - .then(body => assert(!body.error, 'Expect no error')) - }) -}) + .then(body => assert(!body.error, 'Expect no error')); + }); +}); describe('api/signin', function() { before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('signs in user', function() { return utils .post(null, '/api/signin', { password: 'admin', email: 'admin@test.com' }) - .then(body => assert(!body.error, 'Expect no error')) - }) -}) + .then(body => assert(!body.error, 'Expect no error')); + }); +}); diff --git a/server/test/api/tags.js b/server/test/api/tags.js index a8f824a2e..4a2bcccec 100644 --- a/server/test/api/tags.js +++ b/server/test/api/tags.js @@ -1,18 +1,18 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/tags', function() { before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('Returns empty array', function() { return utils.get('admin', '/api/tags').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.tags), 'tags is an array') - assert.equal(body.tags.length, 0, '0 length') - }) - }) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.tags), 'tags is an array'); + assert.equal(body.tags.length, 0, '0 length'); + }); + }); it('Returns expected array', function() { return Promise.all([ @@ -34,9 +34,9 @@ describe('api/tags', function() { .then(body => assert(!body.error, 'no error')) ]).then(() => utils.get('admin', '/api/tags').then(body => { - assert(!body.error, 'Expect no error') - assert.equal(body.tags.length, 3, '3 length') + assert(!body.error, 'Expect no error'); + assert.equal(body.tags.length, 3, '3 length'); }) - ) - }) -}) + ); + }); +}); diff --git a/server/test/api/test-connection.js b/server/test/api/test-connection.js index 04e7d600c..b1399d023 100644 --- a/server/test/api/test-connection.js +++ b/server/test/api/test-connection.js @@ -1,10 +1,10 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/test-connection', function() { before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('tests connection', function() { return utils @@ -16,6 +16,6 @@ describe('api/test-connection', function() { username: 'sqlpad', password: 'sqlpad' }) - .then(body => assert(!body.error, 'Expect no error')) - }) -}) + .then(body => assert(!body.error, 'Expect no error')); + }); +}); diff --git a/server/test/api/users.js b/server/test/api/users.js index 60b1e1cbc..eec099b0b 100644 --- a/server/test/api/users.js +++ b/server/test/api/users.js @@ -1,20 +1,20 @@ -const assert = require('assert') -const utils = require('../utils') +const assert = require('assert'); +const utils = require('../utils'); describe('api/users', function() { - let user + let user; before(function() { - return utils.resetWithUser() - }) + return utils.resetWithUser(); + }); it('Returns initial array', function() { return utils.get('admin', '/api/users').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.users), 'users is an array') - assert.equal(body.users.length, 2, '2 length') - }) - }) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.users), 'users is an array'); + assert.equal(body.users.length, 2, '2 length'); + }); + }); it('Creates user', function() { return utils @@ -23,18 +23,18 @@ describe('api/users', function() { role: 'editor' }) .then(body => { - assert(!body.error, 'no error') - assert(body.user._id, 'has _id') - assert.equal(body.user.email, 'user1@test.com') - user = body.user - }) - }) + assert(!body.error, 'no error'); + assert(body.user._id, 'has _id'); + assert.equal(body.user.email, 'user1@test.com'); + user = body.user; + }); + }); it('Gets list of users', function() { return utils .get('admin', '/api/users') - .then(body => assert.equal(body.users.length, 3, '3 length')) - }) + .then(body => assert.equal(body.users.length, 3, '3 length')); + }); it('Updates user', function() { return utils @@ -42,14 +42,14 @@ describe('api/users', function() { role: 'admin' }) .then(body => { - assert(!body.error, 'no error') - assert.equal(body.user.role, 'admin') - }) - }) + assert(!body.error, 'no error'); + assert.equal(body.user.role, 'admin'); + }); + }); it('Requires authentication', function() { - return utils.get(null, `/api/users`, 302) - }) + return utils.get(null, `/api/users`, 302); + }); it('Create requires admin', function() { return utils.post( @@ -60,20 +60,20 @@ describe('api/users', function() { role: 'editor' }, 403 - ) - }) + ); + }); it('Deletes user', function() { return utils .del('admin', `/api/users/${user._id}`) - .then(body => assert(!body.error, 'no error')) - }) + .then(body => assert(!body.error, 'no error')); + }); it('Returns expected list', function() { return utils.get('admin', '/api/users').then(body => { - assert(!body.error, 'Expect no error') - assert(Array.isArray(body.users), 'users is an array') - assert.equal(body.users.length, 2, '2 length') - }) - }) -}) + assert(!body.error, 'Expect no error'); + assert(Array.isArray(body.users), 'users is an array'); + assert.equal(body.users.length, 2, '2 length'); + }); + }); +}); diff --git a/server/test/drivers.js b/server/test/drivers.js index 78f7efeca..ba0ea1051 100644 --- a/server/test/drivers.js +++ b/server/test/drivers.js @@ -1,39 +1,39 @@ -const assert = require('assert') -const drivers = require('../drivers') +const assert = require('assert'); +const drivers = require('../drivers'); describe('drivers', function() { it('loads and exposes api', function() { // This test doesn't test much will expand later - assert(drivers) - assert(typeof drivers.getSchema === 'function') - assert(typeof drivers.runQuery === 'function') - assert(typeof drivers.testConnection === 'function') - }) + assert(drivers); + assert(typeof drivers.getSchema === 'function'); + assert(typeof drivers.runQuery === 'function'); + assert(typeof drivers.testConnection === 'function'); + }); it('getDrivers()', function() { - const driverItems = drivers.getDrivers() - assert(Array.isArray(driverItems), 'driverItems is array') - assert(driverItems.find(item => item.id === 'crate')) - assert(driverItems.find(item => item.id === 'hdb')) - assert(driverItems.find(item => item.id === 'mysql')) - assert(driverItems.find(item => item.id === 'postgres')) - assert(driverItems.find(item => item.id === 'presto')) - assert(driverItems.find(item => item.id === 'sqlserver')) - assert(driverItems.find(item => item.id === 'vertica')) + const driverItems = drivers.getDrivers(); + assert(Array.isArray(driverItems), 'driverItems is array'); + assert(driverItems.find(item => item.id === 'crate')); + assert(driverItems.find(item => item.id === 'hdb')); + assert(driverItems.find(item => item.id === 'mysql')); + assert(driverItems.find(item => item.id === 'postgres')); + assert(driverItems.find(item => item.id === 'presto')); + assert(driverItems.find(item => item.id === 'sqlserver')); + assert(driverItems.find(item => item.id === 'vertica')); - const postgres = driverItems.find(item => item.id === 'postgres') - assert.equal(postgres.id, 'postgres') - assert.equal(postgres.name, 'Postgres') - assert(Array.isArray(postgres.fields)) + const postgres = driverItems.find(item => item.id === 'postgres'); + assert.equal(postgres.id, 'postgres'); + assert.equal(postgres.name, 'Postgres'); + assert(Array.isArray(postgres.fields)); assert( postgres.fields.find(field => field.key === 'postgresSsl'), 'has postgres specific field' - ) + ); assert( !postgres.fields.find(field => field.key === 'sqlserverEncrypt'), 'Does not have a SQL Server field' - ) - }) + ); + }); it('validateConnection()', function() { const validPostgres = drivers.validateConnection({ @@ -43,32 +43,32 @@ describe('drivers', function() { port: 'port', postgresSsl: true, somethingStripped: 'shouldnotmakeit' - }) - assert.equal(Object.keys(validPostgres).length, 5, 'only 5 keys valid') - assert.equal(validPostgres.name, 'testname') - assert.equal(validPostgres.driver, 'postgres') - assert.equal(validPostgres.host, 'host') - assert.equal(validPostgres.port, 'port') - assert.equal(validPostgres.postgresSsl, true) + }); + assert.equal(Object.keys(validPostgres).length, 5, 'only 5 keys valid'); + assert.equal(validPostgres.name, 'testname'); + assert.equal(validPostgres.driver, 'postgres'); + assert.equal(validPostgres.host, 'host'); + assert.equal(validPostgres.port, 'port'); + assert.equal(validPostgres.postgresSsl, true); assert.throws(() => { - drivers.validateConnection({ name: 'name' }) - }, 'missing driver throws error') + drivers.validateConnection({ name: 'name' }); + }, 'missing driver throws error'); assert.throws(() => { - drivers.validateConnection({ driver: 'postgres' }) - }, 'missing name throws error') + drivers.validateConnection({ driver: 'postgres' }); + }, 'missing name throws error'); assert.throws(() => { - drivers.validateConnection({ name: 'name', driver: 'not exist' }) - }, 'missing driver imp throws error') + drivers.validateConnection({ name: 'name', driver: 'not exist' }); + }, 'missing driver imp throws error'); assert.throws(() => { drivers.validateConnection({ name: 'name', driver: 'postgres', postgresSsl: 'notboolean' - }) - }, 'boolean not convertable throws error') - }) -}) + }); + }, 'boolean not convertable throws error'); + }); +}); diff --git a/server/test/lib/config.js b/server/test/lib/config.js index 764ecf8f5..113e25e2b 100644 --- a/server/test/lib/config.js +++ b/server/test/lib/config.js @@ -1,40 +1,40 @@ -const assert = require('assert') -const configUtil = require('../../lib/config') -const db = require('../../lib/db') +const assert = require('assert'); +const configUtil = require('../../lib/config'); +const db = require('../../lib/db'); -const configItems = require('../../lib/config/configItems') -const fromDefault = require('../../lib/config/fromDefault') -const fromEnv = require('../../lib/config/fromEnv') -const fromCli = require('../../lib/config/fromCli') -const nonUiConfig = require('../../lib/config').getPreDbConfig() +const configItems = require('../../lib/config/configItems'); +const fromDefault = require('../../lib/config/fromDefault'); +const fromEnv = require('../../lib/config/fromEnv'); +const fromCli = require('../../lib/config/fromCli'); +const nonUiConfig = require('../../lib/config').getPreDbConfig(); describe('config', function() { it('default', function() { - const conf = fromDefault() - assert.equal(conf.port, 80, 'default port') - assert(conf.dbPath !== '$HOME/sqlpad/db', 'dbPath should change') - }) + const conf = fromDefault(); + assert.equal(conf.port, 80, 'default port'); + assert(conf.dbPath !== '$HOME/sqlpad/db', 'dbPath should change'); + }); it('env', function() { - const conf = fromEnv({ SQLPAD_PORT: 8000 }) - assert.equal(conf.port, 8000, 'conf.port') - }) + const conf = fromEnv({ SQLPAD_PORT: 8000 }); + assert.equal(conf.port, 8000, 'conf.port'); + }); it('cli', function() { const conf = fromCli({ 'key-path': 'key/path', cert: 'cert/path', admin: 'admin@email.com' - }) - assert.equal(conf.keyPath, 'key/path', 'keyPath') - assert.equal(conf.certPath, 'cert/path', 'certPath') - assert.equal(conf.admin, 'admin@email.com', 'admin') - }) + }); + assert.equal(conf.keyPath, 'key/path', 'keyPath'); + assert.equal(conf.certPath, 'cert/path', 'certPath'); + assert.equal(conf.admin, 'admin@email.com', 'admin'); + }); it('nonUI', function() { - assert.equal(Object.keys(nonUiConfig).length, configItems.length) - }) -}) + assert.equal(Object.keys(nonUiConfig).length, configItems.length); + }); +}); describe('lib/config', function() { // TODO test when control is inverted/dependencies injected @@ -48,12 +48,12 @@ describe('lib/config', function() { // Loading a config should likely be explicit it('.get() should get a value provided by default', function() { return configUtil.getHelper(db).then(config => { - assert.equal(config.get('httpsPort'), 443, 'httpsPort=443') - }) - }) + assert.equal(config.get('httpsPort'), 443, 'httpsPort=443'); + }); + }); it('.get() should only accept key in config items', function() { return configUtil.getHelper(db).then(config => { - assert.throws(() => config.get('non-existent-key'), Error) - }) - }) -}) + assert.throws(() => config.get('non-existent-key'), Error); + }); + }); +}); diff --git a/server/test/lib/email.js b/server/test/lib/email.js index 904ef2ef8..9157f13a5 100644 --- a/server/test/lib/email.js +++ b/server/test/lib/email.js @@ -1,30 +1,30 @@ -const email = require('../../lib/email.js') -const configUtil = require('../../lib/config') -const db = require('../../lib/db') +const email = require('../../lib/email.js'); +const configUtil = require('../../lib/config'); +const db = require('../../lib/db'); describe('lib/email.js', function() { return configUtil.getHelper(db).then(config => { if (config.smtpConfigured() && process.env.SQLPAD_TEST_EMAIL) { it('should send invites', function() { - return email.sendInvite(process.env.SQLPAD_TEST_EMAIL) - }) + return email.sendInvite(process.env.SQLPAD_TEST_EMAIL); + }); it('should send forgot passwords', function() { return email.sendForgotPassword( process.env.SQLPAD_TEST_EMAIL, '/password-resset/id' - ) - }) + ); + }); } else { describe('Set env vars to enable:', function() { - it.skip('SQLPAD_SMTP_HOST') - it.skip('SQLPAD_SMTP_PORT') - it.skip('SQLPAD_SMTP_USER') - it.skip('SQLPAD_SMTP_PASSWORD') - it.skip('SQLPAD_SMTP_FROM') - it.skip('PUBLIC_URL') - it.skip('SQLPAD_TEST_EMAIL') - it.skip('SQLPAD_SMTP_SECURE (opt. probably to false)') - }) + it.skip('SQLPAD_SMTP_HOST'); + it.skip('SQLPAD_SMTP_PORT'); + it.skip('SQLPAD_SMTP_USER'); + it.skip('SQLPAD_SMTP_PASSWORD'); + it.skip('SQLPAD_SMTP_FROM'); + it.skip('PUBLIC_URL'); + it.skip('SQLPAD_TEST_EMAIL'); + it.skip('SQLPAD_SMTP_SECURE (opt. probably to false)'); + }); } - }) -}) + }); +}); diff --git a/server/test/lib/getMeta.js b/server/test/lib/getMeta.js index 0c9f91a60..492f253e2 100644 --- a/server/test/lib/getMeta.js +++ b/server/test/lib/getMeta.js @@ -1,8 +1,8 @@ -const assert = require('assert') -const getMeta = require('../../lib/getMeta.js') +const assert = require('assert'); +const getMeta = require('../../lib/getMeta.js'); -const d1 = new Date() -const d2 = new Date(new Date().getTime() + 60000) +const d1 = new Date(); +const d2 = new Date(new Date().getTime() + 60000); describe('lib/getMeta.js', function() { it('returns expected results', function() { @@ -44,36 +44,36 @@ describe('lib/getMeta.js', function() { date: null, numberString: null } - ] + ]; - const meta = getMeta(rows) + const meta = getMeta(rows); - assert.equal(meta.alwaysNull.datatype, null, 'null') + assert.equal(meta.alwaysNull.datatype, null, 'null'); - assert.equal(meta.accountNumber.datatype, 'string', 'accountNumber') + assert.equal(meta.accountNumber.datatype, 'string', 'accountNumber'); assert.equal( meta.accountNumber.maxValueLength, 6, 'accountNumber.maxValueLength' - ) + ); - assert.equal(meta.decimalString.datatype, 'number', 'decimalString') - assert.equal(meta.decimalString.max, 0.999, 'decimalString.max') - assert.equal(meta.decimalString.min, 0.111, 'decimalString.min') + assert.equal(meta.decimalString.datatype, 'number', 'decimalString'); + assert.equal(meta.decimalString.max, 0.999, 'decimalString.max'); + assert.equal(meta.decimalString.min, 0.111, 'decimalString.min'); - assert.equal(meta.number.datatype, 'number', 'number.datatype') - assert.equal(meta.number.max, 30, 'number.max') - assert.equal(meta.number.min, 0, 'number.min') + assert.equal(meta.number.datatype, 'number', 'number.datatype'); + assert.equal(meta.number.max, 30, 'number.max'); + assert.equal(meta.number.min, 0, 'number.min'); - assert.equal(meta.string.datatype, 'string', 'string.datatype') - assert.equal(meta.string.maxValueLength, 7, 'string.maxValueLength') + assert.equal(meta.string.datatype, 'string', 'string.datatype'); + assert.equal(meta.string.maxValueLength, 7, 'string.maxValueLength'); - assert.equal(meta.date.datatype, 'date', 'date.datatype') - assert.equal(meta.date.max.getTime(), d2.getTime(), 'date.max') - assert.equal(meta.date.min.getTime(), d1.getTime(), 'date.min') + assert.equal(meta.date.datatype, 'date', 'date.datatype'); + assert.equal(meta.date.max.getTime(), d2.getTime(), 'date.max'); + assert.equal(meta.date.min.getTime(), d1.getTime(), 'date.min'); - assert.equal(meta.numberString.datatype, 'number', 'numberString.datatype') - assert.equal(meta.numberString.max, 100, 'numberString.max') - assert.equal(meta.numberString.min, 0, 'numberString.min') - }) -}) + assert.equal(meta.numberString.datatype, 'number', 'numberString.datatype'); + assert.equal(meta.numberString.max, 100, 'numberString.max'); + assert.equal(meta.numberString.min, 0, 'numberString.min'); + }); +}); diff --git a/server/test/utils.js b/server/test/utils.js index fa145fe3f..64f25eb37 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -1,8 +1,8 @@ -const assert = require('assert') -const request = require('supertest') -const User = require('../models/User') -const db = require('../lib/db') -const app = require('../app') +const assert = require('assert'); +const request = require('supertest'); +const User = require('../models/User'); +const db = require('../lib/db'); +const app = require('../app'); const users = { admin: { @@ -15,12 +15,12 @@ const users = { password: 'editor', role: 'editor' } -} +}; function expectKeys(data, expectedKeys) { Object.keys(data).forEach(key => assert(expectedKeys.includes(key), `expected key ${key}`) - ) + ); } function reset() { @@ -29,56 +29,56 @@ function reset() { db.queries.remove({}, { multi: true }), db.connections.remove({}, { multi: true }), db.config.remove({}, { multi: true }) - ]) + ]); } function resetWithUser() { return reset().then(() => { const saves = Object.keys(users).map(key => { - const user = new User(users[key]) - return user.save() - }) - return Promise.all(saves) - }) + const user = new User(users[key]); + return user.save(); + }); + return Promise.all(saves); + }); } function addAuth(req, role) { if (users[role]) { - const username = users[role].email - const password = users[role].password - return req.auth(username, password) + const username = users[role].email; + const password = users[role].password; + return req.auth(username, password); } - return req + return req; } function del(role, url, statusCode = 200) { - let req = request(app).delete(url) - req = addAuth(req, role) - return req.expect(statusCode).then(response => response.body) + let req = request(app).delete(url); + req = addAuth(req, role); + return req.expect(statusCode).then(response => response.body); } function get(role, url, statusCode = 200) { - let req = request(app).get(url) - req = addAuth(req, role) - return req.expect(statusCode).then(response => response.body) + let req = request(app).get(url); + req = addAuth(req, role); + return req.expect(statusCode).then(response => response.body); } function post(role, url, body, statusCode = 200) { - let req = request(app).post(url) - req = addAuth(req, role) + let req = request(app).post(url); + req = addAuth(req, role); return req .send(body) .expect(statusCode) - .then(response => response.body) + .then(response => response.body); } function put(role, url, body, statusCode = 200) { - let req = request(app).put(url) - req = addAuth(req, role) + let req = request(app).put(url); + req = addAuth(req, role); return req .send(body) .expect(statusCode) - .then(response => response.body) + .then(response => response.body); } module.exports = { @@ -89,4 +89,4 @@ module.exports = { put, reset, resetWithUser -} +}; From bf1af18d85eb2bc5dfbb9c2a1283e7915df585bf Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 14 Mar 2019 23:51:27 -0400 Subject: [PATCH 010/855] Fix no-var lint --- server/.eslintrc | 1 - server/drivers/drill/drill.js | 6 +++--- server/routes/download-results.js | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/server/.eslintrc b/server/.eslintrc index 32a990a26..ea5aef554 100644 --- a/server/.eslintrc +++ b/server/.eslintrc @@ -26,7 +26,6 @@ "no-underscore-dangle": "off", "no-unused-vars": "off", "no-use-before-define": "off", - "no-var": "off", "object-shorthand": "off", "one-var": "off", "prefer-const": "off", diff --git a/server/drivers/drill/drill.js b/server/drivers/drill/drill.js index c5ba54825..b70c6de6d 100644 --- a/server/drivers/drill/drill.js +++ b/server/drivers/drill/drill.js @@ -1,10 +1,10 @@ const fetch = require('node-fetch'); -var request = require('request'); -var url = require('url'); +let request = require('request'); +let url = require('url'); exports.version = '1.0'; -var Client = (exports.Client = function(args) { +let Client = (exports.Client = function(args) { if (!args) args = {}; this.host = args.host || 'localhost'; diff --git a/server/routes/download-results.js b/server/routes/download-results.js index 1e58b3c9d..c90ef7b41 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -10,7 +10,7 @@ router.get('/download-results/:cacheKey.csv', function(req, res, next) { if (!cache) { return next(new Error('Cache not found')); } - var filename = cache.queryName + '.csv'; + let filename = cache.queryName + '.csv'; res.setHeader( 'Content-disposition', 'attachment; filename="' + encodeURIComponent(filename) + '"' @@ -34,7 +34,7 @@ router.get('/download-results/:cacheKey.xlsx', function(req, res, next) { if (!cache) { return next(new Error('Cache not found')); } - var filename = cache.queryName + '.xlsx'; + let filename = cache.queryName + '.xlsx'; res.setHeader( 'Content-disposition', 'attachment; filename="' + encodeURIComponent(filename) + '"' From a82050c3a0ada716dd9d615839366f08a81445b4 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 14 Mar 2019 23:59:08 -0400 Subject: [PATCH 011/855] Fix no-unused-vars lint --- server/.eslintrc | 1 - server/app.js | 2 +- server/drivers/crate/index.js | 2 +- server/drivers/hdb/test.js | 2 +- server/drivers/mock/index.js | 7 +++---- server/drivers/unixodbc/index.js | 4 +--- server/models/Cache.js | 4 ++-- server/models/Query.js | 2 +- server/routes/homepage.js | 2 +- server/routes/queries.js | 2 +- server/routes/signup-signin-signout.js | 2 +- server/routes/test-connection.js | 2 +- server/test/api/password-reset.js | 2 +- 13 files changed, 15 insertions(+), 19 deletions(-) diff --git a/server/.eslintrc b/server/.eslintrc index ea5aef554..50c4bea1a 100644 --- a/server/.eslintrc +++ b/server/.eslintrc @@ -24,7 +24,6 @@ "no-restricted-syntax": "off", "no-shadow": "off", "no-underscore-dangle": "off", - "no-unused-vars": "off", "no-use-before-define": "off", "object-shorthand": "off", "one-var": "off", diff --git a/server/app.js b/server/app.js index 4b30dc5f5..10d7ede8a 100644 --- a/server/app.js +++ b/server/app.js @@ -22,7 +22,7 @@ const { // so this should be okay unless SQLPad is frequently restarting const cookieSecrets = debug ? 'devmode' - : [1, 2, 3, 4].map(n => crypto.randomBytes(64).toString('hex')); + : [1, 2, 3, 4].map(() => crypto.randomBytes(64).toString('hex')); const ONE_HOUR_MS = 1000 * 60 * 60; diff --git a/server/drivers/crate/index.js b/server/drivers/crate/index.js index 4f6ab8e2d..1ea65e951 100644 --- a/server/drivers/crate/index.js +++ b/server/drivers/crate/index.js @@ -92,7 +92,7 @@ function testConnection(connection) { function getSchema(connection) { return runQuery(SCHEMA_SQL_V1, connection) .then(queryResult => formatSchemaQueryResults(queryResult)) - .catch(error => + .catch(() => runQuery(SCHEMA_SQL_V0, connection).then(queryResult => formatSchemaQueryResults(queryResult) ) diff --git a/server/drivers/hdb/test.js b/server/drivers/hdb/test.js index f5cd68db2..f98509ea8 100644 --- a/server/drivers/hdb/test.js +++ b/server/drivers/hdb/test.js @@ -23,7 +23,7 @@ const initSqls = [ describe('drivers/hdb', function() { before(function() { this.timeout(10000); - let seq = hdb.runQuery('DROP TABLE test;', connection).catch(error => { + let seq = hdb.runQuery('DROP TABLE test;', connection).catch(() => { // ignore error - table might not exist }); initSqls.forEach(sql => { diff --git a/server/drivers/mock/index.js b/server/drivers/mock/index.js index fbc975734..e10cba187 100644 --- a/server/drivers/mock/index.js +++ b/server/drivers/mock/index.js @@ -165,8 +165,8 @@ async function runQuery(query, connection) { }); if (measures.length) { - rows.forEach((row, rowIndex) => { - measures.forEach((measure, measureIndex) => { + rows.forEach(row => { + measures.forEach(measure => { const date = row.orderdate || row.orderdatetime; if (date) { const doy = moment.utc(date).dayOfYear(); @@ -229,9 +229,8 @@ Array(500) /** * Get schema for connection - * @param {*} connection */ -function getSchema(connection) { +function getSchema() { const fakeSchemaQueryResult = { rows: schemaRows, incomplete: false diff --git a/server/drivers/unixodbc/index.js b/server/drivers/unixodbc/index.js index 004e0b3fd..51bbcb6b0 100644 --- a/server/drivers/unixodbc/index.js +++ b/server/drivers/unixodbc/index.js @@ -52,9 +52,7 @@ function runQuery(query, connection) { } return openConnection(cn) - .then(connectionStatus => { - return executeQuery(query); - }) + .then(() => executeQuery(query)) .then(queryResult => { odbc.close(); // TODO consider putting into finally()? return Promise.resolve({ rows: queryResult, incomplete: false }); diff --git a/server/models/Cache.js b/server/models/Cache.js index 39f890b30..fb784a3ff 100644 --- a/server/models/Cache.js +++ b/server/models/Cache.js @@ -68,7 +68,7 @@ Cache.prototype.writeXlsx = function writeXlsx(queryResult) { resultArray.push(row); } const xlsxBuffer = xlsx.build([{ name: 'query-results', data: resultArray }]); - return new Promise((resolve, reject) => { + return new Promise(resolve => { fs.writeFile(self.xlsxFilePath(), xlsxBuffer, function(err) { // if there's an error log it but otherwise continue on // we can still send results even if download file failed to create @@ -82,7 +82,7 @@ Cache.prototype.writeXlsx = function writeXlsx(queryResult) { Cache.prototype.writeCsv = function writeCsv(queryResult) { const self = this; - return new Promise((resolve, reject) => { + return new Promise(resolve => { json2csv({ data: queryResult.rows, fields: queryResult.fields }, function( err, csv diff --git a/server/models/Query.js b/server/models/Query.js index d766cfaeb..4d6fd1dde 100644 --- a/server/models/Query.js +++ b/server/models/Query.js @@ -109,7 +109,7 @@ Query.prototype.pushQueryToSlackIfSetup = function() { json: true, url: SLACK_WEBHOOK }; - request(options, function(err, httpResponse, body) { + request(options, function(err) { if (err) { console.error('Something went wrong while sending to Slack.'); console.error(err); diff --git a/server/routes/homepage.js b/server/routes/homepage.js index 3b6e938d5..b7f94f517 100644 --- a/server/routes/homepage.js +++ b/server/routes/homepage.js @@ -4,7 +4,7 @@ const sendError = require('../lib/sendError'); // TODO FIXME - This was meant to redirect user to appropriate page depending on state of setup // I do not think it works anymore and should be revisited (this can be done client-side too) -router.get('/', function(req, res, next) { +router.get('/', function(req, res) { const { config } = req; const BASE_URL = config.get('baseUrl'); diff --git a/server/routes/queries.js b/server/routes/queries.js index 4b07db13f..0df21c8c4 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -51,7 +51,7 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, function( } return res.json({ query }); }) - .catch(error => sendError('Problem getting query')); + .catch(error => sendError(res, error, 'Problem getting query')); }); // create new diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index ec429abcd..809ab198f 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -47,7 +47,7 @@ if (!disableUserpassAuth) { return sendError(res, null, 'Email address not whitelisted'); } } - return user.save().then(newUser => res.json({})); + return user.save().then(() => res.json({})); }) .catch(error => sendError(res, error, 'Error saving user')); }); diff --git a/server/routes/test-connection.js b/server/routes/test-connection.js index 161621b49..85b7b5ce2 100644 --- a/server/routes/test-connection.js +++ b/server/routes/test-connection.js @@ -9,7 +9,7 @@ const sendError = require('../lib/sendError'); router.post('/api/test-connection', mustBeAdmin, function(req, res) { const { body } = req; return testConnection(body) - .then(queryResult => res.send({ success: true })) + .then(() => res.send({ success: true })) .catch(error => sendError(res, error)); }); diff --git a/server/test/api/password-reset.js b/server/test/api/password-reset.js index 8d1e39201..7983ad710 100644 --- a/server/test/api/password-reset.js +++ b/server/test/api/password-reset.js @@ -29,7 +29,7 @@ describe('api/password-reset', function() { }); it('Errors for wrong passwordResetId', function() { - return setReset().then(passwordResetId => { + return setReset().then(() => { return utils .post('admin', `/api/password-reset/123`, { email: 'admin@test.com', From 86053e4ce6cc50be9259731fe3af8804d3a904b7 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 15 Mar 2019 00:02:54 -0400 Subject: [PATCH 012/855] Fix spaced-comment lint --- server/.eslintrc | 1 - server/drivers/drill/drill.js | 4 ++-- server/drivers/drill/index.js | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/server/.eslintrc b/server/.eslintrc index 50c4bea1a..7a9592cf4 100644 --- a/server/.eslintrc +++ b/server/.eslintrc @@ -32,7 +32,6 @@ "prefer-promise-reject-errors": "off", "prefer-template": "off", "radix": "off", - "spaced-comment": "off", "vars-on-top": "off" } } diff --git a/server/drivers/drill/drill.js b/server/drivers/drill/drill.js index b70c6de6d..ef468764b 100644 --- a/server/drivers/drill/drill.js +++ b/server/drivers/drill/drill.js @@ -38,7 +38,7 @@ Client.prototype.execute = function(queryString, callback) { request(queryOptions, function(error, response, body) { if (!error && response.statusCode === 200) { callback(null, body); - } //TODO Add error handling + } // TODO Add error handling }); }; @@ -70,7 +70,7 @@ Client.prototype.query = function(config, query) { return jsonData; }) .catch(function(e) { - //TODO Send error message to JSON + // TODO Send error message to JSON console.log('There was a problem with the request' + e); return e; }); diff --git a/server/drivers/drill/index.js b/server/drivers/drill/index.js index 566ce03db..6e8991968 100644 --- a/server/drivers/drill/index.js +++ b/server/drivers/drill/index.js @@ -84,7 +84,7 @@ function testConnection(connection) { function getSchema(connection) { const schemaSql = getDrillSchemaSql( connection.drillCatalog - //connection.drillSchema + // connection.drillSchema ); return runQuery(schemaSql, connection).then(queryResult => formatSchemaQueryResults(queryResult) From 097c1ad61c7294bc5866530d6d66c1fdcb2abd1c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 15 Mar 2019 00:05:02 -0400 Subject: [PATCH 013/855] Fix object-shorthand lint --- server/.eslintrc | 1 - server/drivers/drill/drill.js | 8 ++++---- server/lib/db.js | 2 +- server/lib/version.js | 4 ++-- server/routes/tags.js | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/server/.eslintrc b/server/.eslintrc index 7a9592cf4..33c7634fd 100644 --- a/server/.eslintrc +++ b/server/.eslintrc @@ -25,7 +25,6 @@ "no-shadow": "off", "no-underscore-dangle": "off", "no-use-before-define": "off", - "object-shorthand": "off", "one-var": "off", "prefer-const": "off", "prefer-destructuring": "off", diff --git a/server/drivers/drill/drill.js b/server/drivers/drill/drill.js index ef468764b..1d38dd2cd 100644 --- a/server/drivers/drill/drill.js +++ b/server/drivers/drill/drill.js @@ -32,7 +32,7 @@ Client.prototype.execute = function(queryString, callback) { let queryOptions = { uri: href, method: 'POST', - headers: headers, + headers, json: { queryType: 'SQL', query: queryString } }; request(queryOptions, function(error, response, body) { @@ -55,13 +55,13 @@ Client.prototype.query = function(config, query) { this.protocol + '://' + this.host + ':' + this.port + '/query.json'; const queryInfo = { queryType: 'SQL', - query: query + query }; const body = JSON.stringify(queryInfo); return fetch(restURL, { method: 'POST', - headers: headers, - body: body + headers, + body }) .then(function(data) { return data.json(); diff --git a/server/lib/db.js b/server/lib/db.js index 76e5078b3..1e7085153 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -20,7 +20,7 @@ const db = { cache: datastore({ filename: path.join(dbPath, 'cache.db') }), config: datastore({ filename: path.join(dbPath, 'config.db') }), instances: ['users', 'connections', 'queries', 'cache', 'config'], - onLoad: function(fn) { + onLoad(fn) { if (loaded) { return fn(loadError); } diff --git a/server/lib/version.js b/server/lib/version.js index 894c2b51d..50d93be81 100644 --- a/server/lib/version.js +++ b/server/lib/version.js @@ -48,10 +48,10 @@ function checkForUpdate() { } module.exports = { - get: function() { + get() { return Object.assign({}, version); }, - scheduleUpdateChecks: function() { + scheduleUpdateChecks() { setInterval(checkForUpdate, ONE_DAY); setTimeout(checkForUpdate, 5000); } diff --git a/server/routes/tags.js b/server/routes/tags.js index d0b39bd4b..14e6ac3a7 100644 --- a/server/routes/tags.js +++ b/server/routes/tags.js @@ -12,7 +12,7 @@ router.get('/api/tags', mustBeAuthenticated, function(req, res) { .filter(t => t); return res.json({ - tags: tags + tags }); }) .catch(error => sendError(res, error, 'Problem getting tags')); From b439158083a1a0275387c1c2af785023a7ac76e3 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 15 Mar 2019 00:05:24 -0400 Subject: [PATCH 014/855] Fix one-var lint --- server/.eslintrc | 1 - server/test/api/query-result.js | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/.eslintrc b/server/.eslintrc index 33c7634fd..59a25a724 100644 --- a/server/.eslintrc +++ b/server/.eslintrc @@ -25,7 +25,6 @@ "no-shadow": "off", "no-underscore-dangle": "off", "no-use-before-define": "off", - "one-var": "off", "prefer-const": "off", "prefer-destructuring": "off", "prefer-promise-reject-errors": "off", diff --git a/server/test/api/query-result.js b/server/test/api/query-result.js index 88514683f..d41094309 100644 --- a/server/test/api/query-result.js +++ b/server/test/api/query-result.js @@ -25,7 +25,8 @@ function validateQueryResult(queryResult) { } describe('api/query-result', function() { - let query, connection; + let query; + let connection; before(function() { return utils From 7e3b754ccf1657550797447c16e738748cc39143 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 24 Mar 2019 15:58:53 -0400 Subject: [PATCH 015/855] Fix target _blank lint --- client/src/common/ExportButton.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index c1f16a02f..0410ea5ad 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -39,12 +39,20 @@ class ExportButton extends React.Component { png )} - + csv - + xlsx From 8d3974a17cc7d42a718aa0977d778b9a0c104337 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 24 Mar 2019 23:18:04 -0400 Subject: [PATCH 016/855] Functional components and hooks conversion (part 1) (#418) * Use functional components and hooks for app context pages * Remove unused Button component * More functional component work * More functional components * More functional components * more functional component * Yet another functional component conversion * Functional component --- client/src/AboutContent.js | 115 +++--- client/src/App.js | 36 +- client/src/AppNav.js | 286 +++++++------- client/src/Authenticated.js | 32 +- client/src/ForgotPassword.js | 73 ++-- client/src/NotFound.js | 36 +- client/src/PasswordReset.js | 127 +++---- client/src/QueryTableOnly.js | 120 +++--- client/src/SignIn.js | 159 ++++---- client/src/SignUp.js | 153 ++++---- client/src/common/Button.js | 41 -- client/src/common/DocumentTitle.js | 18 - client/src/common/EditableTagGroup.js | 140 +++---- client/src/common/ExportButton.js | 100 ++--- client/src/common/FullscreenMessage.js | 12 +- client/src/common/Header.js | 18 +- .../src/common/IncompleteDataNotification.js | 29 +- client/src/common/SecondsTimer.js | 39 +- client/src/common/Sidebar.js | 12 +- client/src/common/SidebarBody.js | 12 +- client/src/common/SpinKitCube.js | 28 +- client/src/common/SqlEditor.js | 120 ++---- .../configuration/ConfigEnvDocumentation.js | 44 +-- client/src/configuration/ConfigItemInput.js | 87 ++--- client/src/configuration/ConfigurationView.js | 225 +++++------ .../src/connections/ConnectionListDrawer.js | 331 ++++++++-------- client/src/connections/ConnectionsStore.js | 12 - client/src/containers/withAppContext.js | 14 - client/src/queries/QueriesView.js | 358 ++++++++---------- client/src/queryEditor/ChartInputs.js | 111 +++--- client/src/queryEditor/EditorNavBar.js | 140 ++++--- client/src/queryEditor/FlexTabPane.js | 9 +- client/src/queryEditor/QueryDetailsModal.js | 124 +++--- client/src/queryEditor/QueryEditor.js | 1 - .../src/queryEditor/QueryEditorContainer.js | 70 ++-- client/src/queryEditor/QueryResultHeader.js | 144 ++++--- client/src/queryEditor/VisSidebar.js | 115 +++--- client/src/users/InviteUserForm.js | 159 +++----- client/src/users/UsersView.js | 296 +++++++-------- 39 files changed, 1726 insertions(+), 2220 deletions(-) delete mode 100644 client/src/common/Button.js delete mode 100644 client/src/common/DocumentTitle.js delete mode 100644 client/src/containers/withAppContext.js diff --git a/client/src/AboutContent.js b/client/src/AboutContent.js index 1f1488966..6f21efcd8 100644 --- a/client/src/AboutContent.js +++ b/client/src/AboutContent.js @@ -1,74 +1,71 @@ import PropTypes from 'prop-types'; import React from 'react'; -class AboutContent extends React.Component { - render() { - const { version } = this.props; - return ( -
    -

    - Version: {version} -

    -

    - Project Page:{' '} +function AboutContent({ version }) { + return ( +

    - ); - } + +
  • + + Changelog{' '} + +
  • +
  • + + GitHub Repository{' '} + +
  • + +
    + ); } AboutContent.propTypes = { diff --git a/client/src/App.js b/client/src/App.js index 01e847500..d313ed5f9 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -1,5 +1,5 @@ import message from 'antd/lib/message'; -import React from 'react'; +import React, { useContext } from 'react'; import { BrowserRouter as Router, Redirect, @@ -29,9 +29,16 @@ message.config({ maxCount: 3 }); -class App extends React.Component { - renderRoutes(config) { - return ( +function App() { + const appContext = useContext(AppContext); + const { config } = appContext; + + if (!config) { + return null; + } + + return ( +
    @@ -109,25 +116,8 @@ class App extends React.Component {
    - ); - } - - render() { - return ( - - {appContext => { - if (appContext.config) { - return ( - - {this.renderRoutes(appContext.config)} - - ); - } - return null; - }} - - ); - } +
    + ); } export default App; diff --git a/client/src/AppNav.js b/client/src/AppNav.js index 328a6b581..0ab6ab36e 100644 --- a/client/src/AppNav.js +++ b/client/src/AppNav.js @@ -3,7 +3,7 @@ import Layout from 'antd/lib/layout'; import Menu from 'antd/lib/menu'; import Modal from 'antd/lib/modal'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useContext, useState } from 'react'; import { Redirect, Route } from 'react-router-dom'; import AboutContent from './AboutContent'; import AppContext from './containers/AppContext'; @@ -11,163 +11,141 @@ import fetchJson from './utilities/fetch-json.js'; const { Content, Sider } = Layout; -class AppNav extends React.Component { - state = { - collapsed: true, - redirect: false - }; +function AppNav({ children, pageMenuItems }) { + const [collapsed, setCollapsed] = useState(true); + const [redirect, setRedirect] = useState(false); + const appContext = useContext(AppContext); + const { currentUser, version } = appContext; - onCollapse = collapsed => { - this.setState({ collapsed }); - }; - - signout = () => { - fetchJson('GET', '/api/signout').then(json => { - this.setState({ redirect: true }); - }); - }; - - render() { - const { redirect } = this.state; - const { pageMenuItems } = this.props; - - if (redirect) { - return ; - } - - return ( - - {appContext => { - const { currentUser, version } = appContext; + if (redirect) { + return ; + } - return ( - - -
    + setCollapsed(collapsed)} + > +
    + ( + + { + history.push('/queries'); }} - className="flex flex-column justify-between" > - ( - - { - history.push('/queries'); - }} - > - - Queries - - { - history.push('/queries/new'); - }} - > - - New Query - - {pageMenuItems} - - )} - /> - ( - - {currentUser.role === 'admin' && ( - { - history.push('/users'); - }} - > - - Users - - )} - {currentUser.role === 'admin' && ( - { - history.push('/config-values'); - }} - > - - Configuration - - )} - {version && version.updateAvailable && ( - { - Modal.info({ - title: - 'Update Available (' + - version.updateType + - ')', - maskClosable: true, - content: ( -
    - Installed Version: {version.current} -
    - Latest: {version.latest} -
    - ), - onOk() {} - }); - }} - > - - Update available -
    - )} - { - Modal.info({ - width: 650, - title: 'About SQLPad', - maskClosable: true, - content: ( - - ), - onOk() {} - }); - }} - > - - About - - - - Sign out - -
    - )} - /> -
    -
    - - {this.props.children} - - - ); - }} - - ); - } + + Queries + + { + history.push('/queries/new'); + }} + > + + New Query + + {pageMenuItems} + + )} + /> + ( + + {currentUser.role === 'admin' && ( + { + history.push('/users'); + }} + > + + Users + + )} + {currentUser.role === 'admin' && ( + { + history.push('/config-values'); + }} + > + + Configuration + + )} + {version && version.updateAvailable && ( + { + Modal.info({ + title: 'Update Available (' + version.updateType + ')', + maskClosable: true, + content: ( +
    + Installed Version: {version.current} +
    + Latest: {version.latest} +
    + ), + onOk() {} + }); + }} + > + + Update available +
    + )} + { + Modal.info({ + width: 650, + title: 'About SQLPad', + maskClosable: true, + content: ( + + ), + onOk() {} + }); + }} + > + + About + + { + await fetchJson('GET', '/api/signout'); + setRedirect(true); + }} + > + + Sign out + +
    + )} + /> +
    +
    + + {children} + +
    + ); } AppNav.propTypes = { diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index ed1675dab..2459dc5c6 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -1,31 +1,25 @@ import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useContext, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import AppContext from './containers/AppContext'; -class Authenticated extends React.Component { - static contextType = AppContext; +function Authenticated({ admin, children }) { + const appContext = useContext(AppContext); + const { currentUser } = appContext; - componentDidMount() { - const appContext = this.context; + useEffect(() => { appContext.refreshAppContext(); - } - - render() { - const appContext = this.context; - const { admin, children } = this.props; - const { currentUser } = appContext; - - if (!currentUser) { - return ; - } + }, []); - if (admin && currentUser.role !== 'admin') { - return ; - } + if (!currentUser) { + return ; + } - return children; + if (admin && currentUser.role !== 'admin') { + return ; } + + return children; } Authenticated.propTypes = { diff --git a/client/src/ForgotPassword.js b/client/src/ForgotPassword.js index ac06e2492..91ee1a099 100644 --- a/client/src/ForgotPassword.js +++ b/client/src/ForgotPassword.js @@ -1,54 +1,47 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; import message from 'antd/lib/message'; -class ForgotPassword extends React.Component { - state = { - email: '', - redirect: false - }; +function ForgotPassword() { + const [email, setEmail] = useState(''); + const [redirect, setRedirect] = useState(false); - componentDidMount() { + useEffect(() => { document.title = 'SQLPad - Forgot Password'; - } - - onEmailChange = e => { - this.setState({ email: e.target.value }); - }; + }, []); - resetPassword = e => { + const resetPassword = async e => { e.preventDefault(); - fetchJson('POST', '/api/forgot-password', this.state).then(json => { - if (json.error) return message.error(json.error); - this.setState({ redirect: true }); - }); + const json = await fetchJson('POST', '/api/forgot-password', { email }); + if (json.error) { + return message.error(json.error); + } + setRedirect(true); }; - render() { - const { redirect } = this.state; - if (redirect) { - return ; - } - return ( -
    -
    -

    SQLPad

    - - -
    -
    - ); + if (redirect) { + return ; } + + return ( +
    +
    +

    SQLPad

    + setEmail(e.target.value)} + required + /> + +
    +
    + ); } export default ForgotPassword; diff --git a/client/src/NotFound.js b/client/src/NotFound.js index 1d9a4b9af..e75ffc09d 100644 --- a/client/src/NotFound.js +++ b/client/src/NotFound.js @@ -1,24 +1,22 @@ -import React from 'react'; +import React, { useContext, useEffect } from 'react'; import AppNav from './AppNav.js'; import FullscreenMessage from './common/FullscreenMessage.js'; import AppContext from './containers/AppContext'; -export default () => { - return ( - - {appContext => { - document.title = 'SQLPad - Not Found'; - const { currentUser } = appContext; +export default function NotFound() { + const appContext = useContext(AppContext); + const { currentUser } = appContext; - if (currentUser) { - return ( - - Not Found - - ); - } - return Not Found; - }} - - ); -}; + useEffect(() => { + document.title = 'SQLPad - Not Found'; + }, []); + + if (currentUser) { + return ( + + Not Found + + ); + } + return Not Found; +} diff --git a/client/src/PasswordReset.js b/client/src/PasswordReset.js index 2f9f6cf79..d1cbbdd18 100644 --- a/client/src/PasswordReset.js +++ b/client/src/PasswordReset.js @@ -1,88 +1,75 @@ import Button from 'antd/lib/button'; import Input from 'antd/lib/input'; import message from 'antd/lib/message'; -import React from 'react'; +import React, { useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; -class PasswordReset extends React.Component { - state = { - email: '', - password: '', - passwordConfirmation: '', - redirect: false - }; - - onEmailChange = e => { - this.setState({ email: e.target.value }); - }; - - onPasswordChange = e => { - this.setState({ password: e.target.value }); - }; - - onPasswordConfirmationChange = e => { - this.setState({ passwordConfirmation: e.target.value }); - }; +function PasswordReset({ passwordResetId }) { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [passwordConfirmation, setPasswordConfirmation] = useState(''); + const [redirect, setRedirect] = useState(false); - resetPassword = e => { + const resetPassword = async e => { e.preventDefault(); - fetchJson( + const json = await fetchJson( 'POST', - '/api/password-reset/' + this.props.passwordResetId, - this.state - ).then(json => { - if (json.error) { - return message.error(json.error); + '/api/password-reset/' + passwordResetId, + { + email, + password, + passwordConfirmation } - this.setState({ redirect: true }); - }); + ); + + if (json.error) { + return message.error(json.error); + } + setRedirect(true); }; - componentDidMount() { + useEffect(() => { document.title = 'SQLPad - Password Reset'; - } + }, []); - render() { - const { redirect } = this.state; - if (redirect) { - return ; - } - return ( -
    -
    -

    SQLPad

    - - - - -
    -
    - ); + if (redirect) { + return ; } + return ( +
    +
    +

    SQLPad

    + setEmail(e.target.value)} + required + /> + setPassword(e.target.value)} + required + /> + setPasswordConfirmation(e.target.value)} + required + /> + +
    +
    + ); } export default PasswordReset; diff --git a/client/src/QueryTableOnly.js b/client/src/QueryTableOnly.js index 707d376b9..0fd900461 100644 --- a/client/src/QueryTableOnly.js +++ b/client/src/QueryTableOnly.js @@ -1,86 +1,70 @@ import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useState, useEffect } from 'react'; import ExportButton from './common/ExportButton.js'; import IncompleteDataNotification from './common/IncompleteDataNotification'; import QueryResultDataTable from './common/QueryResultDataTable.js'; import fetchJson from './utilities/fetch-json.js'; -class QueryTableOnly extends React.Component { - state = { - isRunning: false, - runQueryStartTime: undefined, - queryResult: undefined - }; +function QueryTableOnly({ queryId }) { + const [isRunning, setIsRunning] = useState(false); + const [runQueryStartTime, setRunQueryStartTime] = useState(null); + const [queryResult, setQueryResult] = useState(null); + const [query, setQuery] = useState(null); + const [queryError, setQueryError] = useState(null); + + const runQuery = async queryId => { + setIsRunning(true); + setRunQueryStartTime(new Date()); + + const queryJson = await fetchJson('GET', '/api/queries/' + queryId); - runQuery = queryId => { - this.setState({ - isRunning: true, - runQueryStartTime: new Date() - }); - fetchJson('GET', '/api/queries/' + queryId) - .then(json => { - if (json.error) console.error(json.error); - this.setState({ - query: json.query - }); - }) - .then(() => { - return fetchJson('GET', '/api/query-result/' + queryId); - }) - .then(json => { - if (json.error) console.error(json.error); - this.setState({ - isRunning: false, - queryError: json.error, - queryResult: json.queryResult - }); - }); + if (queryJson.error) { + console.error(queryJson.error); + } + setQuery(queryJson.query); + + const queryResultJson = await fetchJson( + 'GET', + '/api/query-result/' + queryId + ); + + setIsRunning(false); + setQueryError(queryResultJson.error); + setQueryResult(queryResultJson.queryResult); }; - componentDidMount() { + useEffect(() => { document.title = 'SQLPad'; - this.runQuery(this.props.queryId); - } - - render() { - const { - isRunning, - query, - queryError, - queryResult, - querySuccess, - runQueryStartTime - } = this.state; + runQuery(queryId); + }, [queryId]); - const incomplete = queryResult ? queryResult.incomplete : false; - const cacheKey = queryResult ? queryResult.cacheKey : null; + const incomplete = queryResult ? queryResult.incomplete : false; + const cacheKey = queryResult ? queryResult.cacheKey : null; - return ( -
    -
    - {query ? query.name : ''} -
    - - -
    + return ( +
    +
    + {query ? query.name : ''} +
    + +
    -
    -
    - -
    +
    +
    +
    +
    - ); - } +
    + ); } QueryTableOnly.propTypes = { diff --git a/client/src/SignIn.js b/client/src/SignIn.js index d9680abfe..0b178493b 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -2,114 +2,99 @@ import Button from 'antd/lib/button'; import Icon from 'antd/lib/icon'; import Input from 'antd/lib/input'; import message from 'antd/lib/message'; -import React from 'react'; +import React, { useState, useContext, useEffect } from 'react'; import { Link, Redirect } from 'react-router-dom'; import AppContext from './containers/AppContext'; import fetchJson from './utilities/fetch-json.js'; -class SignIn extends React.Component { - static contextType = AppContext; +function SignIn(props) { + const appContext = useContext(AppContext); + const { config, smtpConfigured, passport } = appContext; - state = { - email: '', - password: '', - redirect: false - }; + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [redirect, setRedirect] = useState(false); - componentDidMount() { + useEffect(() => { document.title = 'SQLPad - Sign In'; - } - - onEmailChange = e => { - this.setState({ email: e.target.value }); - }; + }, []); - onPasswordChange = e => { - this.setState({ password: e.target.value }); - }; - - signIn = async e => { - const appContext = this.context; + const signIn = async e => { e.preventDefault(); - const json = await fetchJson('POST', '/api/signin', this.state); + const json = await fetchJson('POST', '/api/signin', { email, password }); if (json.error) { return message.error('Username or password incorrect'); } await appContext.refreshAppContext(); - this.setState({ redirect: true }); + setRedirect(true); }; - render() { - const appContext = this.context; - const { redirect } = this.state; - if (redirect) { - return ; - } + if (redirect) { + return ; + } - const { config, smtpConfigured, passport } = appContext; - if (!config) { - return; - } + if (!config) { + return; + } - const localForm = ( -
    -
    - - - -
    -
    - Sign Up - {smtpConfigured ? ( - - Forgot Password - - ) : null} -
    + const localForm = ( +
    +
    + setEmail(e.target.value)} + required + /> + setPassword(e.target.value)} + required + /> + +
    +
    + Sign Up + {smtpConfigured ? ( + + Forgot Password + + ) : null}
    - ); +
    + ); - const googleForm = ( - - ); + const googleForm = ( + + ); - return ( -
    -

    SQLPad

    - {'local' in passport.strategies && localForm} - {'google' in passport.strategies && googleForm} -
    - ); - } + return ( +
    +

    SQLPad

    + {'local' in passport.strategies && localForm} + {'google' in passport.strategies && googleForm} +
    + ); } export default SignIn; diff --git a/client/src/SignUp.js b/client/src/SignUp.js index e67e12fc1..eb2d14bc5 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -1,104 +1,87 @@ import Button from 'antd/lib/button'; import Input from 'antd/lib/input'; import message from 'antd/lib/message'; -import React from 'react'; +import React, { useContext, useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import AppContext from './containers/AppContext'; import fetchJson from './utilities/fetch-json.js'; -class SignUp extends React.Component { - state = { - email: '', - password: '', - passwordConfirmation: '', - redirect: false - }; +function SignUp() { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [passwordConfirmation, setPasswordConfirmation] = useState(''); + const [redirect, setRedirect] = useState(false); - componentDidMount() { - document.title = 'SQLPad - Sign Up'; - } + const appContext = useContext(AppContext); - onEmailChange = e => { - this.setState({ email: e.target.value }); - }; + const { adminRegistrationOpen } = appContext; - onPasswordChange = e => { - this.setState({ password: e.target.value }); - }; - - onPasswordConfirmationChange = e => { - this.setState({ passwordConfirmation: e.target.value }); - }; + useEffect(() => { + document.title = 'SQLPad - Sign Up'; + }, []); - signUp = e => { + const signUp = async e => { e.preventDefault(); - fetchJson('POST', '/api/signup', this.state).then(json => { - if (json.error) return message.error(json.error); - this.setState({ redirect: true }); + const json = await fetchJson('POST', '/api/signup', { + email, + password, + passwordConfirmation }); - }; - - render() { - const { redirect } = this.state; - - if (redirect) { - return ; + if (json.error) { + return message.error(json.error); } + setRedirect(true); + }; - return ( - - {appContext => { - const { adminRegistrationOpen } = appContext; - - return ( -
    -
    -

    SQLPad

    - {adminRegistrationOpen && ( -
    -

    Admin registration open

    -

    - Welcome to SQLPad! Since there are no admins currently - registered, signup is open to anyone. By signing up, you - will be granted admin rights, and signup will be - restricted to whitelisted email addresses/domains -

    -
    - )} - - - - -
    -
    - ); - }} -
    - ); + if (redirect) { + return ; } + + return ( +
    +
    +

    SQLPad

    + {adminRegistrationOpen && ( +
    +

    Admin registration open

    +

    + Welcome to SQLPad! Since there are no admins currently registered, + signup is open to anyone. By signing up, you will be granted admin + rights, and signup will be restricted to whitelisted email + addresses/domains +

    +
    + )} + setEmail(e.target.value)} + required + /> + setPassword(e.target.value)} + required + /> + setPasswordConfirmation(e.target.value)} + required + /> + +
    +
    + ); } export default SignUp; diff --git a/client/src/common/Button.js b/client/src/common/Button.js deleted file mode 100644 index fb1ab7b41..000000000 --- a/client/src/common/Button.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -class Button extends React.Component { - render() { - const { children, className, onClick, primary } = this.props; - let classNames = ''; - if (primary) { - classNames = ` - pa4 tc pv3 - bg-animate bg-blue hover-bg-dark-blue white - ${className} - `; - } else { - classNames = ` - pa4 tc pv3 - dim ba b--dark-gray black - ${className} - `; - } - - return ( - - ); - } -} - -Button.propTypes = { - className: PropTypes.string, - onClick: PropTypes.func, - primary: PropTypes.bool -}; - -Button.defaultProps = { - className: '', - onClick: () => {} -}; - -export default Button; diff --git a/client/src/common/DocumentTitle.js b/client/src/common/DocumentTitle.js deleted file mode 100644 index e0a1f2f8f..000000000 --- a/client/src/common/DocumentTitle.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -class DocumentTitle extends React.Component { - componentDidMount() { - document.title = this.props.children; - } - - render() { - return null; - } -} - -DocumentTitle.propTypes = { - children: PropTypes.string.isRequired -}; - -export default DocumentTitle; diff --git a/client/src/common/EditableTagGroup.js b/client/src/common/EditableTagGroup.js index 60293baa7..ea2a6c3e7 100644 --- a/client/src/common/EditableTagGroup.js +++ b/client/src/common/EditableTagGroup.js @@ -2,108 +2,88 @@ import AutoComplete from 'antd/lib/auto-complete'; import Icon from 'antd/lib/icon'; import Tag from 'antd/lib/tag'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useState, useEffect, useRef } from 'react'; -class EditableTagGroup extends React.Component { - state = { - inputVisible: false, - inputValue: '' - }; +function EditableTagGroup({ onChange, tags, tagOptions }) { + const [inputVisible, setInputVisible] = useState(false); + const [inputValue, setInputValue] = useState(''); + const inputEl = useRef(null); + + useEffect(() => { + if (inputVisible && inputValue === '') { + inputEl.current.focus(); + } + }, [inputVisible, inputValue]); - handleClose = removedTag => { + const handleClose = removedTag => { const { onChange, tags } = this.props; const newTags = tags.filter(tag => tag !== removedTag); onChange(newTags); }; - showInput = () => { - this.setState({ inputValue: '', inputVisible: true }, () => - this.input.focus() - ); + const showInput = () => { + setInputValue(''); + setInputVisible(true); }; - handleInputChange = value => { - this.setState({ inputValue: value }); - }; + const handleInputChange = value => setInputValue(value); - handleInputBlur = () => { - this.setState({ - inputValue: '', - inputVisible: false - }); + const handleInputBlur = () => { + setInputValue(''); + setInputVisible(false); }; - handleInputSelect = value => { - let { tags, onChange } = this.props; - + const handleInputSelect = value => { if (value && tags.indexOf(value) === -1) { tags = [...tags, value]; } - - this.setState( - { - inputValue: '', - inputVisible: false - }, - () => { - onChange(tags); - } - ); + setInputValue(''); + setInputVisible(false); + onChange(tags); // TODO this was done on callback? }; - saveInputRef = input => (this.input = input); - - filterOption = (inputValue, option) => + const filterOption = (inputValue, option) => option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1; - render() { - const { tags, tagOptions } = this.props; - const { inputVisible, inputValue } = this.state; - - const dataSource = tagOptions.slice(); - if (inputValue && dataSource.indexOf(inputValue) === -1) { - dataSource.unshift(inputValue); - } + const dataSource = tagOptions.slice(); + if (inputValue && dataSource.indexOf(inputValue) === -1) { + dataSource.unshift(inputValue); + } - return ( -
    - {tags.map((tag, index) => { - return ( - this.handleClose(tag)} - > - {tag} - - ); - })} - {inputVisible && ( - - )} - {!inputVisible && ( - - New Tag + return ( +
    + {tags.map((tag, index) => { + return ( + handleClose(tag)}> + {tag} - )} -
    - ); - } + ); + })} + {inputVisible && ( + + )} + {!inputVisible && ( + + New Tag + + )} +
    + ); } EditableTagGroup.propTypes = { diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index 0410ea5ad..14bcccf03 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -3,71 +3,55 @@ import Dropdown from 'antd/lib/dropdown'; import Icon from 'antd/lib/icon'; import Menu from 'antd/lib/menu'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useContext } from 'react'; import AppContext from '../containers/AppContext'; -class ExportButton extends React.Component { - render() { - const { cacheKey, onSaveImageClick } = this.props; +function ExportButton({ cacheKey, onSaveImageClick }) { + const appContext = useContext(AppContext); + const { config } = appContext; - if (!cacheKey) { - return null; - } - - return ( - - {appContext => { - const { config } = appContext; - if (!config) { - return; - } - - const { baseUrl, allowCsvDownload } = config; + if (!config) { + return null; + } - if (!cacheKey || !allowCsvDownload) { - return; - } + const { baseUrl, allowCsvDownload } = config; - const csvDownloadLink = `${baseUrl}/download-results/${cacheKey}.csv`; - const xlsxDownloadLink = `${baseUrl}/download-results/${cacheKey}.xlsx`; + if (!cacheKey || !allowCsvDownload) { + return null; + } - return ( - - {onSaveImageClick && ( - png - )} - - - csv - - - - - xlsx - - - - } + const csvDownloadLink = `${baseUrl}/download-results/${cacheKey}.csv`; + const xlsxDownloadLink = `${baseUrl}/download-results/${cacheKey}.xlsx`; + + return ( + + {onSaveImageClick && ( + png + )} + + + csv + + + + - - - ); - }} - - ); - } + xlsx + + + + } + > + + + ); } ExportButton.propTypes = { diff --git a/client/src/common/FullscreenMessage.js b/client/src/common/FullscreenMessage.js index 8767ec517..b78b515fb 100644 --- a/client/src/common/FullscreenMessage.js +++ b/client/src/common/FullscreenMessage.js @@ -1,7 +1,9 @@ import React from 'react'; -export default props => ( -
    - {props.children} -
    -); +export default function FullscreenMessage({ children }) { + return ( +
    + {children} +
    + ); +} diff --git a/client/src/common/Header.js b/client/src/common/Header.js index 374ecd2e1..fee1e976a 100644 --- a/client/src/common/Header.js +++ b/client/src/common/Header.js @@ -2,17 +2,13 @@ import Layout from 'antd/lib/layout'; import PropTypes from 'prop-types'; import React from 'react'; -class Header extends React.Component { - render() { - const { children, title } = this.props; - - return ( - -
    {title}
    -
    {children}
    -
    - ); - } +function Header({ children, title }) { + return ( + +
    {title}
    +
    {children}
    +
    + ); } Header.propTypes = { diff --git a/client/src/common/IncompleteDataNotification.js b/client/src/common/IncompleteDataNotification.js index e59e37b88..65ded6399 100644 --- a/client/src/common/IncompleteDataNotification.js +++ b/client/src/common/IncompleteDataNotification.js @@ -3,24 +3,21 @@ import Tooltip from 'antd/lib/tooltip'; import PropTypes from 'prop-types'; import React from 'react'; -class IncompleteDataNotification extends React.Component { - render() { - const { incomplete } = this.props; - if (incomplete === true) { - return ( - - - - Incomplete - - - ); - } - return null; + > + + + Incomplete + + + ); } + return null; } IncompleteDataNotification.propTypes = { diff --git a/client/src/common/SecondsTimer.js b/client/src/common/SecondsTimer.js index 3916ee32f..80493cf58 100644 --- a/client/src/common/SecondsTimer.js +++ b/client/src/common/SecondsTimer.js @@ -1,34 +1,17 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; -class SecondsTimer extends React.Component { - state = { - runSeconds: 0 - }; +function SecondsTimer({ startTime }) { + const [runSeconds, setRunSeconds] = useState(0); - _mounted = false; + useEffect(() => { + const intervalId = setInterval(() => { + const now = new Date(); + setRunSeconds(((now - startTime) / 1000).toFixed(0)); + }, 33); + return () => clearInterval(intervalId); + }, []); - timer = () => { - if (this._mounted) { - var now = new Date(); - this.setState({ - runSeconds: ((now - this.props.startTime) / 1000).toFixed(0) - }); - setTimeout(this.timer, 33); - } - }; - - componentDidMount() { - this._mounted = true; - this.timer(); - } - - componentWillUnmount() { - this._mounted = false; - } - - render() { - return {this.state.runSeconds}; - } + return {runSeconds}; } export default SecondsTimer; diff --git a/client/src/common/Sidebar.js b/client/src/common/Sidebar.js index c0312a775..789da0948 100644 --- a/client/src/common/Sidebar.js +++ b/client/src/common/Sidebar.js @@ -1,7 +1,9 @@ import React from 'react'; -export default props => ( -
    - {props.children} -
    -); +export default function Sidebar({ children }) { + return ( +
    + {children} +
    + ); +} diff --git a/client/src/common/SidebarBody.js b/client/src/common/SidebarBody.js index 62b0615d9..ff03ec8da 100644 --- a/client/src/common/SidebarBody.js +++ b/client/src/common/SidebarBody.js @@ -1,7 +1,9 @@ import React from 'react'; -export default props => ( -
    - {props.children} -
    -); +export default function SidebarBody({ children }) { + return ( +
    + {children} +
    + ); +} diff --git a/client/src/common/SpinKitCube.js b/client/src/common/SpinKitCube.js index 5df8b697d..228ec1b87 100644 --- a/client/src/common/SpinKitCube.js +++ b/client/src/common/SpinKitCube.js @@ -2,16 +2,18 @@ import React from 'react'; import './SpinKitCube.css'; // http://tobiasahlin.com/spinkit/ -export default () => ( -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -); +export default function SpinKitCube() { + return ( +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + ); +} diff --git a/client/src/common/SqlEditor.js b/client/src/common/SqlEditor.js index a93299700..20db5dc64 100644 --- a/client/src/common/SqlEditor.js +++ b/client/src/common/SqlEditor.js @@ -4,28 +4,21 @@ import 'brace/ext/searchbox'; import 'brace/mode/sql'; import 'brace/theme/sqlserver'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useContext, useState, useEffect } from 'react'; import Measure from 'react-measure'; import AceEditor from 'react-ace'; import AppContext from '../containers/AppContext'; const noop = () => {}; -class SqlEditor extends React.Component { - state = { - dimensions: { - width: -1, - height: -1 - } - }; - - componentDidMount() { - const { config, onChange } = this.props; - const editor = this.editor; +function SqlEditor({ onChange, readOnly, value, onSelectionChange }) { + const [dimensions, setDimensions] = useState({ width: -1, height: -1 }); + const [editor, setEditor] = useState(null); + const appContext = useContext(AppContext); + const { config } = appContext; + useEffect(() => { if (editor && onChange) { - editor.focus(); - // augment the built-in behavior of liveAutocomplete // built-in behavior only starts autocomplete when at least 1 character has been typed // In ace the . resets the prefix token and clears the completer @@ -37,69 +30,52 @@ class SqlEditor extends React.Component { } } }); - if (config.editorWordWrap) { - editor.session.setUseWrapMode(true); - } + + editor.session.setUseWrapMode(Boolean(config.editorWordWrap)); } - } + }, [editor, onChange, config]); - handleSelection = selection => { - const { onSelectionChange } = this.props; - const { editor } = this; + const handleSelection = selection => { if (editor && editor.session) { const selectedText = editor.session.getTextRange(selection.getRange()); onSelectionChange(selectedText); } }; - handleRef = ref => { - this.editor = ref ? ref.editor : null; - }; + const { width, height } = dimensions; - render() { - const { config, onChange, readOnly, value } = this.props; - const { width, height } = this.state.dimensions; - - if (this.editor && config.editorWordWrap) { - this.editor.session.setUseWrapMode(true); - } - - return ( - { - this.setState({ dimensions: contentRect.bounds }); - }} - > - {({ measureRef }) => ( -
    - -
    - )} -
    - ); - } + // TODO FIXME XXX - Using Measure broke query popover + // Split the auto-sized functionality into a separate component that wraps SqlEditor (AutoSizedSqlEditor) + return ( + setDimensions(contentRect.bounds)}> + {({ measureRef }) => ( +
    + setEditor(editor)} + onChange={onChange || noop} + onSelectionChange={handleSelection} + showGutter={false} + showPrintMargin={false} + theme="sqlserver" + readOnly={readOnly} + value={value} + width={width + 'px'} + /> +
    + )} +
    + ); } SqlEditor.propTypes = { - config: PropTypes.object.isRequired, onChange: PropTypes.func, onSelectionChange: PropTypes.func, readOnly: PropTypes.bool, @@ -112,16 +88,4 @@ SqlEditor.defaultProps = { value: '' }; -class SqlEditorContainer extends React.Component { - render() { - return ( - - {appContext => { - return ; - }} - - ); - } -} - -export default SqlEditorContainer; +export default SqlEditor; diff --git a/client/src/configuration/ConfigEnvDocumentation.js b/client/src/configuration/ConfigEnvDocumentation.js index 7c9c684ab..378f06dfd 100644 --- a/client/src/configuration/ConfigEnvDocumentation.js +++ b/client/src/configuration/ConfigEnvDocumentation.js @@ -3,12 +3,12 @@ import React from 'react'; const { Column } = Table; -class ConfigEnvDocumentation extends React.Component { - renderValue = (text, record) => { +function ConfigEnvDocumentation({ configItems }) { + const renderValue = (text, record) => { return record.value === '' ? '' : record.effectiveValue.toString(); }; - renderInfo = (text, record) => { + const renderInfo = (text, record) => { return (

    {record.description}

    @@ -16,7 +16,7 @@ class ConfigEnvDocumentation extends React.Component { ); }; - renderCli = (text, record) => { + const renderCli = (text, record) => { const cliFlag = record.cliFlag && record.cliFlag.pop ? record.cliFlag.pop() @@ -26,26 +26,24 @@ class ConfigEnvDocumentation extends React.Component { } }; - render() { - const filteredConfigItems = this.props.configItems.filter( - config => config.interface === 'env' - ); + const filteredConfigItems = configItems.filter( + config => config.interface === 'env' + ); - return ( - - - - - - -
    - ); - } + return ( + + + + + + +
    + ); } export default ConfigEnvDocumentation; diff --git a/client/src/configuration/ConfigItemInput.js b/client/src/configuration/ConfigItemInput.js index feec9fe01..a575cf48d 100644 --- a/client/src/configuration/ConfigItemInput.js +++ b/client/src/configuration/ConfigItemInput.js @@ -1,64 +1,55 @@ import Input from 'antd/lib/input'; import Select from 'antd/lib/select'; -import React from 'react'; +import React, { useState } from 'react'; const { Option } = Select; -class ConfigItemInput extends React.Component { - state = { - value: this.props.config.effectiveValue - }; +function ConfigItemInput({ config, saveConfigValue }) { + const [value, setValue] = useState(config.effectiveValue); - handleChange = e => { - this.setState({ - value: e.target.value - }); - this.props.saveConfigValue(this.props.config.key, e.target.value); + const handleChange = e => { + setValue(e.target.value); + saveConfigValue(config.key, e.target.value); }; - handleSelectChange = value => { - this.setState({ - value - }); - this.props.saveConfigValue(this.props.config.key, value); + const handleSelectChange = value => { + setValue(value); + saveConfigValue(config.key, value); }; - render() { - const { config } = this.props; - const disabled = - config.effectiveValueSource === 'cli' || - config.effectiveValueSource === 'saved cli' || - config.effectiveValueSource === 'env'; + const disabled = + config.effectiveValueSource === 'cli' || + config.effectiveValueSource === 'saved cli' || + config.effectiveValueSource === 'env'; - if (config.options) { - const optionNodes = config.options.map(option => { - return ( - - ); - }); + if (config.options) { + const optionNodes = config.options.map(option => { return ( - + ); - } else { - return ( - - ); - } + }); + return ( + + ); + } else { + return ( + + ); } } diff --git a/client/src/configuration/ConfigurationView.js b/client/src/configuration/ConfigurationView.js index 32b721535..cec577c0f 100644 --- a/client/src/configuration/ConfigurationView.js +++ b/client/src/configuration/ConfigurationView.js @@ -3,7 +3,7 @@ import Layout from 'antd/lib/layout'; import message from 'antd/lib/message'; import Row from 'antd/lib/row'; import debounce from 'lodash.debounce'; -import React from 'react'; +import React, { useState, useEffect } from 'react'; import AppNav from '../AppNav'; import Header from '../common/Header'; import fetchJson from '../utilities/fetch-json.js'; @@ -13,51 +13,35 @@ import ConfigItemInput from './ConfigItemInput'; const { Content } = Layout; -class ConfigurationView extends React.Component { - state = { - configItems: [] - }; +function ConfigurationView() { + const [configItems, setConfigItems] = useState([]); - loadConfigValuesFromServer = () => { - fetchJson('GET', '/api/config-items').then(json => { - if (json.error) message.error(json.error); - this.setState({ configItems: json.configItems }); - }); + const loadConfigValuesFromServer = async () => { + const json = await fetchJson('GET', '/api/config-items'); + if (json.error) { + message.error(json.error); + } + setConfigItems(json.configItems); }; - saveConfigValue = (key, value) => { - fetchJson('POST', '/api/config-values/' + key, { + const saveConfigValue = debounce(async (key, value) => { + const json = await fetchJson('POST', '/api/config-values/' + key, { value: value - }).then(json => { - if (json.error) { - message.error('Save failed'); - } else { - message.success('Value saved'); - this.loadConfigValuesFromServer(); - } }); - }; + if (json.error) { + message.error('Save failed'); + } else { + message.success('Value saved'); + loadConfigValuesFromServer(); + } + }, 500); - componentDidMount() { + useEffect(() => { document.title = 'SQLPad - Configuration'; - this.loadConfigValuesFromServer(); - this.saveConfigValue = debounce(this.saveConfigValue, 500); - } - - renderValueInput = (text, record) => { - return ( -
    - - -
    - ); - }; + loadConfigValuesFromServer(); + }, []); - renderInfo = config => { + const renderInfo = config => { const disabled = config.effectiveValueSource === 'cli' || config.effectiveValueSource === 'saved cli' || @@ -114,8 +98,7 @@ class ConfigurationView extends React.Component { ); }; - renderConfigInputs() { - const { configItems } = this.state; + const renderConfigInputs = () => { const uiConfigItems = configItems.filter( config => config.interface === 'ui' ); @@ -129,103 +112,99 @@ class ConfigurationView extends React.Component {
    -
    {this.renderInfo(config)}
    +
    {renderInfo(config)}
    ); })}
    ); - } + }; - render() { - return ( - - -
    - - - {this.renderConfigInputs()} - -
    -

    - Feature Checklist -

    -

    - Unlock features by providing the required configuration. -

    -
    - Email -
      - - - - - -
    - Google OAuth -
      - - - -
    -
    - -
    - - -
    + return ( + + +
    + + + {renderConfigInputs()} + +

    - Some configuration is only accessible via environment - variables or command-line-interface (CLI) flags. Below are the - current values for these variables. Sensitive values are - masked. Hover over input for additional information. + Feature Checklist

    +

    Unlock features by providing the required configuration.


    - - - - - - - - - - - ); - } + Email +
      + + + + + +
    + Google OAuth +
      + + + +
    +
    + +
    + + +
    +

    + Some configuration is only accessible via environment variables + or command-line-interface (CLI) flags. Below are the current + values for these variables. Sensitive values are masked. Hover + over input for additional information. +

    +
    + +
    + + + + + +
    + + + ); } export default ConfigurationView; diff --git a/client/src/connections/ConnectionListDrawer.js b/client/src/connections/ConnectionListDrawer.js index 5503dc18d..c207f1e05 100644 --- a/client/src/connections/ConnectionListDrawer.js +++ b/client/src/connections/ConnectionListDrawer.js @@ -3,196 +3,193 @@ import Drawer from 'antd/lib/drawer'; import Icon from 'antd/lib/icon'; import List from 'antd/lib/list'; import Popconfirm from 'antd/lib/popconfirm'; -import React from 'react'; -import { withAppContext } from '../containers/withAppContext'; +import React, { useState, useContext, useEffect } from 'react'; import ConnectionEditDrawer from './ConnectionEditDrawer'; -import { withConnectionsContext } from './ConnectionsStore'; - -class ConnectionListDrawer extends React.Component { - state = { - connectionId: null, - showEdit: false - }; - - componentDidMount() { - this.props.connectionsContext.loadConnections(); - } +import { ConnectionsContext } from './ConnectionsStore'; +import AppContext from '../containers/AppContext'; + +function ConnectionListDrawer({ visible, onClose }) { + const [connectionId, setConnectionId] = useState(null); + const [showEdit, setShowEdit] = useState(false); + const appContext = useContext(AppContext); + const connectionsContext = useContext(ConnectionsContext); + + const { currentUser } = appContext; + const { + selectConnection, + selectedConnectionId, + connections, + deleteConnection + } = connectionsContext; + + useEffect(() => { + connectionsContext.loadConnections(); + }, []); + + useEffect(() => { + if (!showEdit) { + onClose(); + } + }, [showEdit]); - editConnection = connection => { - this.setState({ connectionId: connection._id, showEdit: true }); + const editConnection = connection => { + setConnectionId(connection._id); + setShowEdit(true); }; - newConnection = () => { - this.setState({ showEdit: true, connectionId: null }); + const newConnection = () => { + setConnectionId(null); + setShowEdit(true); }; - handleEditDrawerClose = () => { - this.setState({ showEdit: false, connectionId: null }); + const handleEditDrawerClose = () => { + setConnectionId(null); + setShowEdit(false); }; - handleConnectionSaved = connection => { - const { connectionId } = this.state; - const { onClose, connectionsContext } = this.props; + const handleConnectionSaved = connection => { const { addUpdateConnection, selectConnection } = connectionsContext; addUpdateConnection(connection); - + setConnectionId(null); + setShowEdit(false); // If there was not a connectionId previously passed to edit drawer // this is a new connection // New connections can be selected and then all the drawer closed if (!connectionId) { - this.setState({ showEdit: false, connectionId: null }, onClose); selectConnection(connection._id); - } else { - this.setState({ showEdit: false, connectionId: null }); } }; - render() { - const { appContext, connectionsContext, visible, onClose } = this.props; - const { connectionId, showEdit } = this.state; - const { currentUser } = appContext; - const { - selectConnection, - selectedConnectionId, - connections, - deleteConnection - } = connectionsContext; - - // TODO - server driver implementations should implement functions - // that get decorated normalized display values - const decoratedConnections = connections.map(connection => { - connection.key = connection._id; - connection.displayDatabase = connection.database; - connection.displaySchema = ''; - let displayPort = connection.port ? ':' + connection.port : ''; - - if (connection.driver === 'hdb') { - connection.displayDatabase = connection.hanadatabase; - connection.displaySchema = connection.hanaSchema; - displayPort = connection.hanaport ? ':' + connection.hanaport : ''; - } else if (connection.driver === 'presto') { - connection.displayDatabase = connection.prestoCatalog; - connection.displaySchema = connection.prestoSchema; - } - - connection.displayHost = (connection.host || '') + displayPort; - return connection; - }); - - // The last "connection" list item will be an input to add a connection - // This is just something simple to branch off of in List.renderItem prop - if (currentUser.role === 'admin') { - decoratedConnections.push('ADD_BUTTON'); + // TODO - server driver implementations should implement functions + // that get decorated normalized display values + const decoratedConnections = connections.map(connection => { + connection.key = connection._id; + connection.displayDatabase = connection.database; + connection.displaySchema = ''; + let displayPort = connection.port ? ':' + connection.port : ''; + + if (connection.driver === 'hdb') { + connection.displayDatabase = connection.hanadatabase; + connection.displaySchema = connection.hanaSchema; + displayPort = connection.hanaport ? ':' + connection.hanaport : ''; + } else if (connection.driver === 'presto') { + connection.displayDatabase = connection.prestoCatalog; + connection.displaySchema = connection.prestoSchema; } - return ( - - { - if (item === 'ADD_BUTTON') { - return ( - - - - ); - } - - let description = ''; - if (item.user) { - description = item.user + '@'; - } - description += [ - item.displayHost, - item.displayDatabase, - item.displaySchema - ] - .filter(part => part && part.trim()) - .join(' / '); - - const actions = []; - - if (selectedConnectionId === item._id) { - actions.push( - - ); - } else { - actions.push( - - ); - } - - if (currentUser.role === 'admin') { - actions.push( - - ); - actions.push( - deleteConnection(item._id)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > -
    - } - /> + + ); - }} - /> - - - ); - } + } + + let description = ''; + if (item.user) { + description = item.user + '@'; + } + description += [ + item.displayHost, + item.displayDatabase, + item.displaySchema + ] + .filter(part => part && part.trim()) + .join(' / '); + + const actions = []; + + if (selectedConnectionId === item._id) { + actions.push( + + ); + } else { + actions.push( + + ); + } + + if (currentUser.role === 'admin') { + actions.push( + + ); + actions.push( + deleteConnection(item._id)} + onCancel={() => {}} + okText="Yes" + cancelText="No" + > +
    + } + /> + + ); + }} + /> + + + ); } -export default withAppContext(withConnectionsContext(ConnectionListDrawer)); +export default ConnectionListDrawer; diff --git a/client/src/connections/ConnectionsStore.js b/client/src/connections/ConnectionsStore.js index 03a339f45..aca1af067 100644 --- a/client/src/connections/ConnectionsStore.js +++ b/client/src/connections/ConnectionsStore.js @@ -110,16 +110,4 @@ export class ConnectionsStore extends React.Component { } } -export function withConnectionsContext(Component) { - return function ConnectedComponent(props) { - return ( - - {connectionsContext => ( - - )} - - ); - }; -} - export default ConnectionsStore; diff --git a/client/src/containers/withAppContext.js b/client/src/containers/withAppContext.js deleted file mode 100644 index d5c355bc2..000000000 --- a/client/src/containers/withAppContext.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import AppContext from './AppContext'; - -export function withAppContext(Component) { - return function ConnectedComponent(props) { - return ( - - {appContext => } - - ); - }; -} - -export default withAppContext; diff --git a/client/src/queries/QueriesView.js b/client/src/queries/QueriesView.js index 63504f90b..732a89205 100644 --- a/client/src/queries/QueriesView.js +++ b/client/src/queries/QueriesView.js @@ -12,12 +12,11 @@ import Table from 'antd/lib/table'; import Tag from 'antd/lib/tag'; import uniq from 'lodash.uniq'; import moment from 'moment'; -import React from 'react'; +import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import AppNav from '../AppNav'; import Header from '../common/Header'; import SqlEditor from '../common/SqlEditor'; -import AppContext from '../containers/AppContext'; import fetchJson from '../utilities/fetch-json.js'; const { Content } = Layout; @@ -26,77 +25,64 @@ const { Option } = Select; const { Column } = Table; const { Search } = Input; -class QueriesView extends React.Component { - state = { - queries: [], - connections: [], - createdBys: [], - tags: [], - tagFilterDropdownVisible: false, - searchInput: null, - selectedTags: [], - selectedConnection: '', - selectedCreatedBy: this.props.currentUser - ? this.props.currentUser.email - : '' - }; +function QueriesView({ currentUser }) { + const [queries, setQueries] = useState([]); + const [connections, setConnections] = useState([]); + const [createdBys, setCreatedBys] = useState([]); + const [tags, setTags] = useState([]); + const [searchInput, setSearchInput] = useState(''); + const [selectedTags, setSelectedTags] = useState([]); + const [selectedConnection, setSelectedConnection] = useState(''); + const [selectedCreatedBy, setSelectedCreatedBy] = useState( + currentUser ? currentUser.email : '' + ); - handleQueryDelete = queryId => { - let { queries } = this.state; - queries = queries.filter(q => { + const handleQueryDelete = async queryId => { + const filteredQueries = queries.filter(q => { return q._id !== queryId; }); - this.setState({ - queries - }); - fetchJson('DELETE', '/api/queries/' + queryId).then(json => { - if (json.error) message.error(json.error); - }); + setQueries(filteredQueries); + const json = await fetchJson('DELETE', '/api/queries/' + queryId); + if (json.error) { + message.error(json.error); + } }; - loadConfigValuesFromServer = () => { - fetchJson('GET', '/api/queries').then(json => { - const queries = json.queries || []; - const createdBys = uniq(queries.map(q => q.createdBy)); - const tags = uniq( - queries - .map(q => q.tags) - .reduce((a, b) => a.concat(b), []) - .filter(tag => tag) - ); - let selectedCreatedBy = this.state.selectedCreatedBy; - const email = this.props.currentUser && this.props.currentUser.email; - if (createdBys.indexOf(email) === -1) { - selectedCreatedBy = ''; - } - this.setState({ - queries: json.queries, - createdBys: createdBys, - selectedCreatedBy: selectedCreatedBy, - tags: tags - }); - }); - fetchJson('GET', '/api/connections').then(json => { - this.setState({ connections: json.connections }); - }); - }; + const loadConfigValuesFromServer = async () => { + const queriesJson = await fetchJson('GET', '/api/queries'); + const queries = queriesJson.queries || []; + const createdBys = uniq(queries.map(q => q.createdBy)); + const tags = uniq( + queries + .map(q => q.tags) + .reduce((a, b) => a.concat(b), []) + .filter(tag => tag) + ); - onSearchChange = e => { - this.setState({ - searchInput: e.target.value - }); + const email = currentUser && currentUser.email; + if (createdBys.indexOf(email) === -1) { + setSelectedCreatedBy(''); + } + setQueries(queriesJson.queries); + setCreatedBys(createdBys); + setTags(tags); + + const connectionsJson = await fetchJson('GET', '/api/connections'); + setConnections(connectionsJson.connections); }; - componentDidMount() { + const onSearchChange = e => setSearchInput(e.target.value); + + useEffect(() => { document.title = 'SQLPad - Queries'; - this.loadConfigValuesFromServer(); - } + loadConfigValuesFromServer(); + }, []); - nameRender = (text, record) => { + const nameRender = (text, record) => { return {record.name}; }; - previewRender = (text, record) => { + const previewRender = (text, record) => { return ( a.name.localeCompare(b.name); + const nameSorter = (a, b) => a.name.localeCompare(b.name); - modifiedSorter = (a, b) => { + const modifiedSorter = (a, b) => { return moment(a.modifiedDate).toDate() - moment(b.modifiedDate).toDate(); }; - modifiedRender = (text, record) => moment(record.modifiedDate).calendar(); + const modifiedRender = (text, record) => + moment(record.modifiedDate).calendar(); - tagsRender = (text, record) => { + const tagsRender = (text, record) => { if (record.tags && record.tags.length) { return record.tags.map(tag => {tag}); } }; - actionsRender = (text, record) => { + const actionsRender = (text, record) => { + const tableUrl = `/query-table/${record._id}`; + const chartUrl = `/query-chart/${record._id}`; return ( - - {appContext => { - const { config } = appContext; - const tableUrl = `${config.baseUrl}/query-table/${record._id}`; - const chartUrl = `${config.baseUrl}/query-chart/${record._id}`; - return ( - - - table - - - - chart - - - this.handleQueryDelete(record._id)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > - - - - - {this.renderFilters()} -
    {this.renderTable()}
    -
    - - - ); - } + return ( + + +
    + + + +
    + + + + + + + + + + + + + + + +
    {renderTable()}
    +
    +
    +
    + ); } export default QueriesView; diff --git a/client/src/queryEditor/ChartInputs.js b/client/src/queryEditor/ChartInputs.js index 63d278faf..db39e0bd0 100644 --- a/client/src/queryEditor/ChartInputs.js +++ b/client/src/queryEditor/ChartInputs.js @@ -2,7 +2,7 @@ import Checkbox from 'antd/lib/checkbox'; import Input from 'antd/lib/input'; import Select from 'antd/lib/select'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useState } from 'react'; import chartDefinitions from '../utilities/chartDefinitions.js'; const { Option } = Select; @@ -20,24 +20,24 @@ function cleanBoolean(value) { const inputClassName = 'mt3 mb3'; -class ChartInputs extends React.Component { - state = { - showAdvanced: false - }; +function ChartInputs({ + onChartConfigurationFieldsChange, + queryChartConfigurationFields, + queryResult, + chartType +}) { + const [showAdvanced, setShowAdvanced] = useState(false); - handleAdvancedClick = e => { + const handleAdvancedClick = e => { e.preventDefault(); - this.setState({ - showAdvanced: !this.state.showAdvanced - }); + setShowAdvanced(!showAdvanced); }; - changeChartConfigurationField = (chartFieldId, queryResultField) => { - this.props.onChartConfigurationFieldsChange(chartFieldId, queryResultField); + const changeChartConfigurationField = (chartFieldId, queryResultField) => { + onChartConfigurationFieldsChange(chartFieldId, queryResultField); }; - renderFormGroup(inputDefinitionFields) { - const { queryChartConfigurationFields, queryResult } = this.props; + const renderFormGroup = inputDefinitionFields => { const queryResultFields = queryResult.fields || []; return inputDefinitionFields.map(field => { @@ -74,9 +74,9 @@ class ChartInputs extends React.Component { optionFilterProp="children" value={selectedQueryResultField} notFoundContent="No fields available" - onChange={value => { - this.changeChartConfigurationField(field.fieldId, value); - }} + onChange={value => + changeChartConfigurationField(field.fieldId, value) + } filterOption={(input, option) => option.props.value && option.props.children @@ -96,12 +96,9 @@ class ChartInputs extends React.Component { { - this.changeChartConfigurationField( - field.fieldId, - e.target.checked - ); - }} + onChange={e => + changeChartConfigurationField(field.fieldId, e.target.checked) + } > {field.label} @@ -114,12 +111,9 @@ class ChartInputs extends React.Component { { - this.changeChartConfigurationField( - field.fieldId, - e.target.value - ); - }} + onChange={e => + changeChartConfigurationField(field.fieldId, e.target.value) + } className="w-100" />
    @@ -128,42 +122,37 @@ class ChartInputs extends React.Component { throw Error(`field.inputType ${field.inputType} not supported`); } }); - } - - render() { - const { chartType } = this.props; - const { showAdvanced } = this.state; + }; - const chartDefinition = chartDefinitions.find( - def => def.chartType === chartType - ); + const chartDefinition = chartDefinitions.find( + def => def.chartType === chartType + ); - if (!chartDefinition || !chartDefinition.fields) { - return null; - } - - const regularFields = chartDefinition.fields.filter( - field => field.advanced == null || field.advanced === false - ); - - const advancedFields = chartDefinition.fields.filter( - field => field.advanced === true - ); - - const advancedLink = advancedFields.length ? ( - - {showAdvanced ? 'hide advanced settings' : 'show advanced settings'} - - ) : null; - - return ( -
    - {this.renderFormGroup(regularFields)} - {advancedLink} - {showAdvanced && this.renderFormGroup(advancedFields)} -
    - ); + if (!chartDefinition || !chartDefinition.fields) { + return null; } + + const regularFields = chartDefinition.fields.filter( + field => field.advanced == null || field.advanced === false + ); + + const advancedFields = chartDefinition.fields.filter( + field => field.advanced === true + ); + + const advancedLink = advancedFields.length ? ( + + {showAdvanced ? 'hide advanced settings' : 'show advanced settings'} + + ) : null; + + return ( +
    + {renderFormGroup(regularFields)} + {advancedLink} + {showAdvanced && renderFormGroup(advancedFields)} +
    + ); } ChartInputs.propTypes = { diff --git a/client/src/queryEditor/EditorNavBar.js b/client/src/queryEditor/EditorNavBar.js index 2d9163e01..531ac93fe 100644 --- a/client/src/queryEditor/EditorNavBar.js +++ b/client/src/queryEditor/EditorNavBar.js @@ -9,81 +9,73 @@ import ConnectionDropDown from './ConnectionDropdown'; const FormItem = Form.Item; -class EditorNavBar extends React.Component { - onQueryNameChange = e => { - this.props.onQueryNameChange(e.target.value); - }; +function EditorNavBar({ + activeTabKey, + onTabSelect, + isSaving, + isRunning, + onCloneClick, + onMoreClick, + onSaveClick, + onRunClick, + onFormatClick, + query, + showValidation, + unsavedChanges, + onQueryNameChange +}) { + const validationState = showValidation && !query.name.length ? 'error' : null; + const saveText = unsavedChanges ? 'Save*' : 'Save'; + const cloneDisabled = !query._id; - render() { - const { - activeTabKey, - onTabSelect, - isSaving, - isRunning, - onCloneClick, - onMoreClick, - onSaveClick, - onRunClick, - onFormatClick, - query, - showValidation, - unsavedChanges - } = this.props; - - const validationState = - showValidation && !query.name.length ? 'error' : null; - const saveText = unsavedChanges ? 'Save*' : 'Save'; - const cloneDisabled = !query._id; - - return ( -
    -
    - - - - - - - SQL - - - Vis - - - - - - - - - - - - - - - - - -
    -
    - ); - } + return ( +
    +
    + + + + + + + SQL + + + Vis + + + + + + + + + + + + + onQueryNameChange(e.target.value)} + /> + + + + +
    +
    + ); } EditorNavBar.propTypes = { diff --git a/client/src/queryEditor/FlexTabPane.js b/client/src/queryEditor/FlexTabPane.js index 26abe16a6..5cd4c185f 100644 --- a/client/src/queryEditor/FlexTabPane.js +++ b/client/src/queryEditor/FlexTabPane.js @@ -1,12 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -class FlexTabPane extends React.Component { - render() { - const { activeTabKey, tabKey } = this.props; - const display = activeTabKey === tabKey ? 'flex' : 'none'; - return
    {this.props.children}
    ; - } +function FlexTabPane({ activeTabKey, tabKey, children }) { + const display = activeTabKey === tabKey ? 'flex' : 'none'; + return
    {children}
    ; } FlexTabPane.propTypes = { diff --git a/client/src/queryEditor/QueryDetailsModal.js b/client/src/queryEditor/QueryDetailsModal.js index c83b13fe6..d3cf3a804 100644 --- a/client/src/queryEditor/QueryDetailsModal.js +++ b/client/src/queryEditor/QueryDetailsModal.js @@ -4,100 +4,90 @@ import Tooltip from 'antd/lib/tooltip'; import PropTypes from 'prop-types'; import React from 'react'; import EditableTagGroup from '../common/EditableTagGroup'; +import { Link } from 'react-router-dom'; -class QueryDetailsModal extends React.Component { - onQueryNameChange = e => { - this.props.onQueryNameChange(e.target.value); - }; - - renderNavLink = (href, text) => { - const { query } = this.props; +function QueryDetailsModal({ + query, + onHide, + onQueryTagsChange, + showModal, + tagOptions +}) { + const renderNavLink = (href, text) => { const saved = !!query._id; if (saved) { return (
  • - + {text} - +
  • ); } else { return (
  • - e.preventDefault()} > {text} - +
  • ); } }; - render() { - const { - config, - onHide, - onQueryTagsChange, - query, - showModal, - tagOptions - } = this.props; - - const tableUrl = `${config.baseUrl}/query-table/${query._id}`; - const chartUrl = `${config.baseUrl}/query-chart/${query._id}`; + const tableUrl = `/query-table/${query._id}`; + const chartUrl = `/query-chart/${query._id}`; - return ( - - - -
    -

    - -

    -
      -
    • - ctrl+s / command+s : Save -
    • -
    • - ctrl+return / command+return : Run -
    • -
    • - shift+return : Format -
    • -
    -
    -

    - Tip -

    -

    Run only a portion of a query by highlighting it first.

    -
    -
      - {this.renderNavLink(tableUrl, 'Link to Table')} - {this.renderNavLink(chartUrl, 'Link to Chart')} -
    -
    - ); - } + return ( + + + +
    +

    + +

    +
      +
    • + ctrl+s / command+s : Save +
    • +
    • + ctrl+return / command+return : Run +
    • +
    • + shift+return : Format +
    • +
    +
    +

    + Tip +

    +

    Run only a portion of a query by highlighting it first.

    +
    +
      + {renderNavLink(tableUrl, 'Link to Table')} + {renderNavLink(chartUrl, 'Link to Chart')} +
    +
    + ); } QueryDetailsModal.propTypes = { - config: PropTypes.object.isRequired, onHide: PropTypes.func.isRequired, onQueryTagsChange: PropTypes.func.isRequired, query: PropTypes.object.isRequired, diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 06c8b1783..8f4013fac 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -437,7 +437,6 @@ class QueryEditor extends React.Component {
    this.setState({ visible: true })} - > - - DB connections - - ]} - > - - {appContext => ( - - {connectionsContext => ( - - )} - - )} - - this.setState({ visible: false })} - /> - - ); - } +function QueryEditorContainer(props) { + const [visible, setVisible] = useState(false); + const appContext = useContext(AppContext); + const connectionsContext = useContext(ConnectionsContext); + + return ( + setVisible(true)}> + + DB connections + + ]} + > + + setVisible(false)} + /> + + ); } export default QueryEditorContainer; diff --git a/client/src/queryEditor/QueryResultHeader.js b/client/src/queryEditor/QueryResultHeader.js index ecbd20f8c..2c3f4ae2d 100644 --- a/client/src/queryEditor/QueryResultHeader.js +++ b/client/src/queryEditor/QueryResultHeader.js @@ -1,90 +1,86 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { Link } from 'react-router-dom'; import IncompleteDataNotification from '../common/IncompleteDataNotification'; import SecondsTimer from '../common/SecondsTimer.js'; -class QueryResultHeader extends React.Component { - renderDownloadLinks() { - const { cacheKey, config } = this.props; - const csvDownloadLink = `${ - config.baseUrl - }/download-results/${cacheKey}.csv`; - const xlsxDownloadLink = `${ - config.baseUrl - }/download-results/${cacheKey}.xlsx`; - if (config.allowCsvDownload) { - return ( - - Download: - - .csv - - - .xlsx - - - ); - } - } - - render() { - const { isRunning, queryResult, runQueryStartTime } = this.props; - if (isRunning || !queryResult) { - return ( -
    - {isRunning ? ( - - Query Run Time: - - sec. - - - ) : null} -
    - ); - } - - const serverSec = queryResult - ? queryResult.queryRunTime / 1000 + ' sec.' - : ''; - const rowCount = - queryResult && queryResult.rows ? queryResult.rows.length : ''; - - const incomplete = queryResult ? queryResult.incomplete : false; - +function QueryResultHeader({ + cacheKey, + config, + isRunning, + queryResult, + runQueryStartTime +}) { + if (isRunning || !queryResult) { return (
    - - Query Run Time: - {serverSec} - - - Rows: - {rowCount} - - {this.renderDownloadLinks()} - - - + {isRunning ? ( + + Query Run Time: + + sec. + + + ) : null}
    ); } + + const serverSec = queryResult + ? queryResult.queryRunTime / 1000 + ' sec.' + : ''; + const rowCount = + queryResult && queryResult.rows ? queryResult.rows.length : ''; + + const incomplete = queryResult ? queryResult.incomplete : false; + + const csvDownloadLink = `/download-results/${cacheKey}.csv`; + const xlsxDownloadLink = `/download-results/${cacheKey}.xlsx`; + + return ( +
    + + Query Run Time: + {serverSec} + + + Rows: + {rowCount} + + + {config.allowCsvDownload && ( + + Download: + + .csv + + + .xlsx + + + )} + + + + +
    + ); } QueryResultHeader.propTypes = { diff --git a/client/src/queryEditor/VisSidebar.js b/client/src/queryEditor/VisSidebar.js index 5ecec84c5..8083d6874 100644 --- a/client/src/queryEditor/VisSidebar.js +++ b/client/src/queryEditor/VisSidebar.js @@ -10,68 +10,63 @@ import ChartInputs from './ChartInputs.js'; const { Option } = Select; -class VisSidebar extends React.Component { - render() { - const { - isChartable, - onChartConfigurationFieldsChange, - onChartTypeChange, - onSaveImageClick, - onVisualizeClick, - query, - queryResult - } = this.props; - - const chartOptions = chartDefinitions.map(d => { - return ( - - ); - }); - +function VisSidebar({ + isChartable, + onChartConfigurationFieldsChange, + onChartTypeChange, + onSaveImageClick, + onVisualizeClick, + query, + queryResult +}) { + const chartOptions = chartDefinitions.map(d => { return ( - - - - - -
    - - -
    -
    + ); - } + }); + + return ( + + + + + +
    + + +
    +
    + ); } VisSidebar.propTypes = { diff --git a/client/src/users/InviteUserForm.js b/client/src/users/InviteUserForm.js index 74242925a..189c6941c 100644 --- a/client/src/users/InviteUserForm.js +++ b/client/src/users/InviteUserForm.js @@ -3,112 +3,79 @@ import Form from 'antd/lib/form'; import Input from 'antd/lib/input'; import message from 'antd/lib/message'; import Select from 'antd/lib/select'; -import React from 'react'; -import AppContext from '../containers/AppContext'; +import React, { useState } from 'react'; import fetchJson from '../utilities/fetch-json.js'; +import { Link } from 'react-router-dom'; const FormItem = Form.Item; const { Option } = Select; -class InviteUserForm extends React.Component { - state = { - email: null, - role: null, - isInviting: null - }; - - onEmailChange = e => { - this.setState({ email: e.target.value }); - }; +function InviteUserForm({ onInvited }) { + const [email, setEmail] = useState(null); + const [role, setRole] = useState(null); + const [isInviting, setIsInviting] = useState(null); - onRoleChange = role => { - this.setState({ role }); - }; - - onInviteClick = e => { - const { onInvited } = this.props; + const onInviteClick = async e => { const user = { - email: this.state.email, - role: this.state.role + email, + role }; - this.setState({ - isInviting: true - }); - fetchJson('POST', '/api/users', user).then(json => { - this.setState({ - isInviting: false - }); - if (json.error) { - return message.error('Whitelist failed: ' + json.error.toString()); - } - message.success('User Whitelisted'); - this.setState({ - email: null, - role: null - }); - onInvited(); - }); + setIsInviting(true); + const json = await fetchJson('POST', '/api/users', user); + setIsInviting(false); + if (json.error) { + return message.error('Whitelist failed: ' + json.error.toString()); + } + setEmail(null); + setRole(null); + message.success('User Whitelisted'); + onInvited(); }; - render() { - const { email, role, isInviting } = this.state; - - return ( - - {appContext => ( -
    -

    - Users may only sign up if they have first been whitelisted. Once - whitelisted, invite them to continue the sign-up process on the{' '} - - signup page - - . -

    -

    - Admins can add and edit database connections, as - well as whitelist/invite users to join. -

    -
    -
    - - - - - - - - - -
    -
    - )} -
    - ); - } + return ( +
    +

    + Users may only sign up if they have first been whitelisted. Once + whitelisted, invite them to continue the sign-up process on the{' '} + signup page. +

    +

    + Admins can add and edit database connections, as well + as whitelist/invite users to join. +

    +
    +
    + + + setEmail(e.target.value)} + /> + + + + + + +
    +
    + ); } export default InviteUserForm; diff --git a/client/src/users/UsersView.js b/client/src/users/UsersView.js index 7205ad98b..cb1e2b69c 100644 --- a/client/src/users/UsersView.js +++ b/client/src/users/UsersView.js @@ -6,7 +6,7 @@ import Popconfirm from 'antd/lib/popconfirm'; import Select from 'antd/lib/select'; import Table from 'antd/lib/table'; import moment from 'moment'; -import React from 'react'; +import React, { useEffect, useContext, useState } from 'react'; import { Link } from 'react-router-dom'; import uuid from 'uuid'; import AppNav from '../AppNav'; @@ -19,92 +19,80 @@ const { Content } = Layout; const { Column } = Table; const { Option } = Select; -class UsersView extends React.Component { - state = { - users: [], - isSaving: false, - showAddUser: false +function UsersView(props) { + const [users, setUsers] = useState([]); + const [showAddUser, setShowAddUser] = useState(false); + const appContext = useContext(AppContext); + const { currentUser } = appContext; + + const loadUsersFromServer = async () => { + const json = await fetchJson('GET', '/api/users'); + if (json.error) { + message.error(json.error); + } + if (json.users) { + const users = json.users.map(user => { + user.key = user._id; + return user; + }); + setUsers(users); + } }; - componentDidMount() { + useEffect(() => { document.title = 'SQLPad - Users'; - this.loadUsersFromServer(); - } + loadUsersFromServer(); + }, []); - handleDelete = user => { - fetchJson('DELETE', '/api/users/' + user._id).then(json => { - if (json.error) { - return message.error('Delete Failed: ' + json.error.toString()); - } - message.success('User Deleted'); - this.loadUsersFromServer(); - }); - }; - - loadUsersFromServer = () => { - fetchJson('GET', '/api/users').then(json => { - if (json.error) { - message.error(json.error); - } - if (json.users) { - const users = json.users.map(user => { - user.key = user._id; - return user; - }); - this.setState({ users }); - } - }); + const handleDelete = async user => { + const json = await fetchJson('DELETE', '/api/users/' + user._id); + if (json.error) { + return message.error('Delete Failed: ' + json.error.toString()); + } + message.success('User Deleted'); + loadUsersFromServer(); }; - updateUserRole = user => { - this.setState({ isSaving: true }); - fetchJson('PUT', '/api/users/' + user._id, { + const updateUserRole = async user => { + const json = await fetchJson('PUT', '/api/users/' + user._id, { role: user.role - }).then(json => { - this.loadUsersFromServer(); - this.setState({ isSaving: false }); - if (json.error) { - return message.error('Update failed: ' + json.error.toString()); - } - message.success('User Updated'); }); + loadUsersFromServer(); + if (json.error) { + return message.error('Update failed: ' + json.error.toString()); + } + message.success('User Updated'); }; - generatePasswordResetLink = user => { - this.setState({ isSaving: true }); + const generatePasswordResetLink = async user => { const passwordResetId = uuid.v4(); - fetchJson('PUT', '/api/users/' + user._id, { + const json = await fetchJson('PUT', '/api/users/' + user._id, { passwordResetId - }).then(json => { - this.loadUsersFromServer(); - this.setState({ isSaving: false }); - if (json.error) { - return message.error('Update failed: ' + json.error.toString()); - } - message.success('Password link generated'); }); + loadUsersFromServer(); + if (json.error) { + return message.error('Update failed: ' + json.error.toString()); + } + message.success('Password link generated'); }; - removePasswordResetLink = user => { - this.setState({ isSaving: true }); - fetchJson('PUT', '/api/users/' + user._id, { + const removePasswordResetLink = async user => { + const json = await fetchJson('PUT', '/api/users/' + user._id, { passwordResetId: '' - }).then(json => { - this.loadUsersFromServer(); - this.setState({ isSaving: false }); - if (json.error) { - return message.error('Update failed: ' + json.error.toString()); - } - message.success('Password reset link removed'); }); + loadUsersFromServer(); + if (json.error) { + return message.error('Update failed: ' + json.error.toString()); + } + message.success('Password reset link removed'); }; - handleOnInvited = () => { - this.loadUsersFromServer(); - this.setState({ showAddUser: false }); + const handleOnInvited = () => { + loadUsersFromServer(); + setShowAddUser(false); }; - createdRender = (text, record) => { + const createdRender = (text, record) => { return !record.signupDate ? ( not signed up yet ) : ( @@ -112,39 +100,31 @@ class UsersView extends React.Component { ); }; - roleRender = (text, record) => { + const roleRender = (text, record) => { return ( - - {appContext => { - const { currentUser } = appContext; - - return ( - - ); + ); }; - resetButtonRender = (text, record) => { + const resetButtonRender = (text, record) => { if (record.passwordResetId) { return ( @@ -155,92 +135,72 @@ class UsersView extends React.Component { ); } return ( - ); }; - renderTable() { - const { users } = this.state; - return ( - - - - - - { - return ( - this.handleDelete(record)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > -
    - ); - } - - renderModal() { - const { showAddUser } = this.state; - return ( - this.setState({ showAddUser: false })} + return ( + + - - - ); - } - - render() { - return ( - - -
    - +
    + +
    + - New user - - - -
    {this.renderTable()}
    - {this.renderModal()} -
    - - - ); - } + + + + + { + return ( + handleDelete(record)} + onCancel={() => {}} + okText="Yes" + cancelText="No" + > +
    +
    + setShowAddUser(false)} + > + + +
    +
    +
    + ); } export default UsersView; From 231b663aca2f9407e00077f266186d1f4972cff7 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 25 Mar 2019 09:40:19 -0400 Subject: [PATCH 017/855] Chart functional component & hooks (#419) * Use functional components and hooks for app context pages * Remove unused Button component * More functional component work * More functional components * WIP Gotta put this off it is getting too crazy * Handle user not provided * Use fancy refs and things * Change activeTabKey prop to isVisible it fits the intent better * Fix busted save image button * Hooks and function component for QueryChartOnly --- client/src/QueryChartOnly.js | 131 ++++---- client/src/common/ExportButton.js | 2 +- client/src/common/SqlpadTauChart.js | 418 +++++-------------------- client/src/common/getTauChartConfig.js | 273 ++++++++++++++++ client/src/queryEditor/QueryEditor.js | 49 ++- client/src/queryEditor/VisSidebar.js | 11 - server/drivers/index.js | 6 +- 7 files changed, 439 insertions(+), 451 deletions(-) create mode 100644 client/src/common/getTauChartConfig.js diff --git a/client/src/QueryChartOnly.js b/client/src/QueryChartOnly.js index 86c45c40a..d1b121133 100644 --- a/client/src/QueryChartOnly.js +++ b/client/src/QueryChartOnly.js @@ -1,99 +1,76 @@ import PropTypes from 'prop-types'; -import React from 'react'; +import React, { useState, useEffect, useRef } from 'react'; import ExportButton from './common/ExportButton.js'; import IncompleteDataNotification from './common/IncompleteDataNotification'; import SqlpadTauChart from './common/SqlpadTauChart.js'; import fetchJson from './utilities/fetch-json.js'; -class QueryChartOnly extends React.Component { - state = { - isRunning: false, - runQueryStartTime: undefined, - queryResult: undefined - }; +function QueryChartOnly({ queryId }) { + const [isRunning, setIsRunning] = useState(false); + const [queryResult, setQueryResult] = useState(null); + const [query, setQuery] = useState(null); + const [queryError, setQueryError] = useState(null); - runQuery = queryId => { - this.setState({ - isRunning: true, - runQueryStartTime: new Date() - }); - fetchJson('GET', '/api/queries/' + queryId) - .then(json => { - if (json.error) console.error(json.error); - this.setState({ - query: json.query - }); - }) - .then(() => { - return fetchJson('GET', '/api/query-result/' + queryId); - }) - .then(json => { - if (json.error) console.error(json.error); - this.setState({ - isRunning: false, - queryError: json.error, - queryResult: json.queryResult - }); - }); - }; + const sqlpadTauChart = useRef(null); - componentDidMount() { - document.title = 'SQLPad'; - this.runQuery(this.props.queryId); - } + const runQuery = async queryId => { + setIsRunning(true); - onSaveImageClick = e => { - if (this.sqlpadTauChart && this.sqlpadTauChart.chart) { - this.sqlpadTauChart.chart.fire('exportTo', 'png'); + const queryJson = await fetchJson('GET', '/api/queries/' + queryId); + if (queryJson.error) { + setIsRunning(false); + setQueryError(queryJson.error); + return; } - }; + setQuery(queryJson.query); - hasRows = () => { - var queryResult = this.state.queryResult; - return !!(queryResult && queryResult.rows && queryResult.rows.length); + const resultJson = await fetchJson('GET', '/api/query-result/' + queryId); + setIsRunning(false); + setQueryError(resultJson.error); + setQueryResult(resultJson.queryResult); }; - isChartable = () => { - var pending = this.state.isRunning || this.state.queryError; - return !pending && this.hasRows(); - }; + useEffect(() => { + document.title = 'SQLPad'; + runQuery(queryId); + }, [queryId]); - render() { - const { query, queryResult, queryError, isRunning } = this.state; + const onSaveImageClick = e => { + if (sqlpadTauChart.current && sqlpadTauChart.current.exportPng) { + sqlpadTauChart.current.exportPng(); + } + }; - const incomplete = queryResult ? queryResult.incomplete : false; - const cacheKey = queryResult ? queryResult.cacheKey : null; + const incomplete = queryResult ? queryResult.incomplete : false; + const cacheKey = queryResult ? queryResult.cacheKey : null; - return ( -
    -
    - {query ? query.name : ''} -
    - - -
    -
    -
    - { - this.sqlpadTauChart = ref; - }} + return ( +
    +
    + {query ? query.name : ''} +
    + +
    - ); - } +
    + +
    +
    + ); } QueryChartOnly.propTypes = { diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index 14bcccf03..982ec4906 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -28,7 +28,7 @@ function ExportButton({ cacheKey, onSaveImageClick }) { overlay={ {onSaveImageClick && ( - png + png )} diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index 7721aca8b..3edc58040 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -1,349 +1,102 @@ -import message from 'antd/lib/message'; import 'd3'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { + useEffect, + useImperativeHandle, + useRef, + forwardRef +} from 'react'; import { Chart } from 'taucharts'; -import exportTo from 'taucharts/build/development/plugins/tauCharts.export'; -import legend from 'taucharts/build/development/plugins/tauCharts.legend'; -import quickFilter from 'taucharts/build/development/plugins/tauCharts.quick-filter'; -import tooltip from 'taucharts/build/development/plugins/tauCharts.tooltip'; -import tcTrendline from 'taucharts/build/development/plugins/tauCharts.trendline'; -import chartDefinitions from '../utilities/chartDefinitions.js'; import SpinKitCube from './SpinKitCube.js'; - -class SqlpadTauChart extends React.Component { - displayName = 'SqlpadTauChart'; - - componentDidUpdate(prevProps) { - const { isRunning, queryError, renderChart } = this.props; - if (isRunning || queryError) { - this.destroyChart(); - } else if (renderChart && !this.chart) { - this.renderChart(); - } - } - - chart = undefined; - - destroyChart = () => { - if (this.chart) { - this.chart.destroy(); - this.chart = null; - } - }; - - getUnmetFields = (chartType, selectedFieldMap) => { - const chartDefinition = chartDefinitions.find( - def => def.chartType === chartType - ); - if (!chartDefinition) { - throw new Error(`Unknown chartType ${chartType}`); - } - const unmetRequiredFields = []; - - chartDefinition.fields.forEach(field => { - if (field.required && !selectedFieldMap[field.fieldId]) { - unmetRequiredFields.push(field); +import getTauChartConfig from './getTauChartConfig'; + +function SqlpadTauChart({ + isRunning, + queryError, + queryResult, + query, + forwardedRef, + isVisible +}) { + const chartConfiguration = query && query.chartConfiguration; + const queryName = query ? query.name : ''; + + const chartRef = useRef(null); + + // TODO rendering on every change like this might get too expensive + // Revisit with latest version of taucharts and d3 once UI is updated + useEffect(() => { + let chart; + + if ( + isVisible && + !isRunning && + !queryError && + chartConfiguration && + queryResult + ) { + const chartConfig = getTauChartConfig( + chartConfiguration, + queryResult, + queryName + ); + if (chartConfig) { + chart = new Chart(chartConfig); + chart.renderTo('#chart'); } - }); - - return unmetRequiredFields; - }; - - renderChart = rerender => { - const { queryResult, query } = this.props; - // This is invoked during following: - // - Vis tab enter - // - Visualize button press (forces rerender) - // - new data arrival - const meta = queryResult ? queryResult.meta : {}; - let dataRows = queryResult ? queryResult.rows : []; - const chartType = query.chartConfiguration.chartType; - const selectedFields = query.chartConfiguration.fields; - - const chartDefinition = chartDefinitions.find( - def => def.chartType === chartType - ); - - if (rerender || !dataRows.length || !chartDefinition) { - this.destroyChart(); - } - - // If there's no data just exit the chart render - if (!dataRows.length) { - return; } - // if there's no chart definition exit the render - if (!chartDefinition) { - return; - } + // set instance of chart to ref + chartRef.current = chart; - const chartConfig = { - type: chartDefinition.tauChartsType, - plugins: [ - tooltip(), - legend(), - exportTo({ - cssPaths: [ - // NOTE: We must ref the file in vendor dir for export images to work - // (we don't know what the webpack bundle css path will be) - window.BASE_URL + '/javascripts/vendor/tauCharts/tauCharts.min.css' - ], - fileName: query.name || 'Unnamed query' - }) - ], - settings: { - asyncRendering: true, - renderingTimeout: 10000, - syncRenderingInterval: 50, - handleRenderingErrors: true, - utcTime: true + // cleanup chart + return () => { + if (chart) { + chart.destroy(); } }; - - // loop through data rows and convert types as needed - dataRows = dataRows.map(row => { - const newRow = {}; - Object.keys(row).forEach(col => { - const datatype = queryResult.meta[col].datatype; - if (datatype === 'date') { - newRow[col] = new Date(row[col]); - } else if (datatype === 'number') { - newRow[col] = Number(row[col]); - } else { - newRow[col] = row[col]; - } - }); - - // HACK - - // Facets need to be a dimension, not a measure. - // tauCharts auto detects numbers to be measures - // Here we'll convert a number to a string, - // to trick tauCharts into thinking its a dimension - const forceDimensionFields = chartDefinition.fields.filter( - field => field.forceDimension === true - ); - forceDimensionFields.forEach(fieldDefinition => { - const col = selectedFields[fieldDefinition.fieldId]; - const colDatatype = meta[col] ? meta[col].datatype : null; - if (col && colDatatype === 'number' && newRow[col]) { - newRow[col] = newRow[col].toString(); - } - }); - return newRow; - }); - - // Some chartConfiguration.fields may reference columns that no longer exist - // Remove them from a copy of chartConfigurationFields - // Unless they aren't column mapping fields (like trendline, quickfilter) - const cleanedChartConfigurationFields = Object.keys( - query.chartConfiguration.fields - ).reduce((fieldsMap, field) => { - const fieldDefinition = chartDefinition.fields.find( - f => f.fieldId === field - ); - const value = query.chartConfiguration.fields[field]; - - if (fieldDefinition && fieldDefinition.inputType !== 'field-dropdown') { - fieldsMap[field] = value; - } else if (meta[value]) { - fieldsMap[field] = value; + }, [ + isRunning, + queryError, + queryResult, + chartConfiguration, + queryName, + isVisible + ]); + + useImperativeHandle(forwardedRef, () => ({ + exportPng: () => { + if (chartRef.current && chartRef.current.fire) { + chartRef.current.fire('exportTo', 'png'); } - return fieldsMap; - }, {}); - - // Now that non-existing columns are removed from the configuration fields - // Validate that the chart required fields are provided - const unmetFields = this.getUnmetFields( - chartType, - cleanedChartConfigurationFields - ); - - if (unmetFields.length) { - // if rerender is true, a render was explicitly requested by user clicking the vis button - // TODO - highlight fields that are required but not provided or clear values no longer relevant - if (rerender) { - message.error( - 'Unmet required fields: ' + unmetFields.map(f => f.label).join(', ') - ); + }, + resize: () => { + if (chartRef.current && chartRef.current.resize) { + chartRef.current.resize(); } - return; - } - - const { - x, - xFacet, - y, - yFacet, - filter, - trendline, - split, - size, - yMin, - yMax, - barvalue, - valueFacet, - barlabel, - labelFacet, - color - } = cleanedChartConfigurationFields; - - switch (chartType) { - case 'line': - chartConfig.x = [x]; - if (xFacet) { - chartConfig.x.unshift(xFacet); - } - chartConfig.y = [y]; - if (yFacet) { - chartConfig.y.unshift(yFacet); - } - if (filter) { - chartConfig.plugins.push(quickFilter()); - } - if (trendline) { - chartConfig.plugins.push(tcTrendline()); - } - if (split) { - chartConfig.color = split; - } - if (size) { - chartConfig.size = size; - } - if (yMin || yMax) { - chartConfig.guide = { - y: { autoScale: false } - }; - if (yMin) { - chartConfig.guide.y.min = Number(yMin); - } - if (yMax) { - chartConfig.guide.y.max = Number(yMax); - } - } - break; - - case 'bar': - chartConfig.x = [barvalue]; - if (valueFacet) { - chartConfig.x.unshift(valueFacet); - } - chartConfig.y = [barlabel]; - if (labelFacet) { - chartConfig.y.unshift(labelFacet); - } - break; - - case 'verticalbar': - chartConfig.y = [barvalue]; - if (valueFacet) { - chartConfig.y.unshift(valueFacet); - } - chartConfig.x = [barlabel]; - if (labelFacet) { - chartConfig.x.unshift(labelFacet); - } - break; - - case 'stacked-bar-horizontal': - chartConfig.x = [barvalue]; - if (valueFacet) { - chartConfig.x.unshift(valueFacet); - } - chartConfig.y = [barlabel]; - if (labelFacet) { - chartConfig.y.unshift(labelFacet); - } - if (color) { - chartConfig.color = color; - } - break; - - case 'stacked-bar-vertical': - chartConfig.y = [barvalue]; - if (valueFacet) { - chartConfig.y.unshift(valueFacet); - } - chartConfig.x = [barlabel]; - if (labelFacet) { - chartConfig.x.unshift(labelFacet); - } - if (color) { - chartConfig.color = color; - } - break; - - case 'bubble': - chartConfig.x = [x]; - if (xFacet) { - chartConfig.x.unshift(xFacet); - } - chartConfig.y = [y]; - if (yFacet) { - chartConfig.y.unshift(yFacet); - } - if (filter) { - chartConfig.plugins.push(quickFilter()); - } - if (trendline) { - chartConfig.plugins.push(tcTrendline()); - } - if (size) { - chartConfig.size = size; - } - if (color) { - chartConfig.color = color; - } - break; - - default: - console.error('unknown chart type'); - } - - // Add data to chart chartConfig - chartConfig.data = dataRows; - - if (!this.chart) { - this.chart = new Chart(chartConfig); - this.chart.renderTo('#chart'); - } else { - this.chart.setData(dataRows); } - }; - - setData = chartData => { - this.chart.setData(chartData); - }; + })); - componentWillUnmount() { - this.destroyChart(); + if (isRunning) { + return ( +
    + +
    + ); } - render() { - const { isRunning, queryError } = this.props; - if (isRunning) { - return ( -
    - -
    - ); - } - if (queryError) { - return ( -
    - {queryError} -
    - ); - } - return
    ; + if (queryError) { + return ( +
    + {queryError} +
    + ); } + + return
    ; } SqlpadTauChart.propTypes = { @@ -351,7 +104,10 @@ SqlpadTauChart.propTypes = { query: PropTypes.object, queryError: PropTypes.string, queryResult: PropTypes.object, - renderChart: PropTypes.bool + forwardedRef: PropTypes.any, + isVisible: PropTypes.bool }; -export default SqlpadTauChart; +export default forwardRef((props, ref) => { + return ; +}); diff --git a/client/src/common/getTauChartConfig.js b/client/src/common/getTauChartConfig.js new file mode 100644 index 000000000..8dfaba664 --- /dev/null +++ b/client/src/common/getTauChartConfig.js @@ -0,0 +1,273 @@ +import chartDefinitions from '../utilities/chartDefinitions.js'; +import exportTo from 'taucharts/build/development/plugins/tauCharts.export'; +import legend from 'taucharts/build/development/plugins/tauCharts.legend'; +import quickFilter from 'taucharts/build/development/plugins/tauCharts.quick-filter'; +import tooltip from 'taucharts/build/development/plugins/tauCharts.tooltip'; +import tcTrendline from 'taucharts/build/development/plugins/tauCharts.trendline'; + +const getUnmetFields = (chartType, selectedFieldMap) => { + const chartDefinition = chartDefinitions.find( + def => def.chartType === chartType + ); + if (!chartDefinition) { + throw new Error(`Unknown chartType ${chartType}`); + } + const unmetRequiredFields = []; + + chartDefinition.fields.forEach(field => { + if (field.required && !selectedFieldMap[field.fieldId]) { + unmetRequiredFields.push(field); + } + }); + + return unmetRequiredFields; +}; + +/** + * + * @param {object} query + * @param {string} [query.name] + * @param {object} queryResult + */ +export default function getTauChartConfig( + chartConfiguration, + queryResult, + queryName +) { + const meta = queryResult ? queryResult.meta : {}; + let dataRows = queryResult ? queryResult.rows : []; + const chartType = chartConfiguration && chartConfiguration.chartType; + const selectedFields = chartConfiguration && chartConfiguration.fields; + + const chartDefinition = chartDefinitions.find( + def => def.chartType === chartType + ); + + if (!dataRows.length || !chartDefinition) { + return null; + } + + const chartConfig = { + type: chartDefinition.tauChartsType, + plugins: [ + tooltip(), + legend(), + exportTo({ + cssPaths: [ + // NOTE: We must ref the file in vendor dir for export images to work + // (we don't know what the webpack bundle css path will be) + window.BASE_URL + '/javascripts/vendor/tauCharts/tauCharts.min.css' + ], + fileName: queryName || 'Unnamed query' + }) + ], + settings: { + asyncRendering: true, + renderingTimeout: 10000, + syncRenderingInterval: 50, + handleRenderingErrors: true, + utcTime: true + } + }; + + // loop through data rows and convert types as needed + dataRows = dataRows.map(row => { + const newRow = {}; + Object.keys(row).forEach(col => { + const datatype = queryResult.meta[col].datatype; + if (datatype === 'date') { + newRow[col] = new Date(row[col]); + } else if (datatype === 'number') { + newRow[col] = Number(row[col]); + } else { + newRow[col] = row[col]; + } + }); + + // HACK - + // Facets need to be a dimension, not a measure. + // tauCharts auto detects numbers to be measures + // Here we'll convert a number to a string, + // to trick tauCharts into thinking its a dimension + const forceDimensionFields = chartDefinition.fields.filter( + field => field.forceDimension === true + ); + forceDimensionFields.forEach(fieldDefinition => { + const col = selectedFields[fieldDefinition.fieldId]; + const colDatatype = meta[col] ? meta[col].datatype : null; + if (col && colDatatype === 'number' && newRow[col]) { + newRow[col] = newRow[col].toString(); + } + }); + return newRow; + }); + + // Some chartConfiguration.fields may reference columns that no longer exist + // Remove them from a copy of chartConfigurationFields + // Unless they aren't column mapping fields (like trendline, quickfilter) + const cleanedChartConfigurationFields = Object.keys( + chartConfiguration.fields + ).reduce((fieldsMap, field) => { + const fieldDefinition = chartDefinition.fields.find( + f => f.fieldId === field + ); + const value = chartConfiguration.fields[field]; + + if (fieldDefinition && fieldDefinition.inputType !== 'field-dropdown') { + fieldsMap[field] = value; + } else if (meta[value]) { + fieldsMap[field] = value; + } + return fieldsMap; + }, {}); + + // Now that non-existing columns are removed from the configuration fields + // Validate that the chart required fields are provided + const unmetFields = getUnmetFields( + chartType, + cleanedChartConfigurationFields + ); + + if (unmetFields.length) { + // TODO - highlight fields that are required but not provided or clear values no longer relevant + // message.error( + // 'Unmet required fields: ' + unmetFields.map(f => f.label).join(', ') + // ); + return null; + } + + const { + x, + xFacet, + y, + yFacet, + filter, + trendline, + split, + size, + yMin, + yMax, + barvalue, + valueFacet, + barlabel, + labelFacet, + color + } = cleanedChartConfigurationFields; + + switch (chartType) { + case 'line': + chartConfig.x = [x]; + if (xFacet) { + chartConfig.x.unshift(xFacet); + } + chartConfig.y = [y]; + if (yFacet) { + chartConfig.y.unshift(yFacet); + } + if (filter) { + chartConfig.plugins.push(quickFilter()); + } + if (trendline) { + chartConfig.plugins.push(tcTrendline()); + } + if (split) { + chartConfig.color = split; + } + if (size) { + chartConfig.size = size; + } + if (yMin || yMax) { + chartConfig.guide = { + y: { autoScale: false } + }; + if (yMin) { + chartConfig.guide.y.min = Number(yMin); + } + if (yMax) { + chartConfig.guide.y.max = Number(yMax); + } + } + break; + + case 'bar': + chartConfig.x = [barvalue]; + if (valueFacet) { + chartConfig.x.unshift(valueFacet); + } + chartConfig.y = [barlabel]; + if (labelFacet) { + chartConfig.y.unshift(labelFacet); + } + break; + + case 'verticalbar': + chartConfig.y = [barvalue]; + if (valueFacet) { + chartConfig.y.unshift(valueFacet); + } + chartConfig.x = [barlabel]; + if (labelFacet) { + chartConfig.x.unshift(labelFacet); + } + break; + + case 'stacked-bar-horizontal': + chartConfig.x = [barvalue]; + if (valueFacet) { + chartConfig.x.unshift(valueFacet); + } + chartConfig.y = [barlabel]; + if (labelFacet) { + chartConfig.y.unshift(labelFacet); + } + if (color) { + chartConfig.color = color; + } + break; + + case 'stacked-bar-vertical': + chartConfig.y = [barvalue]; + if (valueFacet) { + chartConfig.y.unshift(valueFacet); + } + chartConfig.x = [barlabel]; + if (labelFacet) { + chartConfig.x.unshift(labelFacet); + } + if (color) { + chartConfig.color = color; + } + break; + + case 'bubble': + chartConfig.x = [x]; + if (xFacet) { + chartConfig.x.unshift(xFacet); + } + chartConfig.y = [y]; + if (yFacet) { + chartConfig.y.unshift(yFacet); + } + if (filter) { + chartConfig.plugins.push(quickFilter()); + } + if (trendline) { + chartConfig.plugins.push(tcTrendline()); + } + if (size) { + chartConfig.size = size; + } + if (color) { + chartConfig.color = color; + } + break; + + default: + console.error('unknown chart type'); + } + + // Add data to chart chartConfig + chartConfig.data = dataRows; + + return chartConfig; +} diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 8f4013fac..37466ad69 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -1,7 +1,7 @@ import message from 'antd/lib/message'; import keymaster from 'keymaster'; import PropTypes from 'prop-types'; -import React from 'react'; +import React, { createRef } from 'react'; import { Prompt } from 'react-router-dom'; import SplitPane from 'react-split-pane'; import sqlFormatter from 'sql-formatter'; @@ -45,7 +45,7 @@ class QueryEditor extends React.Component { selectedText: '' }; - sqlpadTauChart = undefined; + sqlpadTauChart = createRef(undefined); getTagOptions() { const { availableTags, query } = this.state; @@ -194,13 +194,24 @@ class QueryEditor extends React.Component { handleChartConfigurationFieldsChange = (chartFieldId, queryResultField) => { const { query } = this.state; - query.chartConfiguration.fields[chartFieldId] = queryResultField; + const { fields } = query.chartConfiguration; + fields[chartFieldId] = queryResultField; + query.chartConfiguration = Object.assign({}, query.chartConfiguration, { + fields + }); this.setState({ query, unsavedChanges: true }); }; handleChartTypeChange = value => { const { query } = this.state; - query.chartConfiguration.chartType = value; + const { fields } = query.chartConfiguration; + query.chartConfiguration = Object.assign( + {}, + { fields }, + { + chartType: value + } + ); this.setState({ query, unsavedChanges: true }); }; @@ -225,8 +236,8 @@ class QueryEditor extends React.Component { }; handleSaveImageClick = e => { - if (this.sqlpadTauChart && this.sqlpadTauChart.chart) { - this.sqlpadTauChart.chart.fire('exportTo', 'png'); + if (this.sqlpadTauChart.current && this.sqlpadTauChart.current.exportPng) { + this.sqlpadTauChart.current.exportPng(); } }; @@ -234,19 +245,6 @@ class QueryEditor extends React.Component { this.setState({ activeTabKey: e.target.value }); }; - handleVisualizeClick = () => this.sqlpadTauChart.renderChart(true); - - hasRows = () => { - const queryResult = this.state.queryResult; - return !!(queryResult && queryResult.rows && queryResult.rows.length); - }; - - isChartable = () => { - const { isRunning, queryError, activeTabKey } = this.state; - const pending = isRunning || queryError; - return !pending && activeTabKey === 'vis' && this.hasRows(); - }; - async componentDidMount() { const { queryId, loadConnections } = this.props; @@ -310,8 +308,8 @@ class QueryEditor extends React.Component { }; handleVisPaneResize = () => { - if (this.sqlpadTauChart && this.sqlpadTauChart.chart) { - this.sqlpadTauChart.chart.resize(); + if (this.sqlpadTauChart.current && this.sqlpadTauChart.current.resize) { + this.sqlpadTauChart.current.resize(); } }; @@ -410,27 +408,22 @@ class QueryEditor extends React.Component { onChange={this.handleVisPaneResize} >
    { - this.sqlpadTauChart = ref; - }} + ref={this.sqlpadTauChart} + isVisible={activeTabKey === 'vis'} />
    diff --git a/client/src/queryEditor/VisSidebar.js b/client/src/queryEditor/VisSidebar.js index 8083d6874..b44b107ea 100644 --- a/client/src/queryEditor/VisSidebar.js +++ b/client/src/queryEditor/VisSidebar.js @@ -11,11 +11,9 @@ import ChartInputs from './ChartInputs.js'; const { Option } = Select; function VisSidebar({ - isChartable, onChartConfigurationFieldsChange, onChartTypeChange, onSaveImageClick, - onVisualizeClick, query, queryResult }) { @@ -54,13 +52,6 @@ function VisSidebar({ />
    - @@ -70,11 +61,9 @@ function VisSidebar({ } VisSidebar.propTypes = { - isChartable: PropTypes.bool, onChartConfigurationFieldsChange: PropTypes.func, onChartTypeChange: PropTypes.func, onSaveImageClick: PropTypes.func, - onVisualizeClick: PropTypes.func, query: PropTypes.object, queryResult: PropTypes.object }; diff --git a/server/drivers/index.js b/server/drivers/index.js index ce8114bbc..95961f4c2 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -103,7 +103,7 @@ if (debug || process.env.SQLPAD_TEST === 'true') { * Run query using driver implementation of connection * @param {*} query * @param {*} connection - * @param {object} user + * @param {object} [user] user may not be provided if chart links turned on * @returns {Promise} */ function runQuery(query, connection, user) { @@ -141,8 +141,8 @@ function runQuery(query, connection, user) { console.log( JSON.stringify({ - userId: user._id, - userEmail: user.email, + userId: user && user._id, + userEmail: user && user.email, connectionName, startTime, stopTime, From 9ea1193886e65ad5335429e30a1acefd4fb67702 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 29 Mar 2019 21:59:37 -0400 Subject: [PATCH 018/855] More functional components (#420) * functional component the ConnectionsStore * functional component for the ConnectionForm * Functional AppContextProvider * Refresh app context on config change --- client/src/configuration/ConfigurationView.js | 5 +- client/src/connections/ConnectionForm.js | 296 ++++++++---------- client/src/connections/ConnectionsStore.js | 186 ++++++----- client/src/containers/AppContextProvider.js | 72 ++--- 4 files changed, 265 insertions(+), 294 deletions(-) diff --git a/client/src/configuration/ConfigurationView.js b/client/src/configuration/ConfigurationView.js index cec577c0f..df8b2d7e1 100644 --- a/client/src/configuration/ConfigurationView.js +++ b/client/src/configuration/ConfigurationView.js @@ -3,18 +3,20 @@ import Layout from 'antd/lib/layout'; import message from 'antd/lib/message'; import Row from 'antd/lib/row'; import debounce from 'lodash.debounce'; -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useContext } from 'react'; import AppNav from '../AppNav'; import Header from '../common/Header'; import fetchJson from '../utilities/fetch-json.js'; import CheckListItem from './CheckListItem'; import ConfigEnvDocumentation from './ConfigEnvDocumentation'; import ConfigItemInput from './ConfigItemInput'; +import AppContext from '../containers/AppContext'; const { Content } = Layout; function ConfigurationView() { const [configItems, setConfigItems] = useState([]); + const appContext = useContext(AppContext); const loadConfigValuesFromServer = async () => { const json = await fetchJson('GET', '/api/config-items'); @@ -33,6 +35,7 @@ function ConfigurationView() { } else { message.success('Value saved'); loadConfigValuesFromServer(); + appContext.refreshAppContext(); } }, 500); diff --git a/client/src/connections/ConnectionForm.js b/client/src/connections/ConnectionForm.js index 758ee3da8..f0af5a905 100644 --- a/client/src/connections/ConnectionForm.js +++ b/client/src/connections/ConnectionForm.js @@ -4,7 +4,8 @@ import Form from 'antd/lib/form'; import Icon from 'antd/lib/icon'; import Input from 'antd/lib/input'; import Select from 'antd/lib/select'; -import React from 'react'; +import React, { useState, useEffect } from 'react'; +import message from 'antd/lib/message'; import fetchJson from '../utilities/fetch-json.js'; const FormItem = Form.Item; @@ -38,71 +39,64 @@ const tailFormItemLayout = { } }; -class ConnectionForm extends React.Component { - state = { - connectionEdits: {}, - drivers: [], - saving: false, - savingError: null, - testFailed: false, - testing: false, - testSuccess: false, - title: '', - visible: false - }; +function ConnectionForm({ connectionId, onConnectionSaved }) { + const [connectionEdits, setConnectionEdits] = useState({}); + const [drivers, setDrivers] = useState([]); + const [saving, setSaving] = useState(false); + const [testFailed, setTestFailed] = useState(false); + const [testing, setTesting] = useState(false); + const [testSuccess, setTestSuccess] = useState(false); - componentDidMount() { - this.loadDriversFromServer(); - this.loadConnectionFromServer(); + async function getDrivers() { + const json = await fetchJson('GET', '/api/drivers'); + if (json.error) { + message.error(json.error); + } else { + setDrivers(json.drivers); + } } - // TODO move this to app load - no reason this will change - loadDriversFromServer = () => { - fetchJson('GET', '/api/drivers').then(json => { - this.setState({ drivers: json.drivers }); - }); - }; + useEffect(() => { + getDrivers(); + }, []); - loadConnectionFromServer = async () => { - const { connectionId } = this.props; + async function getConnection(connectionId) { if (connectionId) { const json = await fetchJson('GET', `/api/connections/${connectionId}`); if (json.error) { - return console.error(json.error); + message.error(json.error); + } else { + setConnectionEdits(json.connection); } - return this.setState({ connectionEdits: json.connection }); } - }; + } + + useEffect(() => { + getConnection(connectionId); + }, [connectionId]); - setConnectionValue = (key, value) => { - const { connectionEdits } = this.state; - connectionEdits[key] = value; - return this.setState({ connectionEdits }); + const setConnectionValue = (key, value) => { + setConnectionEdits(prev => ({ ...prev, [key]: value })); }; - testConnection = async () => { - const { connectionEdits } = this.state; - this.setState({ testing: true }); + const testConnection = async () => { + setTesting(true); const json = await fetchJson( 'POST', '/api/test-connection', connectionEdits ); - return this.setState({ - testing: false, - testFailed: json.error ? true : false, - testSuccess: json.error ? false : true - }); + setTesting(false); + setTestFailed(json.error ? true : false); + setTestSuccess(json.error ? false : true); }; - saveConnection = async () => { - const { saving, connectionEdits } = this.state; - const { onConnectionSaved } = this.props; + const saveConnection = async () => { if (saving) { return; } - this.setState({ saving: true }); + setSaving(true); let json; if (connectionEdits._id) { @@ -116,14 +110,13 @@ class ConnectionForm extends React.Component { } if (json.error) { - return this.setState({ saving: false, savingError: json.error }); + setSaving(false); + return message.error(json.error); } return onConnectionSaved(json.connection); }; - renderDriverFields() { - const { drivers, connectionEdits } = this.state; - + const renderDriverFields = () => { if (connectionEdits.driver && drivers.length) { // NOTE connection.driver is driverId const driver = drivers.find( @@ -141,12 +134,11 @@ class ConnectionForm extends React.Component { const value = connectionEdits[field.key] || ''; return ( - {/* */} - this.setConnectionValue(e.target.name, e.target.value) + setConnectionValue(e.target.name, e.target.value) } /> @@ -157,14 +149,13 @@ class ConnectionForm extends React.Component { // Because we dont return a password, Chrome goes ahead and autofills return ( - {/* */} - this.setConnectionValue(e.target.name, e.target.value) + setConnectionValue(e.target.name, e.target.value) } /> @@ -177,7 +168,7 @@ class ConnectionForm extends React.Component { checked={checked} name={field.key} onChange={e => - this.setConnectionValue(e.target.name, e.target.checked) + setConnectionValue(e.target.name, e.target.checked) } > {field.label} @@ -188,122 +179,109 @@ class ConnectionForm extends React.Component { return null; }); } - } - - render() { - const { - drivers, - connectionEdits, - saving, - testing, - testSuccess, - testFailed - } = this.state; + }; - const { name = '', driver = '' } = connectionEdits; + const { name = '', driver = '' } = connectionEdits; - const driverSelectOptions = [ + if (!drivers.length) { + driverSelectOptions.push( + + ); + } else { + drivers + .sort((a, b) => a.name > b.name) + .forEach(driver => + driverSelectOptions.push( + + ) ); - } else { - drivers - .sort((a, b) => a.name > b.name) - .forEach(driver => - driverSelectOptions.push( - - ) - ); - } + } - return ( -
    -
    + +
    + + setConnectionValue(e.target.name, e.target.value)} + /> + + + + + + {renderDriverFields()} +
    +
    -
    - - - this.setConnectionValue(e.target.name, e.target.value) - } - /> - - - - - - {this.renderDriverFields()} -
    -
    - {' '} - -
    - -
    - ); - } + {saving ? 'Saving...' : 'Save'} + {' '} + +
    + +
    + ); } export default ConnectionForm; diff --git a/client/src/connections/ConnectionsStore.js b/client/src/connections/ConnectionsStore.js index aca1af067..769ee53fe 100644 --- a/client/src/connections/ConnectionsStore.js +++ b/client/src/connections/ConnectionsStore.js @@ -1,6 +1,6 @@ import message from 'antd/lib/message'; import sortBy from 'lodash.sortby'; -import React from 'react'; +import React, { useState } from 'react'; import fetchJson from '../utilities/fetch-json.js'; const ONE_HOUR_MS = 1000 * 60 * 60; @@ -9,105 +9,99 @@ const sortFunctions = [connection => connection.name.toLowerCase()]; export const ConnectionsContext = React.createContext({}); -export class ConnectionsStore extends React.Component { - constructor() { - super(); - this.state = { - selectedConnectionId: null, - connections: [], - lastUpdated: null, - loading: false, - loadingError: null, - - selectConnection: id => this.setState({ selectedConnectionId: id }), - - setConnections: connections => { - return this.setState({ - connections: sortBy(connections, sortFunctions) - }); - }, - - // Calls delete API and updates store - deleteConnection: async connectionId => { - const json = await fetchJson( - 'DELETE', - '/api/connections/' + connectionId - ); - // TODO should errors be messaged like this or should they be captured in state? - if (json.error) { - return message.error('Delete failed'); - } - const connections = this.state.connections.filter( - c => c._id !== connectionId - ); - return this.setState({ connections }); - }, - - // Updates store (is not resonponsible for API call) - addUpdateConnection: async connection => { - const found = this.state.connections.find( - c => c._id === connection._id - ); - if (found) { - const connections = this.state.connections.map(c => { - if (c._id === connection._id) { - return connection; - } - return c; - }); - return this.state.setConnections(connections); - } - - return this.state.setConnections( - [connection].concat(this.state.connections) - ); - }, - - loadConnections: async force => { - const { lastUpdated, loading, connections } = this.state; +export function ContextStateStore({ children }) { + const state = useState({}); + return ( + + {children} + + ); +} - if (loading) { - return; +export function ConnectionsStore({ children }) { + const [selectedConnectionId, setSelectedConnectionId] = useState(null); + const [connections, setConnections] = useState([]); + const [lastUpdated, setLastUpdated] = useState(null); + const [loading, setLoading] = useState(false); + const [loadingError, setLoadingError] = useState(null); + + const selectConnection = id => setSelectedConnectionId(id); + + const _setConnections = connections => + setConnections(sortBy(connections, sortFunctions)); + + const deleteConnection = async connectionId => { + const json = await fetchJson('DELETE', '/api/connections/' + connectionId); + // TODO should errors be messaged like this or should they be captured in state? + if (json.error) { + return message.error('Delete failed'); + } + return setConnections(connections.filter(c => c._id !== connectionId)); + }; + + // Updates store (is not resonponsible for API call) + const addUpdateConnection = async connection => { + const found = connections.find(c => c._id === connection._id); + if (found) { + const mappedConnections = connections.map(c => { + if (c._id === connection._id) { + return connection; } + return c; + }); + return setConnections(mappedConnections); + } + return setConnections([connection].concat(connections)); + }; + + const loadConnections = async force => { + if (loading) { + return; + } + + if ( + force || + !connections.length || + (lastUpdated && new Date() - lastUpdated > ONE_HOUR_MS) + ) { + setLoading(true); + const { error, connections } = await fetchJson( + 'GET', + '/api/connections/' + ); + if (error) { + message.error(error); + setLoadingError(error); + } - if ( - force || - !connections.length || - (lastUpdated && new Date() - lastUpdated > ONE_HOUR_MS) - ) { - this.setState({ loading: true }); - const { error, connections } = await fetchJson( - 'GET', - '/api/connections/' - ); - if (error) { - message.error(error); - } - - let { selectedConnectionId } = this.state; - if (connections && connections.length === 1) { - selectedConnectionId = connections[0]._id; - } - - return this.setState({ - selectedConnectionId, - loadingError: error, - connections, - loading: false, - lastUpdated: new Date() - }); - } + if (connections && connections.length === 1) { + setSelectedConnectionId(connections[0]._id); } - }; - } - - render() { - return ( - - {this.props.children} - - ); - } + + setConnections(connections); + setLoading(false); + setLastUpdated(new Date()); + } + }; + + const value = { + selectedConnectionId, + loadingError, + connections, + loading, + lastUpdated, + selectConnection, + setConnections: _setConnections, + deleteConnection, + addUpdateConnection, + loadConnections + }; + + return ( + + {children} + + ); } export default ConnectionsStore; diff --git a/client/src/containers/AppContextProvider.js b/client/src/containers/AppContextProvider.js index b22cd1256..2bc635266 100644 --- a/client/src/containers/AppContextProvider.js +++ b/client/src/containers/AppContextProvider.js @@ -1,47 +1,43 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import fetchJson from '../utilities/fetch-json.js'; import AppContext from './AppContext'; -export class AppContextProvider extends React.Component { - constructor() { - super(); - this.state = { - refreshAppContext: async () => { - const json = await fetchJson('GET', 'api/app'); - // Assign config.baseUrl to global - // It doesn't change and is needed for fetch requests - // This allows us to simplify the fetch() call - if (!json.config) { - return; - } - window.BASE_URL = json.config.baseUrl; - return this.setState({ - config: json.config, - smtpConfigured: json.smtpConfigured, - googleAuthConfigured: json.googleAuthConfigured, - currentUser: json.currentUser, - passport: json.passport, - adminRegistrationOpen: json.adminRegistrationOpen, - version: json.version - }); - } - }; - } +function AppContextProvider({ children }) { + const [state, setState] = useState({}); - componentDidMount() { - this.state.refreshAppContext(); - } + const refreshAppContext = async () => { + const json = await fetchJson('GET', 'api/app'); + if (!json.config) { + return; + } + // Assign config.baseUrl to global + // It doesn't change and is needed for fetch requests + // This allows us to simplify the fetch() call + window.BASE_URL = json.config.baseUrl; - render() { - const { config } = this.state; + // refreshAppContext added to state here to allow children to refresh this + setState({ + refreshAppContext, + config: json.config, + smtpConfigured: json.smtpConfigured, + googleAuthConfigured: json.googleAuthConfigured, + currentUser: json.currentUser, + passport: json.passport, + adminRegistrationOpen: json.adminRegistrationOpen, + version: json.version + }); + }; - // Don't render children until config is sorted out - return ( - - {config ? this.props.children : null} - - ); - } + useEffect(() => { + refreshAppContext(); + }, []); + + // Don't render children until config is sorted out + return ( + + {state.config ? children : null} + + ); } export default AppContextProvider; From e254bc2723e55d0c88668bb839d8ba4ad2d2f2df Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 29 Mar 2019 22:32:26 -0400 Subject: [PATCH 019/855] Allow adding new connection from connection picker --- client/src/queryEditor/ConnectionDropdown.js | 84 +++++++++++++------- 1 file changed, 55 insertions(+), 29 deletions(-) diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index 36903b6b7..802cc6272 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -1,39 +1,65 @@ import Select from 'antd/lib/select'; -import React from 'react'; +import Icon from 'antd/lib/icon'; +import React, { useContext, useState } from 'react'; import { ConnectionsContext } from '../connections/ConnectionsStore'; +import ConnectionEditDrawer from '../connections/ConnectionEditDrawer'; const { Option } = Select; function ConnectionDropdown() { + const connectionsContext = useContext(ConnectionsContext); + const [showEdit, setShowEdit] = useState(false); + + const handleChange = id => { + if (id === 'new') { + return setShowEdit(true); + } + connectionsContext.selectConnection(id); + }; + + const handleConnectionSaved = connection => { + connectionsContext.addUpdateConnection(connection); + connectionsContext.selectConnection(connection._id); + setShowEdit(false); + }; + return ( - - {context => ( - - )} - + <> + + setShowEdit(false)} + onConnectionSaved={handleConnectionSaved} + /> + ); } From 611ac723e54a144bdab8260565e70a44c04dd1c1 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 29 Mar 2019 23:19:08 -0400 Subject: [PATCH 020/855] Remove query select button from connections list drawer --- .../src/connections/ConnectionListDrawer.js | 27 +------------------ 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/client/src/connections/ConnectionListDrawer.js b/client/src/connections/ConnectionListDrawer.js index c207f1e05..ac3df2a7d 100644 --- a/client/src/connections/ConnectionListDrawer.js +++ b/client/src/connections/ConnectionListDrawer.js @@ -15,12 +15,7 @@ function ConnectionListDrawer({ visible, onClose }) { const connectionsContext = useContext(ConnectionsContext); const { currentUser } = appContext; - const { - selectConnection, - selectedConnectionId, - connections, - deleteConnection - } = connectionsContext; + const { connections, deleteConnection } = connectionsContext; useEffect(() => { connectionsContext.loadConnections(); @@ -128,26 +123,6 @@ function ConnectionListDrawer({ visible, onClose }) { const actions = []; - if (selectedConnectionId === item._id) { - actions.push( - - ); - } else { - actions.push( - - ); - } - if (currentUser.role === 'admin') { actions.push( From 92105b37e82c09489e4b44f4e646ed7e4806fb74 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 29 Mar 2019 23:19:36 -0400 Subject: [PATCH 021/855] Always show connection list menu item --- client/src/AppNav.js | 17 ++++++++++++++++- .../src/queryEditor/QueryEditorContainer.js | 19 ++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/client/src/AppNav.js b/client/src/AppNav.js index 0ab6ab36e..11bca7f50 100644 --- a/client/src/AppNav.js +++ b/client/src/AppNav.js @@ -1,19 +1,21 @@ +import PropTypes from 'prop-types'; import Icon from 'antd/lib/icon'; import Layout from 'antd/lib/layout'; import Menu from 'antd/lib/menu'; import Modal from 'antd/lib/modal'; -import PropTypes from 'prop-types'; import React, { useContext, useState } from 'react'; import { Redirect, Route } from 'react-router-dom'; import AboutContent from './AboutContent'; import AppContext from './containers/AppContext'; import fetchJson from './utilities/fetch-json.js'; +import ConnectionListDrawer from './connections/ConnectionListDrawer'; const { Content, Sider } = Layout; function AppNav({ children, pageMenuItems }) { const [collapsed, setCollapsed] = useState(true); const [redirect, setRedirect] = useState(false); + const [connectionsVisible, setConnectionsVisible] = useState(false); const appContext = useContext(AppContext); const { currentUser, version } = appContext; @@ -65,6 +67,15 @@ function AppNav({ children, pageMenuItems }) { ( + {currentUser.role === 'admin' && ( + setConnectionsVisible(true)} + > + + DB connections + + )} {currentUser.role === 'admin' && ( {children} + setConnectionsVisible(false)} + /> ); } diff --git a/client/src/queryEditor/QueryEditorContainer.js b/client/src/queryEditor/QueryEditorContainer.js index 565175b67..de21dc344 100644 --- a/client/src/queryEditor/QueryEditorContainer.js +++ b/client/src/queryEditor/QueryEditorContainer.js @@ -1,26 +1,15 @@ -import Icon from 'antd/lib/icon'; -import Menu from 'antd/lib/menu'; -import React, { useContext, useState } from 'react'; +import React, { useContext } from 'react'; import AppNav from '../AppNav'; -import ConnectionListDrawer from '../connections/ConnectionListDrawer'; import { ConnectionsContext } from '../connections/ConnectionsStore'; import AppContext from '../containers/AppContext'; import QueryEditor from './QueryEditor'; function QueryEditorContainer(props) { - const [visible, setVisible] = useState(false); const appContext = useContext(AppContext); const connectionsContext = useContext(ConnectionsContext); return ( - setVisible(true)}> - - DB connections - - ]} - > + - setVisible(false)} - /> ); } From 951f807d52918b5caf367a7d00b37b64cc9a9b3c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 30 Mar 2019 12:21:52 -0400 Subject: [PATCH 022/855] Simplify the configuration UI (#421) * Simplify config ui Remove environment config info, checklist. Move additional config item info into a popover * Only send UI config items from API * Make configuration view a drawer And make inputs fancy * Remove unnecessary style --- client/src/App.js | 10 - client/src/AppNav.js | 30 +-- client/src/configuration/CheckListItem.js | 26 --- .../configuration/ConfigEnvDocumentation.js | 49 ---- client/src/configuration/ConfigItemInput.js | 84 ++++++- .../src/configuration/ConfigurationDrawer.js | 110 +++++++++ client/src/configuration/ConfigurationView.js | 213 ------------------ server/routes/config-items.js | 3 +- 8 files changed, 199 insertions(+), 326 deletions(-) delete mode 100644 client/src/configuration/CheckListItem.js delete mode 100644 client/src/configuration/ConfigEnvDocumentation.js create mode 100644 client/src/configuration/ConfigurationDrawer.js delete mode 100644 client/src/configuration/ConfigurationView.js diff --git a/client/src/App.js b/client/src/App.js index d313ed5f9..daf6ca9e8 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -7,7 +7,6 @@ import { Switch } from 'react-router-dom'; import Authenticated from './Authenticated'; -import ConfigurationView from './configuration/ConfigurationView'; import ConnectionsStore from './connections/ConnectionsStore'; import AppContext from './containers/AppContext'; import ForgotPassword from './ForgotPassword.js'; @@ -70,15 +69,6 @@ function App() { )} /> - ( - - - - )} - /> ( - {currentUser.role === 'admin' && ( + {currentUser.role === 'admin' && [ setConnectionsVisible(true)} + onClick={() => setShowConnections(true)} > DB connections - - )} - {currentUser.role === 'admin' && ( + , { @@ -85,19 +85,15 @@ function AppNav({ children, pageMenuItems }) { > Users - - )} - {currentUser.role === 'admin' && ( + , { - history.push('/config-values'); - }} + onClick={() => setShowConfig(true)} > Configuration - )} + ]} {version && version.updateAvailable && ( {children} setConnectionsVisible(false)} + visible={showConnections} + onClose={() => setShowConnections(false)} + /> + setShowConfig(false)} /> ); diff --git a/client/src/configuration/CheckListItem.js b/client/src/configuration/CheckListItem.js deleted file mode 100644 index 5c03f0ebc..000000000 --- a/client/src/configuration/CheckListItem.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import Icon from 'antd/lib/icon'; - -const CheckListItem = props => { - if (!props.configKey || !props.configItems || !props.configItems.length) { - return null; - } - const configItem = props.configItems.find(item => { - return item.key === props.configKey; - }); - if (!configItem) { - return ( -
  • - {props.configKey} is not in configItems. -
  • - ); - } - return ( -
  • - {' '} - {configItem.label || configItem.envVar} -
  • - ); -}; - -export default CheckListItem; diff --git a/client/src/configuration/ConfigEnvDocumentation.js b/client/src/configuration/ConfigEnvDocumentation.js deleted file mode 100644 index 378f06dfd..000000000 --- a/client/src/configuration/ConfigEnvDocumentation.js +++ /dev/null @@ -1,49 +0,0 @@ -import Table from 'antd/lib/table'; -import React from 'react'; - -const { Column } = Table; - -function ConfigEnvDocumentation({ configItems }) { - const renderValue = (text, record) => { - return record.value === '' ? '' : record.effectiveValue.toString(); - }; - - const renderInfo = (text, record) => { - return ( -
    -

    {record.description}

    -
    - ); - }; - - const renderCli = (text, record) => { - const cliFlag = - record.cliFlag && record.cliFlag.pop - ? record.cliFlag.pop() - : record.cliFlag; - if (cliFlag) { - return '--' + cliFlag; - } - }; - - const filteredConfigItems = configItems.filter( - config => config.interface === 'env' - ); - - return ( - - - - - - -
    - ); -} - -export default ConfigEnvDocumentation; diff --git a/client/src/configuration/ConfigItemInput.js b/client/src/configuration/ConfigItemInput.js index a575cf48d..674388635 100644 --- a/client/src/configuration/ConfigItemInput.js +++ b/client/src/configuration/ConfigItemInput.js @@ -1,20 +1,30 @@ import Input from 'antd/lib/input'; import Select from 'antd/lib/select'; -import React, { useState } from 'react'; +import Form from 'antd/lib/form'; +import Popover from 'antd/lib/popover'; +import Switch from 'antd/lib/switch'; +import React from 'react'; const { Option } = Select; -function ConfigItemInput({ config, saveConfigValue }) { - const [value, setValue] = useState(config.effectiveValue); +function configIsBoolean(config) { + const { options } = config; + return ( + typeof config.effectiveValue === 'boolean' && + options && + options.length === 2 && + options.includes(true) && + options.includes(false) + ); +} +function ConfigItemInput({ config, onChange }) { const handleChange = e => { - setValue(e.target.value); - saveConfigValue(config.key, e.target.value); + onChange(config.key, e.target.value); }; const handleSelectChange = value => { - setValue(value); - saveConfigValue(config.key, value); + onChange(config.key, value); }; const disabled = @@ -22,7 +32,49 @@ function ConfigItemInput({ config, saveConfigValue }) { config.effectiveValueSource === 'saved cli' || config.effectiveValueSource === 'env'; - if (config.options) { + const effectiveValueSourceLabels = { + cli: 'Command Line', + 'saved cli': 'Saved Command Line', + env: 'Environment Varialbe' + }; + const overriddenBy = effectiveValueSourceLabels[config.effectiveValueSource]; + + const defaultValue = + config.default === '' ? ( + empty + ) : ( + {config.default.toString()} + ); + + const popoverContent = ( +
    +

    {config.description}

    +

    + Default: {defaultValue} +

    + {disabled && ( + <> +

    + Set By: {overriddenBy} +

    +

    + When set by command line or environment, item is not configurable + via UI. +

    + + )} +
    + ); + + let input; + if (configIsBoolean(config)) { + input = ( + onChange(config.key, value)} + /> + ); + } else if (config.options) { const optionNodes = config.options.map(option => { return ( ); }); - return ( + input = ( ); } else { - return ( + input = ( ); } + + return ( + + + {input} + + + ); } export default ConfigItemInput; diff --git a/client/src/configuration/ConfigurationDrawer.js b/client/src/configuration/ConfigurationDrawer.js new file mode 100644 index 000000000..eed441c2c --- /dev/null +++ b/client/src/configuration/ConfigurationDrawer.js @@ -0,0 +1,110 @@ +import message from 'antd/lib/message'; +import Form from 'antd/lib/form'; +import Button from 'antd/lib/button'; +import Drawer from 'antd/lib/drawer'; +import React, { useState, useEffect, useContext } from 'react'; +import fetchJson from '../utilities/fetch-json.js'; +import ConfigItemInput from './ConfigItemInput'; +import AppContext from '../containers/AppContext'; + +const formItemLayout = { + labelCol: { + sm: { span: 12 } + }, + wrapperCol: { + sm: { span: 10 } + } +}; + +const tailFormItemLayout = { + wrapperCol: { + sm: { + span: 10, + offset: 12 + } + } +}; + +function ConfigurationDrawer({ onClose, visible }) { + const [configItems, setConfigItems] = useState([]); + const appContext = useContext(AppContext); + + const loadConfigValuesFromServer = async () => { + const json = await fetchJson('GET', '/api/config-items'); + if (json.error) { + message.error(json.error); + } + setConfigItems(json.configItems); + }; + + useEffect(() => { + if (visible === true) { + loadConfigValuesFromServer(); + } + }, [visible]); + + async function saveConfigValues() { + const changedSaves = configItems + .filter(item => item.changed) + .map(item => { + return fetchJson('POST', `/api/config-values/${item.key}`, { + value: item.effectiveValue + }); + }); + + const responses = await Promise.all(changedSaves); + const errorResponse = responses.find(r => r.error); + if (errorResponse) { + message.error('Save failed'); + } else { + await appContext.refreshAppContext(); + onClose(); + } + } + + const handleChange = (key, value) => { + const items = configItems.map(item => { + if (item.key === key) { + return { ...item, effectiveValue: value, changed: true }; + } + return item; + }); + setConfigItems(items); + }; + + const hasChanges = configItems.filter(config => config.changed); + const saveDisabled = hasChanges.length === 0; + + return ( + +
    + + + + {configItems.map(config => ( + + ))} + +
    + ); +} + +export default React.memo(ConfigurationDrawer); diff --git a/client/src/configuration/ConfigurationView.js b/client/src/configuration/ConfigurationView.js deleted file mode 100644 index df8b2d7e1..000000000 --- a/client/src/configuration/ConfigurationView.js +++ /dev/null @@ -1,213 +0,0 @@ -import Col from 'antd/lib/col'; -import Layout from 'antd/lib/layout'; -import message from 'antd/lib/message'; -import Row from 'antd/lib/row'; -import debounce from 'lodash.debounce'; -import React, { useState, useEffect, useContext } from 'react'; -import AppNav from '../AppNav'; -import Header from '../common/Header'; -import fetchJson from '../utilities/fetch-json.js'; -import CheckListItem from './CheckListItem'; -import ConfigEnvDocumentation from './ConfigEnvDocumentation'; -import ConfigItemInput from './ConfigItemInput'; -import AppContext from '../containers/AppContext'; - -const { Content } = Layout; - -function ConfigurationView() { - const [configItems, setConfigItems] = useState([]); - const appContext = useContext(AppContext); - - const loadConfigValuesFromServer = async () => { - const json = await fetchJson('GET', '/api/config-items'); - if (json.error) { - message.error(json.error); - } - setConfigItems(json.configItems); - }; - - const saveConfigValue = debounce(async (key, value) => { - const json = await fetchJson('POST', '/api/config-values/' + key, { - value: value - }); - if (json.error) { - message.error('Save failed'); - } else { - message.success('Value saved'); - loadConfigValuesFromServer(); - appContext.refreshAppContext(); - } - }, 500); - - useEffect(() => { - document.title = 'SQLPad - Configuration'; - loadConfigValuesFromServer(); - }, []); - - const renderInfo = config => { - const disabled = - config.effectiveValueSource === 'cli' || - config.effectiveValueSource === 'saved cli' || - config.effectiveValueSource === 'env'; - - const effectiveValueSourceLabels = { - cli: 'Command Line', - 'saved cli': 'Saved Command Line', - env: 'Environment Varialbe' - }; - const overriddenBy = - effectiveValueSourceLabels[config.effectiveValueSource]; - - const defaultValue = - config.default === '' ? ( - empty - ) : ( - {config.default.toString()} - ); - - const cliFlag = - config.cliFlag && config.cliFlag.pop - ? config.cliFlag.pop() - : config.cliFlag; - - return ( -
    -

    {config.description}

    -

    - Default: {defaultValue} -

    - {cliFlag && ( -

    - CLI Flag: --{cliFlag} -

    - )} - {config.envVar && ( -

    - Environment Variable: {config.envVar} -

    - )} - {disabled && ( -
    -

    - Set By: {overriddenBy} -

    -

    - When set by command line or environment, item is not configurable - via UI. -

    -
    - )} -
    - ); - }; - - const renderConfigInputs = () => { - const uiConfigItems = configItems.filter( - config => config.interface === 'ui' - ); - return ( -
    - {uiConfigItems.map(config => { - return ( - - -
    - - -
    - - -
    {renderInfo(config)}
    - -
    - ); - })} -
    - ); - }; - - return ( - - -
    - - - {renderConfigInputs()} - -
    -

    - Feature Checklist -

    -

    Unlock features by providing the required configuration.

    -
    - Email -
      - - - - - -
    - Google OAuth -
      - - - -
    -
    - -
    - - -
    -

    - Some configuration is only accessible via environment variables - or command-line-interface (CLI) flags. Below are the current - values for these variables. Sensitive values are masked. Hover - over input for additional information. -

    -
    - -
    - - - - - -
    - - - ); -} - -export default ConfigurationView; diff --git a/server/routes/config-items.js b/server/routes/config-items.js index ec3d98e5d..e2dc5af10 100644 --- a/server/routes/config-items.js +++ b/server/routes/config-items.js @@ -3,8 +3,9 @@ const mustBeAdmin = require('../middleware/must-be-admin.js'); router.get('/api/config-items', mustBeAdmin, function(req, res) { const { config } = req; + const configItems = config.getConfigItems() || []; return res.json({ - configItems: config.getConfigItems() + configItems: configItems.filter(config => config.interface === 'ui') }); }); From 88bad7365c0578244fff8295ce3835a74872fa80 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 31 Mar 2019 01:45:26 -0400 Subject: [PATCH 023/855] Convert user page/table to drawer and dialog form (#422) * Swap user page out for user drawer with a list * More user cleanup * Add some spacing between components --- client/src/App.js | 10 -- client/src/AppNav.js | 20 ++- client/src/users/EditUserForm.js | 94 +++++++++++++ client/src/users/InviteUserForm.js | 21 ++- client/src/users/UserDrawer.js | 148 +++++++++++++++++++++ client/src/users/UsersView.js | 206 ----------------------------- 6 files changed, 260 insertions(+), 239 deletions(-) create mode 100644 client/src/users/EditUserForm.js create mode 100644 client/src/users/UserDrawer.js delete mode 100644 client/src/users/UsersView.js diff --git a/client/src/App.js b/client/src/App.js index daf6ca9e8..a8e2c38dd 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -19,7 +19,6 @@ import QueryEditorContainer from './queryEditor/QueryEditorContainer.js'; import QueryTableOnly from './QueryTableOnly.js'; import SignIn from './SignIn.js'; import SignUp from './SignUp.js'; -import UsersView from './users/UsersView'; // Configure message notification globally message.config({ @@ -60,15 +59,6 @@ function App() { )} /> - ( - - - - )} - /> setShowConfig(false), []); + const handleUsersClose = useCallback(() => setShowUsers(false), []); + if (redirect) { return ; } @@ -77,12 +82,7 @@ function AppNav({ children, pageMenuItems }) { DB connections , - { - history.push('/users'); - }} - > + setShowUsers(true)}> Users , @@ -155,10 +155,8 @@ function AppNav({ children, pageMenuItems }) { visible={showConnections} onClose={() => setShowConnections(false)} /> - setShowConfig(false)} - /> + + ); } diff --git a/client/src/users/EditUserForm.js b/client/src/users/EditUserForm.js new file mode 100644 index 000000000..7f561d25c --- /dev/null +++ b/client/src/users/EditUserForm.js @@ -0,0 +1,94 @@ +import Button from 'antd/lib/button'; +import Form from 'antd/lib/form'; +import message from 'antd/lib/message'; +import Select from 'antd/lib/select'; +import Row from 'antd/lib/row'; +import Col from 'antd/lib/col'; +import React, { useState } from 'react'; +import fetchJson from '../utilities/fetch-json.js'; +import { Link } from 'react-router-dom'; +import uuid from 'uuid'; + +const FormItem = Form.Item; +const { Option } = Select; + +function EditUserForm({ user }) { + const [role, setRole] = useState(user.role); + const [passwordResetId, setPasswordResetId] = useState(user.passwordResetId); + + const handleRoleChange = async role => { + setRole(role); + const json = await fetchJson('PUT', '/api/users/' + user._id, { + role + }); + if (json.error) { + return message.error('Update failed: ' + json.error.toString()); + } + }; + + const generatePasswordResetLink = async () => { + const passwordResetId = uuid.v4(); + const json = await fetchJson('PUT', '/api/users/' + user._id, { + passwordResetId + }); + if (json.error) { + return message.error('Update failed: ' + json.error.toString()); + } + setPasswordResetId(passwordResetId); + }; + + const removePasswordResetLink = async () => { + const json = await fetchJson('PUT', '/api/users/' + user._id, { + passwordResetId: '' + }); + if (json.error) { + return message.error('Remove reset failed: ' + json.error.toString()); + } + setPasswordResetId(null); + }; + + const renderReset = () => { + if (passwordResetId) { + return ( + + + + + + + Password reset link + + + + ); + } + return ( + + + + + + ); + }; + + return ( +
    + + + + {renderReset()} +
    + ); +} + +export default EditUserForm; diff --git a/client/src/users/InviteUserForm.js b/client/src/users/InviteUserForm.js index 189c6941c..cd8af5506 100644 --- a/client/src/users/InviteUserForm.js +++ b/client/src/users/InviteUserForm.js @@ -35,18 +35,12 @@ function InviteUserForm({ onInvited }) { return (

    - Users may only sign up if they have first been whitelisted. Once - whitelisted, invite them to continue the sign-up process on the{' '} + Users may only sign up if they have first been added. Once added, invite + them to continue the sign-up process on the{' '} signup page.

    -

    - Admins can add and edit database connections, as well - as whitelist/invite users to join. -

    -
    - - + setEmail(e.target.value)} /> - - + { - record.role = value; - return updateUserRole(record); - }} - > - - - - ); - }; - - const resetButtonRender = (text, record) => { - if (record.passwordResetId) { - return ( - - - - Reset Link - - - ); - } - return ( - - ); - }; - - return ( - - -
    - -
    - -
    - - - - - - { - return ( - handleDelete(record)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > -
    -
    - setShowAddUser(false)} - > - - -
    -
    -
    - ); -} - -export default UsersView; From 00bb752f2e601dc7e867223203be8d0438d2a2ef Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 31 Mar 2019 01:51:42 -0400 Subject: [PATCH 024/855] Update UI dependencies taucharts and d3 to be updated separately --- client/package-lock.json | 176 ++++++++++++++++++++------------------- client/package.json | 12 +-- 2 files changed, 98 insertions(+), 90 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 2585b657e..cb92fb203 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1009,9 +1009,9 @@ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" }, "@types/react": { - "version": "16.8.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.7.tgz", - "integrity": "sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA==", + "version": "16.8.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.10.tgz", + "integrity": "sha512-7bUQeZKP4XZH/aB4i7k1i5yuwymDu/hnLMhD9NjVZvQQH7ZUgRN3d6iu8YXzx4sN/tNr0bj8jgguk8hhObzGvA==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -1347,9 +1347,9 @@ } }, "antd": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/antd/-/antd-3.15.0.tgz", - "integrity": "sha512-gSoVmQN7rfYmhfpv0dL2sL9gk0Pu9JHgGiExjLJZaSnbPjpCOTAYjIzxG/oo8GzCSeK5abgN5F1saWR5ggLVFQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/antd/-/antd-3.15.2.tgz", + "integrity": "sha512-yKN6v5j3znt/JFUJ8LFny179medv1ZlyKmQdtVvbOKuQN/VEnIo79fKVzmduacU+QMS/SJDuJ+oXD9zIuodPQQ==", "requires": { "@ant-design/icons": "~1.2.0", "@ant-design/icons-react": "~1.1.2", @@ -7415,25 +7415,16 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", + "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", "requires": { - "invariant": "^2.2.1", + "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^0.4.0" } }, "hmac-drbg": { @@ -8252,11 +8243,6 @@ "is-extglob": "^1.0.0" } }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" - }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", @@ -13291,9 +13277,9 @@ } }, "rc-form": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.3.tgz", - "integrity": "sha512-59KeQat5TU4YzpfXYpFlyQ1/5uFXm0SV7VokRr+i8bPMhimpKpZl5gt0J7dNiKLTsGnkCqBLSL88d9ufPJ+EQQ==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.4.tgz", + "integrity": "sha512-AHR2GGYJOlKG5jP6ZjqS+PVBrUUXt+kDJFgJeDw17k6RDVIrG1535MxDPgNmRXp2VM4GQij4sVvjaHvwFsUgCA==", "requires": { "async-validator": "~1.8.5", "babel-runtime": "6.x", @@ -13333,22 +13319,21 @@ } }, "rc-input-number": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.4.0.tgz", - "integrity": "sha512-AsXLVaQZ7rCU71B8zzP3nviL8/CkFGDcp5kIlpMzBdGIHoLyRnXcxei3itH9PfFSgMBixEnb5hFVoTikFbNWSQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.4.1.tgz", + "integrity": "sha512-vgMjTNzBwgK6JkGVXfoHtYziTn4aFarYaHCYEwlJpDkLDvBxwcSlfXZ4ZGqS4MpouDKO0B1W1oPiXcJbJWG3zg==", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.0", - "is-negative-zero": "^2.0.0", "prop-types": "^15.5.7", "rc-util": "^4.5.1", "rmc-feedback": "^2.0.0" } }, "rc-menu": { - "version": "7.4.21", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.4.21.tgz", - "integrity": "sha512-TfcwybKLuw2WhEkplYH7iFMGlDbH6KhPcd+gv5J2oLQcgiGeUECzyOWSVaFRRlkpB7g2eNzXbha/AXN/Xyzvnw==", + "version": "7.4.22", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.4.22.tgz", + "integrity": "sha512-6o/5H7y60O7Q9Yvp3YaqxPQA65zfh0goiWV98Xh2R95qYg2QRGP7aiMdYG0sjVpZR67oTneMMIoyfMudj9iQmA==", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -13376,9 +13361,9 @@ } }, "rc-pagination": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-1.17.8.tgz", - "integrity": "sha512-duEV+K/b/nZNGr943+TMCEcY4xWkjAkpKW0Vr7fSR8wQk0DY7aTJC+k+vjl4X2EzEmPXqy85hibzpsO9vydKAw==", + "version": "1.17.13", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-1.17.13.tgz", + "integrity": "sha512-xjwVo28x6H34zyS74akn5s+uicUoPI5GRFmqKMhEAlQIRsOnfZL3ReNmcyN3/JZbyo7d6MtFHsXBeNeLFmCVhw==", "requires": { "babel-runtime": "6.x", "prop-types": "^15.5.7", @@ -13425,9 +13410,9 @@ } }, "rc-slider": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.6.tgz", - "integrity": "sha512-byfnq1LbBFyZ0HURWo22sjeiKIxLyzSnIiNUsUf6SWu1ZhQe/Qt24JnE/ZJsqKoUirXxlX+d577ptfAybZHm+Q==", + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.7.tgz", + "integrity": "sha512-QIFWMnK1VLc4TtJSZJgjhI6UOhN8eg53EM2La+eRa8rSPZwJT3rIWfZnTZs7OV7zXG/AiLWN4G+oGxuMcEFpsg==", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.5", @@ -13497,9 +13482,9 @@ } }, "rc-tabs": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.6.1.tgz", - "integrity": "sha512-3/Ip9yCEERFFvCjU0ZoQqvn6unMo0XOQESygNLq1DyOAYRcukpq8Q28awpXWqh8l8NBcyw1sVfrs6SZN/zmAKg==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.6.3.tgz", + "integrity": "sha512-f4GotOvzfzY4fqj/Y9Npt3pxyyHceyj06yss2uhNlAb+PW25tn22LxgGhhFVn2RyUXrt5WT26HPgtHx9R9sN3Q==", "requires": { "babel-runtime": "6.x", "classnames": "2.x", @@ -13509,6 +13494,7 @@ "raf": "^3.4.1", "rc-hammerjs": "~0.6.0", "rc-util": "^4.0.4", + "resize-observer-polyfill": "^1.5.1", "warning": "^3.0.0" }, "dependencies": { @@ -13583,9 +13569,9 @@ } }, "rc-tree-select": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.6.0.tgz", - "integrity": "sha512-9svioSjzqqGeIK9XTuM5yNe0WteSro2Hc8/Go+CTGth6P/mflVC7vC0jTJlFVpFz+Aw1LzXcJFsbAyRwUiSaag==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.6.1.tgz", + "integrity": "sha512-ZNGZMKIIwikgqvpbC8YJlv33OeGWlHiVbr42IXYTmVORoO3QpJuZPW95sF/Yhpjk86DgjuuM3HreoLPAOZCVQQ==", "requires": { "classnames": "^2.2.1", "dom-scroll-into-view": "^1.2.1", @@ -13701,14 +13687,14 @@ } }, "react": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.4.tgz", - "integrity": "sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", + "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.4" + "scheduler": "^0.13.6" } }, "react-ace": { @@ -13880,14 +13866,14 @@ } }, "react-dom": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.4.tgz", - "integrity": "sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", + "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.4" + "scheduler": "^0.13.6" } }, "react-draggable": { @@ -13952,30 +13938,44 @@ } }, "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.0.tgz", + "integrity": "sha512-6EQDakGdLG/it2x9EaCt9ZpEEPxnd0OCLBHQ1AcITAAx7nCnyvnzf76jKWG1s2/oJ7SSviUgfWHofdYljFexsA==", "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", + "@babel/runtime": "^7.1.2", + "create-react-context": "^0.2.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + } } }, "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.0.tgz", + "integrity": "sha512-wSpja5g9kh5dIteZT3tUoggjnsa+TPFHSMrpHXMpFsaHhQkm/JNVGh2jiF9Dkh4+duj4MKCkwO6H08u6inZYgQ==", "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" + "prop-types": "^15.6.2", + "react-router": "5.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" } }, "react-scripts": { @@ -14056,13 +14056,11 @@ } }, "react-split-pane": { - "version": "0.1.85", - "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.85.tgz", - "integrity": "sha512-3GhaYs6+eVNrewgN4eQKJoNMQ4pcegNMTMhR5bO/NFO91K6/98qdD1sCuWPpsefCjzxNTjkvVYWQC0bMaC45mA==", + "version": "0.1.87", + "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.87.tgz", + "integrity": "sha512-F22jqWyKB1WximT0U5HKdSuB9tmJGjjP+WUyveHxJJys3ANsljj163kCdsI6M3gdfyCVC+B2rq8sc5m2Ko02RA==", "requires": { "prop-types": "^15.5.10", - "react": "^16.6.3", - "react-dom": "^16.6.3", "react-lifecycles-compat": "^3.0.4", "react-style-proptype": "^3.0.0" } @@ -15164,9 +15162,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", - "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -16259,6 +16257,16 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-invariant": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", + "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==" + }, + "tiny-warning": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", + "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" + }, "tinycolor2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", @@ -17439,9 +17447,9 @@ } }, "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "whatwg-mimetype": { "version": "2.3.0", diff --git a/client/package.json b/client/package.json index afdca1549..adc59ab75 100644 --- a/client/package.json +++ b/client/package.json @@ -4,7 +4,7 @@ "private": true, "proxy": "http://localhost:3010", "dependencies": { - "antd": "^3.15.0", + "antd": "^3.15.2", "brace": "^0.11.1", "d3": "^3.5.17", "keymaster": "^1.6.2", @@ -12,20 +12,20 @@ "lodash.sortby": "^4.7.0", "lodash.uniq": "^4.5.0", "prop-types": "^15.7.2", - "react": "^16.8.4", + "react": "^16.8.6", "react-ace": "^6.4.0", "react-copy-to-clipboard": "^5.0.0", - "react-dom": "^16.8.4", + "react-dom": "^16.8.6", "react-draggable": "^3.2.1", "react-measure": "^2.2.4", - "react-router-dom": "^4.2.2", + "react-router-dom": "^5.0.0", "react-scripts": "^2.1.8", - "react-split-pane": "^0.1.84", + "react-split-pane": "^0.1.87", "react-virtualized": "^9.21.0", "sql-formatter": "^2.3.2", "tachyons": "^4.11.1", "taucharts": "^1.2.1", - "whatwg-fetch": "^2.0.4" + "whatwg-fetch": "^3.0.0" }, "scripts": { "build": "react-scripts build", From 95aab405e0a56693270e9d86c2f8bbf9f8e34504 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 31 Mar 2019 14:42:52 -0400 Subject: [PATCH 025/855] Store cleanup (#423) * Move "store" components to index * Move message config to index * Rename App to Routes * Remove unused store * Move AppContextStore to stores dir * Move ConnectionsStore to stores dir --- client/src/App.js | 103 ------------------ client/src/AppNav.js | 2 +- client/src/Authenticated.js | 2 +- client/src/NotFound.js | 2 +- client/src/Routes.js | 92 ++++++++++++++++ client/src/SignIn.js | 2 +- client/src/SignUp.js | 2 +- client/src/common/ExportButton.js | 2 +- client/src/common/SqlEditor.js | 2 +- .../src/configuration/ConfigurationDrawer.js | 2 +- .../src/connections/ConnectionListDrawer.js | 4 +- client/src/containers/AppContext.js | 5 - client/src/index.js | 25 +++-- client/src/queryEditor/ConnectionDropdown.js | 2 +- .../src/queryEditor/QueryEditorContainer.js | 4 +- client/src/queryEditor/SchemaSidebar.js | 2 +- .../AppContextStore.js} | 7 +- .../ConnectionsStore.js | 9 -- client/src/users/UserDrawer.js | 2 +- 19 files changed, 129 insertions(+), 142 deletions(-) delete mode 100644 client/src/App.js create mode 100644 client/src/Routes.js delete mode 100644 client/src/containers/AppContext.js rename client/src/{containers/AppContextProvider.js => stores/AppContextStore.js} (89%) rename client/src/{connections => stores}/ConnectionsStore.js (93%) diff --git a/client/src/App.js b/client/src/App.js deleted file mode 100644 index a8e2c38dd..000000000 --- a/client/src/App.js +++ /dev/null @@ -1,103 +0,0 @@ -import message from 'antd/lib/message'; -import React, { useContext } from 'react'; -import { - BrowserRouter as Router, - Redirect, - Route, - Switch -} from 'react-router-dom'; -import Authenticated from './Authenticated'; -import ConnectionsStore from './connections/ConnectionsStore'; -import AppContext from './containers/AppContext'; -import ForgotPassword from './ForgotPassword.js'; -import NotFound from './NotFound.js'; -import PasswordReset from './PasswordReset.js'; -import PasswordResetRequested from './PasswordResetRequested.js'; -import QueriesView from './queries/QueriesView'; -import QueryChartOnly from './QueryChartOnly.js'; -import QueryEditorContainer from './queryEditor/QueryEditorContainer.js'; -import QueryTableOnly from './QueryTableOnly.js'; -import SignIn from './SignIn.js'; -import SignUp from './SignUp.js'; - -// Configure message notification globally -message.config({ - top: 60, - duration: 2, - maxCount: 3 -}); - -function App() { - const appContext = useContext(AppContext); - const { config } = appContext; - - if (!config) { - return null; - } - - return ( - - -
    - - } /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - )} - /> - ( - - )} - /> - } /> - } /> - } - /> - ( - - )} - /> - } - /> - } /> - -
    -
    -
    - ); -} - -export default App; diff --git a/client/src/AppNav.js b/client/src/AppNav.js index e9d852224..720494cc2 100644 --- a/client/src/AppNav.js +++ b/client/src/AppNav.js @@ -6,7 +6,7 @@ import Modal from 'antd/lib/modal'; import React, { useContext, useState, useCallback } from 'react'; import { Redirect, Route } from 'react-router-dom'; import AboutContent from './AboutContent'; -import AppContext from './containers/AppContext'; +import { AppContext } from './stores/AppContextStore'; import fetchJson from './utilities/fetch-json.js'; import ConnectionListDrawer from './connections/ConnectionListDrawer'; import ConfigurationDrawer from './configuration/ConfigurationDrawer'; diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index 2459dc5c6..767e74288 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, { useContext, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; -import AppContext from './containers/AppContext'; +import { AppContext } from './stores/AppContextStore'; function Authenticated({ admin, children }) { const appContext = useContext(AppContext); diff --git a/client/src/NotFound.js b/client/src/NotFound.js index e75ffc09d..94bd3629d 100644 --- a/client/src/NotFound.js +++ b/client/src/NotFound.js @@ -1,7 +1,7 @@ import React, { useContext, useEffect } from 'react'; import AppNav from './AppNav.js'; import FullscreenMessage from './common/FullscreenMessage.js'; -import AppContext from './containers/AppContext'; +import { AppContext } from './stores/AppContextStore'; export default function NotFound() { const appContext = useContext(AppContext); diff --git a/client/src/Routes.js b/client/src/Routes.js new file mode 100644 index 000000000..17e2571ef --- /dev/null +++ b/client/src/Routes.js @@ -0,0 +1,92 @@ +import React, { useContext } from 'react'; +import { + BrowserRouter as Router, + Redirect, + Route, + Switch +} from 'react-router-dom'; +import Authenticated from './Authenticated'; +import { AppContext } from './stores/AppContextStore'; +import ForgotPassword from './ForgotPassword.js'; +import NotFound from './NotFound.js'; +import PasswordReset from './PasswordReset.js'; +import PasswordResetRequested from './PasswordResetRequested.js'; +import QueriesView from './queries/QueriesView'; +import QueryChartOnly from './QueryChartOnly.js'; +import QueryEditorContainer from './queryEditor/QueryEditorContainer.js'; +import QueryTableOnly from './QueryTableOnly.js'; +import SignIn from './SignIn.js'; +import SignUp from './SignUp.js'; + +function Routes() { + const appContext = useContext(AppContext); + const { config } = appContext; + + if (!config) { + return null; + } + + return ( + +
    + + } /> + ( + + + + )} + /> + ( + + + + )} + /> + ( + + )} + /> + ( + + )} + /> + } /> + } /> + } + /> + ( + + )} + /> + } + /> + } /> + +
    +
    + ); +} + +export default Routes; diff --git a/client/src/SignIn.js b/client/src/SignIn.js index 0b178493b..6350e62a3 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -4,7 +4,7 @@ import Input from 'antd/lib/input'; import message from 'antd/lib/message'; import React, { useState, useContext, useEffect } from 'react'; import { Link, Redirect } from 'react-router-dom'; -import AppContext from './containers/AppContext'; +import { AppContext } from './stores/AppContextStore'; import fetchJson from './utilities/fetch-json.js'; function SignIn(props) { diff --git a/client/src/SignUp.js b/client/src/SignUp.js index eb2d14bc5..5b13e559f 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -3,7 +3,7 @@ import Input from 'antd/lib/input'; import message from 'antd/lib/message'; import React, { useContext, useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; -import AppContext from './containers/AppContext'; +import { AppContext } from './stores/AppContextStore'; import fetchJson from './utilities/fetch-json.js'; function SignUp() { diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index 982ec4906..65f00446f 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -4,7 +4,7 @@ import Icon from 'antd/lib/icon'; import Menu from 'antd/lib/menu'; import PropTypes from 'prop-types'; import React, { useContext } from 'react'; -import AppContext from '../containers/AppContext'; +import { AppContext } from '../stores/AppContextStore'; function ExportButton({ cacheKey, onSaveImageClick }) { const appContext = useContext(AppContext); diff --git a/client/src/common/SqlEditor.js b/client/src/common/SqlEditor.js index 20db5dc64..a01b80217 100644 --- a/client/src/common/SqlEditor.js +++ b/client/src/common/SqlEditor.js @@ -7,7 +7,7 @@ import PropTypes from 'prop-types'; import React, { useContext, useState, useEffect } from 'react'; import Measure from 'react-measure'; import AceEditor from 'react-ace'; -import AppContext from '../containers/AppContext'; +import { AppContext } from '../stores/AppContextStore'; const noop = () => {}; diff --git a/client/src/configuration/ConfigurationDrawer.js b/client/src/configuration/ConfigurationDrawer.js index eed441c2c..22a6211af 100644 --- a/client/src/configuration/ConfigurationDrawer.js +++ b/client/src/configuration/ConfigurationDrawer.js @@ -5,7 +5,7 @@ import Drawer from 'antd/lib/drawer'; import React, { useState, useEffect, useContext } from 'react'; import fetchJson from '../utilities/fetch-json.js'; import ConfigItemInput from './ConfigItemInput'; -import AppContext from '../containers/AppContext'; +import { AppContext } from '../stores/AppContextStore'; const formItemLayout = { labelCol: { diff --git a/client/src/connections/ConnectionListDrawer.js b/client/src/connections/ConnectionListDrawer.js index ac3df2a7d..710cb7c5c 100644 --- a/client/src/connections/ConnectionListDrawer.js +++ b/client/src/connections/ConnectionListDrawer.js @@ -5,8 +5,8 @@ import List from 'antd/lib/list'; import Popconfirm from 'antd/lib/popconfirm'; import React, { useState, useContext, useEffect } from 'react'; import ConnectionEditDrawer from './ConnectionEditDrawer'; -import { ConnectionsContext } from './ConnectionsStore'; -import AppContext from '../containers/AppContext'; +import { ConnectionsContext } from '../stores/ConnectionsStore'; +import { AppContext } from '../stores/AppContextStore'; function ConnectionListDrawer({ visible, onClose }) { const [connectionId, setConnectionId] = useState(null); diff --git a/client/src/containers/AppContext.js b/client/src/containers/AppContext.js deleted file mode 100644 index 98a5de1a7..000000000 --- a/client/src/containers/AppContext.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; - -const AppContext = React.createContext({ refreshAppContext: () => {} }); - -export default AppContext; diff --git a/client/src/index.js b/client/src/index.js index 0a507ccd7..f3fdb9bb3 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -1,16 +1,27 @@ import 'antd/dist/antd.css'; -import React from 'react'; -import ReactDOM from 'react-dom'; import 'tachyons/css/tachyons.min.css'; -import App from './App.js'; -import AppContextProvider from './containers/AppContextProvider'; import './css/index.css'; import './css/react-split-pane.css'; import './css/vendorOverrides.css'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import message from 'antd/lib/message'; +import Routes from './Routes'; +import AppContextStore from './stores/AppContextStore'; +import ConnectionsStore from './stores/ConnectionsStore'; + +// Configure message notification globally +message.config({ + top: 60, + duration: 2, + maxCount: 3 +}); ReactDOM.render( - - - , + + + + + , document.getElementById('root') ); diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index 802cc6272..16a80d0fa 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -1,7 +1,7 @@ import Select from 'antd/lib/select'; import Icon from 'antd/lib/icon'; import React, { useContext, useState } from 'react'; -import { ConnectionsContext } from '../connections/ConnectionsStore'; +import { ConnectionsContext } from '../stores/ConnectionsStore'; import ConnectionEditDrawer from '../connections/ConnectionEditDrawer'; const { Option } = Select; diff --git a/client/src/queryEditor/QueryEditorContainer.js b/client/src/queryEditor/QueryEditorContainer.js index de21dc344..e05aa7619 100644 --- a/client/src/queryEditor/QueryEditorContainer.js +++ b/client/src/queryEditor/QueryEditorContainer.js @@ -1,7 +1,7 @@ import React, { useContext } from 'react'; import AppNav from '../AppNav'; -import { ConnectionsContext } from '../connections/ConnectionsStore'; -import AppContext from '../containers/AppContext'; +import { ConnectionsContext } from '../stores/ConnectionsStore'; +import { AppContext } from '../stores/AppContextStore'; import QueryEditor from './QueryEditor'; function QueryEditorContainer(props) { diff --git a/client/src/queryEditor/SchemaSidebar.js b/client/src/queryEditor/SchemaSidebar.js index f23e27d60..39b4bc539 100644 --- a/client/src/queryEditor/SchemaSidebar.js +++ b/client/src/queryEditor/SchemaSidebar.js @@ -4,7 +4,7 @@ import React from 'react'; import CopyToClipboard from 'react-copy-to-clipboard'; import Sidebar from '../common/Sidebar'; import SidebarBody from '../common/SidebarBody'; -import { ConnectionsContext } from '../connections/ConnectionsStore'; +import { ConnectionsContext } from '../stores/ConnectionsStore'; import fetchJson from '../utilities/fetch-json.js'; import updateCompletions from '../utilities/updateCompletions.js'; diff --git a/client/src/containers/AppContextProvider.js b/client/src/stores/AppContextStore.js similarity index 89% rename from client/src/containers/AppContextProvider.js rename to client/src/stores/AppContextStore.js index 2bc635266..3fafdc455 100644 --- a/client/src/containers/AppContextProvider.js +++ b/client/src/stores/AppContextStore.js @@ -1,8 +1,9 @@ import React, { useState, useEffect } from 'react'; import fetchJson from '../utilities/fetch-json.js'; -import AppContext from './AppContext'; -function AppContextProvider({ children }) { +export const AppContext = React.createContext({}); + +export function AppContextStore({ children }) { const [state, setState] = useState({}); const refreshAppContext = async () => { @@ -40,4 +41,4 @@ function AppContextProvider({ children }) { ); } -export default AppContextProvider; +export default AppContextStore; diff --git a/client/src/connections/ConnectionsStore.js b/client/src/stores/ConnectionsStore.js similarity index 93% rename from client/src/connections/ConnectionsStore.js rename to client/src/stores/ConnectionsStore.js index 769ee53fe..e20e70423 100644 --- a/client/src/connections/ConnectionsStore.js +++ b/client/src/stores/ConnectionsStore.js @@ -9,15 +9,6 @@ const sortFunctions = [connection => connection.name.toLowerCase()]; export const ConnectionsContext = React.createContext({}); -export function ContextStateStore({ children }) { - const state = useState({}); - return ( - - {children} - - ); -} - export function ConnectionsStore({ children }) { const [selectedConnectionId, setSelectedConnectionId] = useState(null); const [connections, setConnections] = useState([]); diff --git a/client/src/users/UserDrawer.js b/client/src/users/UserDrawer.js index 1d93e1a7a..1ff1c6761 100644 --- a/client/src/users/UserDrawer.js +++ b/client/src/users/UserDrawer.js @@ -7,7 +7,7 @@ import Popconfirm from 'antd/lib/popconfirm'; import Drawer from 'antd/lib/drawer'; import List from 'antd/lib/list'; import React, { useEffect, useContext, useState } from 'react'; -import AppContext from '../containers/AppContext'; +import { AppContext } from '../stores/AppContextStore'; import fetchJson from '../utilities/fetch-json.js'; import InviteUserForm from './InviteUserForm'; import EditUserForm from './EditUserForm'; From 8db73bd9fda141f66cf97038d772caf4a559854c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 31 Mar 2019 15:45:10 -0400 Subject: [PATCH 026/855] Update taucharts and d3 --- client/package-lock.json | 517 +- client/package.json | 4 +- .../vendor/tauCharts/tauCharts.min.css | 10177 +++++++++++++++- client/src/common/getTauChartConfig.js | 10 +- client/src/css/vendorOverrides.css | 2 +- 5 files changed, 10479 insertions(+), 231 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index cb92fb203..90f29afe1 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2586,17 +2586,6 @@ "repeat-element": "^1.1.2" } }, - "brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - } - }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -2722,11 +2711,6 @@ } } }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -4414,22 +4398,284 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" }, "d3": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", - "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=" + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.9.2.tgz", + "integrity": "sha512-ydrPot6Lm3nTWH+gJ/Cxf3FcwuvesYQ5uk+j/kXEH/xbuYWYWTMAHTJQkyeuG8Y5WM5RSEYB41EctUrXQQytRQ==", + "requires": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + }, + "dependencies": { + "d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + } + } }, - "d3-geo-projection": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz", - "integrity": "sha1-SZTs0QM92xUztsTFUoocgdzClCc=", + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" + }, + "d3-brush": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz", + "integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==", "requires": { - "brfs": "^1.3.0" + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" } }, - "d3-queue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-2.0.3.tgz", - "integrity": "sha1-B/vaOsrlNYqcUpmq+ICt8JU+0sI=" + "d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", + "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" + }, + "d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "requires": { + "d3-array": "^1.1.1" + } + }, + "d3-dispatch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", + "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==" + }, + "d3-drag": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", + "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.1.1.tgz", + "integrity": "sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==", + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz", + "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==" + }, + "d3-fetch": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz", + "integrity": "sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==", + "requires": { + "d3-dsv": "1" + } + }, + "d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", + "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" + }, + "d3-geo": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.3.tgz", + "integrity": "sha512-n30yN9qSKREvV2fxcrhmHUdXP9TNH7ZZj3C/qnaoU0cVf/Ea85+yT7HY7i8ySPwkwjCNYtmKqQFTvLFngfkItQ==", + "requires": { + "d3-array": "1" + } + }, + "d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==" + }, + "d3-interpolate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", + "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" + }, + "d3-polygon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.5.tgz", + "integrity": "sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w==" + }, + "d3-quadtree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.6.tgz", + "integrity": "sha512-NUgeo9G+ENQCQ1LsRr2qJg3MQ4DJvxcDNCiohdJGHt5gRhBW6orIB5m5FJ9kK3HNL8g9F4ERVoBzcEwQBfXWVA==" + }, + "d3-random": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" + }, + "d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-scale-chromatic": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", + "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-selection": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.0.tgz", + "integrity": "sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==" + }, + "d3-shape": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz", + "integrity": "sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz", + "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==" + }, + "d3-time-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", + "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", + "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==" + }, + "d3-transition": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz", + "integrity": "sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==", + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + }, + "d3-zoom": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.3.tgz", + "integrity": "sha512-xEBSwFx5Z9T3/VrwDkMt+mr0HCzv7XjpGURJ8lWmIC8wxe32L39eWHIasEe/e7Ox8MPU4p1hvH8PKN2olLzIBg==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } }, "damerau-levenshtein": { "version": "1.0.4", @@ -4884,14 +5130,6 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -5662,24 +5900,6 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "falafel": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz", - "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=", - "requires": { - "acorn": "^5.0.0", - "foreach": "^2.0.5", - "isarray": "0.0.1", - "object-keys": "^1.0.6" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -6231,11 +6451,6 @@ "for-in": "^1.0.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -9492,14 +9707,6 @@ "yallist": "^2.1.2" } }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "requires": { - "vlq": "^0.2.2" - } - }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -9606,14 +9813,6 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", - "requires": { - "source-map": "^0.5.6" - } - }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -10092,11 +10291,6 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" }, - "object-inspect": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" - }, "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", @@ -13055,16 +13249,6 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" }, - "quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", - "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - } - }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -15359,11 +15543,6 @@ } } }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" - }, "shallow-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.1.0.tgz", @@ -15374,41 +15553,6 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "shapefile": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/shapefile/-/shapefile-0.3.1.tgz", - "integrity": "sha1-m7mkKb1ghqDPsDli0Uz99CD/uhI=", - "requires": { - "d3-queue": "1", - "iconv-lite": "0.2", - "optimist": "0.3" - }, - "dependencies": { - "d3-queue": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-1.2.3.tgz", - "integrity": "sha1-FDpwHPpl/gISkvMhwQ0U6Yq9SRs=" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", - "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=" - }, - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", - "requires": { - "wordwrap": "~0.0.2" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -15788,14 +15932,6 @@ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" }, - "static-eval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz", - "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==", - "requires": { - "escodegen": "^1.8.1" - } - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -15815,52 +15951,6 @@ } } }, - "static-module": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", - "requires": { - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "falafel": "^2.1.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "quote-stream": "~1.0.2", - "readable-stream": "~2.3.3", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.0", - "through2": "~2.0.3" - }, - "dependencies": { - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -16147,12 +16237,24 @@ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==" }, "taucharts": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-1.2.2.tgz", - "integrity": "sha1-+PWcECKRD4/s6XDmBdJ+A2LhGaE=", - "requires": { - "d3": "^3.5.17", - "topojson": "1.6.24" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.1.tgz", + "integrity": "sha512-RQvAqFTQ8T5X0BH2u/xmZkiiK6ttyAugFiMWAHrQeZx7ddVOQmZMRg8crxNxjzKaqhi3tOhG6rfL360xprgjsw==", + "requires": { + "d3-array": "^1.2.1", + "d3-axis": "^1.0.12", + "d3-brush": "^1.0.6", + "d3-color": "^1.2.3", + "d3-format": "^1.3.2", + "d3-geo": "^1.11.3", + "d3-quadtree": "^1.0.6", + "d3-scale": "^1.0.6", + "d3-selection": "^1.4.0", + "d3-shape": "^1.3.4", + "d3-time": "^1.0.11", + "d3-time-format": "^2.1.3", + "d3-transition": "^1.2.0", + "topojson-client": "^3.0.0" } }, "terser": { @@ -16346,32 +16448,12 @@ "hoek": "4.x.x" } }, - "topojson": { - "version": "1.6.24", - "resolved": "https://registry.npmjs.org/topojson/-/topojson-1.6.24.tgz", - "integrity": "sha1-cTqWbkUKGDMn9fFXplVvuiuHsyA=", + "topojson-client": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.0.0.tgz", + "integrity": "sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8=", "requires": { - "d3": "3", - "d3-geo-projection": "0.2", - "d3-queue": "2", - "optimist": "0.3", - "rw": "1", - "shapefile": "0.3" - }, - "dependencies": { - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", - "requires": { - "wordwrap": "~0.0.2" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } + "commander": "2" } }, "tough-cookie": { @@ -16798,11 +16880,6 @@ "unist-util-stringify-position": "^1.1.1" } }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", diff --git a/client/package.json b/client/package.json index adc59ab75..bdd986c92 100644 --- a/client/package.json +++ b/client/package.json @@ -6,7 +6,7 @@ "dependencies": { "antd": "^3.15.2", "brace": "^0.11.1", - "d3": "^3.5.17", + "d3": "^5.9.2", "keymaster": "^1.6.2", "lodash.debounce": "^4.0.8", "lodash.sortby": "^4.7.0", @@ -24,7 +24,7 @@ "react-virtualized": "^9.21.0", "sql-formatter": "^2.3.2", "tachyons": "^4.11.1", - "taucharts": "^1.2.1", + "taucharts": "^2.7.1", "whatwg-fetch": "^3.0.0" }, "scripts": { diff --git a/client/public/javascripts/vendor/tauCharts/tauCharts.min.css b/client/public/javascripts/vendor/tauCharts/tauCharts.min.css index 104451380..142c7487f 100644 --- a/client/public/javascripts/vendor/tauCharts/tauCharts.min.css +++ b/client/public/javascripts/vendor/tauCharts/tauCharts.min.css @@ -1,3 +1,10174 @@ -/*! taucharts - v1.2.2 - 2017-06-01 -* https://github.com/TargetProcess/tauCharts -* Copyright (c) 2017 Taucraft Limited; Licensed Apache License 2.0 */.graphical-report__checkbox__input:not(:disabled):focus+.graphical-report__checkbox__icon,.graphical-report__select:focus{box-shadow:0 0 0 1px rgba(0,0,0,.3),0 0 7px 0 #52a8ec;outline:0}.YlGn.q0-3{fill:#f7fcb9;background:#f7fcb9;stroke:#f7fcb9}.YlGn.q1-3{fill:#addd8e;background:#addd8e;stroke:#addd8e}.YlGn.q2-3{fill:#31a354;background:#31a354;stroke:#31a354}.YlGn.q0-4{fill:#ffc;background:#ffc;stroke:#ffc}.YlGn.q1-4{fill:#c2e699;background:#c2e699;stroke:#c2e699}.YlGn.q2-4{fill:#78c679;background:#78c679;stroke:#78c679}.YlGn.q3-4{fill:#238443;background:#238443;stroke:#238443}.YlGn.q0-5{fill:#ffc;background:#ffc;stroke:#ffc}.YlGn.q1-5{fill:#c2e699;background:#c2e699;stroke:#c2e699}.YlGn.q2-5{fill:#78c679;background:#78c679;stroke:#78c679}.YlGn.q3-5{fill:#31a354;background:#31a354;stroke:#31a354}.YlGn.q4-5{fill:#006837;background:#006837;stroke:#006837}.YlGn.q0-6{fill:#ffc;background:#ffc;stroke:#ffc}.YlGn.q1-6{fill:#d9f0a3;background:#d9f0a3;stroke:#d9f0a3}.YlGn.q2-6{fill:#addd8e;background:#addd8e;stroke:#addd8e}.YlGn.q3-6{fill:#78c679;background:#78c679;stroke:#78c679}.YlGn.q4-6{fill:#31a354;background:#31a354;stroke:#31a354}.YlGn.q5-6{fill:#006837;background:#006837;stroke:#006837}.YlGn.q0-7{fill:#ffc;background:#ffc;stroke:#ffc}.YlGn.q1-7{fill:#d9f0a3;background:#d9f0a3;stroke:#d9f0a3}.YlGn.q2-7{fill:#addd8e;background:#addd8e;stroke:#addd8e}.YlGn.q3-7{fill:#78c679;background:#78c679;stroke:#78c679}.YlGn.q4-7{fill:#41ab5d;background:#41ab5d;stroke:#41ab5d}.YlGn.q5-7{fill:#238443;background:#238443;stroke:#238443}.YlGn.q6-7{fill:#005a32;background:#005a32;stroke:#005a32}.YlGn.q0-8{fill:#ffffe5;background:#ffffe5;stroke:#ffffe5}.YlGn.q1-8{fill:#f7fcb9;background:#f7fcb9;stroke:#f7fcb9}.YlGn.q2-8{fill:#d9f0a3;background:#d9f0a3;stroke:#d9f0a3}.YlGn.q3-8{fill:#addd8e;background:#addd8e;stroke:#addd8e}.YlGn.q4-8{fill:#78c679;background:#78c679;stroke:#78c679}.YlGn.q5-8{fill:#41ab5d;background:#41ab5d;stroke:#41ab5d}.YlGn.q6-8{fill:#238443;background:#238443;stroke:#238443}.YlGn.q7-8{fill:#005a32;background:#005a32;stroke:#005a32}.YlGn.q0-9{fill:#ffffe5;background:#ffffe5;stroke:#ffffe5}.YlGn.q1-9{fill:#f7fcb9;background:#f7fcb9;stroke:#f7fcb9}.YlGn.q2-9{fill:#d9f0a3;background:#d9f0a3;stroke:#d9f0a3}.YlGn.q3-9{fill:#addd8e;background:#addd8e;stroke:#addd8e}.YlGn.q4-9{fill:#78c679;background:#78c679;stroke:#78c679}.YlGn.q5-9{fill:#41ab5d;background:#41ab5d;stroke:#41ab5d}.YlGn.q6-9{fill:#238443;background:#238443;stroke:#238443}.YlGn.q7-9{fill:#006837;background:#006837;stroke:#006837}.YlGn.q8-9{fill:#004529;background:#004529;stroke:#004529}.YlGnBu.q0-3{fill:#edf8b1;background:#edf8b1;stroke:#edf8b1}.YlGnBu.q1-3{fill:#7fcdbb;background:#7fcdbb;stroke:#7fcdbb}.YlGnBu.q2-3{fill:#2c7fb8;background:#2c7fb8;stroke:#2c7fb8}.YlGnBu.q0-4{fill:#ffc;background:#ffc;stroke:#ffc}.YlGnBu.q1-4{fill:#a1dab4;background:#a1dab4;stroke:#a1dab4}.YlGnBu.q2-4{fill:#41b6c4;background:#41b6c4;stroke:#41b6c4}.YlGnBu.q3-4{fill:#225ea8;background:#225ea8;stroke:#225ea8}.YlGnBu.q0-5{fill:#ffc;background:#ffc;stroke:#ffc}.YlGnBu.q1-5{fill:#a1dab4;background:#a1dab4;stroke:#a1dab4}.YlGnBu.q2-5{fill:#41b6c4;background:#41b6c4;stroke:#41b6c4}.YlGnBu.q3-5{fill:#2c7fb8;background:#2c7fb8;stroke:#2c7fb8}.YlGnBu.q4-5{fill:#253494;background:#253494;stroke:#253494}.YlGnBu.q0-6{fill:#ffc;background:#ffc;stroke:#ffc}.YlGnBu.q1-6{fill:#c7e9b4;background:#c7e9b4;stroke:#c7e9b4}.YlGnBu.q2-6{fill:#7fcdbb;background:#7fcdbb;stroke:#7fcdbb}.YlGnBu.q3-6{fill:#41b6c4;background:#41b6c4;stroke:#41b6c4}.YlGnBu.q4-6{fill:#2c7fb8;background:#2c7fb8;stroke:#2c7fb8}.YlGnBu.q5-6{fill:#253494;background:#253494;stroke:#253494}.YlGnBu.q0-7{fill:#ffc;background:#ffc;stroke:#ffc}.YlGnBu.q1-7{fill:#c7e9b4;background:#c7e9b4;stroke:#c7e9b4}.YlGnBu.q2-7{fill:#7fcdbb;background:#7fcdbb;stroke:#7fcdbb}.YlGnBu.q3-7{fill:#41b6c4;background:#41b6c4;stroke:#41b6c4}.YlGnBu.q4-7{fill:#1d91c0;background:#1d91c0;stroke:#1d91c0}.YlGnBu.q5-7{fill:#225ea8;background:#225ea8;stroke:#225ea8}.YlGnBu.q6-7{fill:#0c2c84;background:#0c2c84;stroke:#0c2c84}.YlGnBu.q0-8{fill:#ffffd9;background:#ffffd9;stroke:#ffffd9}.YlGnBu.q1-8{fill:#edf8b1;background:#edf8b1;stroke:#edf8b1}.YlGnBu.q2-8{fill:#c7e9b4;background:#c7e9b4;stroke:#c7e9b4}.YlGnBu.q3-8{fill:#7fcdbb;background:#7fcdbb;stroke:#7fcdbb}.YlGnBu.q4-8{fill:#41b6c4;background:#41b6c4;stroke:#41b6c4}.YlGnBu.q5-8{fill:#1d91c0;background:#1d91c0;stroke:#1d91c0}.YlGnBu.q6-8{fill:#225ea8;background:#225ea8;stroke:#225ea8}.YlGnBu.q7-8{fill:#0c2c84;background:#0c2c84;stroke:#0c2c84}.YlGnBu.q0-9{fill:#ffffd9;background:#ffffd9;stroke:#ffffd9}.YlGnBu.q1-9{fill:#edf8b1;background:#edf8b1;stroke:#edf8b1}.YlGnBu.q2-9{fill:#c7e9b4;background:#c7e9b4;stroke:#c7e9b4}.YlGnBu.q3-9{fill:#7fcdbb;background:#7fcdbb;stroke:#7fcdbb}.YlGnBu.q4-9{fill:#41b6c4;background:#41b6c4;stroke:#41b6c4}.YlGnBu.q5-9{fill:#1d91c0;background:#1d91c0;stroke:#1d91c0}.YlGnBu.q6-9{fill:#225ea8;background:#225ea8;stroke:#225ea8}.YlGnBu.q7-9{fill:#253494;background:#253494;stroke:#253494}.YlGnBu.q8-9{fill:#081d58;background:#081d58;stroke:#081d58}.GnBu.q0-3{fill:#e0f3db;background:#e0f3db;stroke:#e0f3db}.GnBu.q1-3{fill:#a8ddb5;background:#a8ddb5;stroke:#a8ddb5}.GnBu.q2-3{fill:#43a2ca;background:#43a2ca;stroke:#43a2ca}.GnBu.q0-4{fill:#f0f9e8;background:#f0f9e8;stroke:#f0f9e8}.GnBu.q1-4{fill:#bae4bc;background:#bae4bc;stroke:#bae4bc}.GnBu.q2-4{fill:#7bccc4;background:#7bccc4;stroke:#7bccc4}.GnBu.q3-4{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.GnBu.q0-5{fill:#f0f9e8;background:#f0f9e8;stroke:#f0f9e8}.GnBu.q1-5{fill:#bae4bc;background:#bae4bc;stroke:#bae4bc}.GnBu.q2-5{fill:#7bccc4;background:#7bccc4;stroke:#7bccc4}.GnBu.q3-5{fill:#43a2ca;background:#43a2ca;stroke:#43a2ca}.GnBu.q4-5{fill:#0868ac;background:#0868ac;stroke:#0868ac}.GnBu.q0-6{fill:#f0f9e8;background:#f0f9e8;stroke:#f0f9e8}.GnBu.q1-6{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.GnBu.q2-6{fill:#a8ddb5;background:#a8ddb5;stroke:#a8ddb5}.GnBu.q3-6{fill:#7bccc4;background:#7bccc4;stroke:#7bccc4}.GnBu.q4-6{fill:#43a2ca;background:#43a2ca;stroke:#43a2ca}.GnBu.q5-6{fill:#0868ac;background:#0868ac;stroke:#0868ac}.GnBu.q0-7{fill:#f0f9e8;background:#f0f9e8;stroke:#f0f9e8}.GnBu.q1-7{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.GnBu.q2-7{fill:#a8ddb5;background:#a8ddb5;stroke:#a8ddb5}.GnBu.q3-7{fill:#7bccc4;background:#7bccc4;stroke:#7bccc4}.GnBu.q4-7{fill:#4eb3d3;background:#4eb3d3;stroke:#4eb3d3}.GnBu.q5-7{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.GnBu.q6-7{fill:#08589e;background:#08589e;stroke:#08589e}.GnBu.q0-8{fill:#f7fcf0;background:#f7fcf0;stroke:#f7fcf0}.GnBu.q1-8{fill:#e0f3db;background:#e0f3db;stroke:#e0f3db}.GnBu.q2-8{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.GnBu.q3-8{fill:#a8ddb5;background:#a8ddb5;stroke:#a8ddb5}.GnBu.q4-8{fill:#7bccc4;background:#7bccc4;stroke:#7bccc4}.GnBu.q5-8{fill:#4eb3d3;background:#4eb3d3;stroke:#4eb3d3}.GnBu.q6-8{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.GnBu.q7-8{fill:#08589e;background:#08589e;stroke:#08589e}.GnBu.q0-9{fill:#f7fcf0;background:#f7fcf0;stroke:#f7fcf0}.GnBu.q1-9{fill:#e0f3db;background:#e0f3db;stroke:#e0f3db}.GnBu.q2-9{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.GnBu.q3-9{fill:#a8ddb5;background:#a8ddb5;stroke:#a8ddb5}.GnBu.q4-9{fill:#7bccc4;background:#7bccc4;stroke:#7bccc4}.GnBu.q5-9{fill:#4eb3d3;background:#4eb3d3;stroke:#4eb3d3}.GnBu.q6-9{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.GnBu.q7-9{fill:#0868ac;background:#0868ac;stroke:#0868ac}.GnBu.q8-9{fill:#084081;background:#084081;stroke:#084081}.BuGn.q0-3{fill:#e5f5f9;background:#e5f5f9;stroke:#e5f5f9}.BuGn.q1-3{fill:#99d8c9;background:#99d8c9;stroke:#99d8c9}.BuGn.q2-3{fill:#2ca25f;background:#2ca25f;stroke:#2ca25f}.BuGn.q0-4{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuGn.q1-4{fill:#b2e2e2;background:#b2e2e2;stroke:#b2e2e2}.BuGn.q2-4{fill:#66c2a4;background:#66c2a4;stroke:#66c2a4}.BuGn.q3-4{fill:#238b45;background:#238b45;stroke:#238b45}.BuGn.q0-5{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuGn.q1-5{fill:#b2e2e2;background:#b2e2e2;stroke:#b2e2e2}.BuGn.q2-5{fill:#66c2a4;background:#66c2a4;stroke:#66c2a4}.BuGn.q3-5{fill:#2ca25f;background:#2ca25f;stroke:#2ca25f}.BuGn.q4-5{fill:#006d2c;background:#006d2c;stroke:#006d2c}.BuGn.q0-6{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuGn.q1-6{fill:#ccece6;background:#ccece6;stroke:#ccece6}.BuGn.q2-6{fill:#99d8c9;background:#99d8c9;stroke:#99d8c9}.BuGn.q3-6{fill:#66c2a4;background:#66c2a4;stroke:#66c2a4}.BuGn.q4-6{fill:#2ca25f;background:#2ca25f;stroke:#2ca25f}.BuGn.q5-6{fill:#006d2c;background:#006d2c;stroke:#006d2c}.BuGn.q0-7{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuGn.q1-7{fill:#ccece6;background:#ccece6;stroke:#ccece6}.BuGn.q2-7{fill:#99d8c9;background:#99d8c9;stroke:#99d8c9}.BuGn.q3-7{fill:#66c2a4;background:#66c2a4;stroke:#66c2a4}.BuGn.q4-7{fill:#41ae76;background:#41ae76;stroke:#41ae76}.BuGn.q5-7{fill:#238b45;background:#238b45;stroke:#238b45}.BuGn.q6-7{fill:#005824;background:#005824;stroke:#005824}.BuGn.q0-8{fill:#f7fcfd;background:#f7fcfd;stroke:#f7fcfd}.BuGn.q1-8{fill:#e5f5f9;background:#e5f5f9;stroke:#e5f5f9}.BuGn.q2-8{fill:#ccece6;background:#ccece6;stroke:#ccece6}.BuGn.q3-8{fill:#99d8c9;background:#99d8c9;stroke:#99d8c9}.BuGn.q4-8{fill:#66c2a4;background:#66c2a4;stroke:#66c2a4}.BuGn.q5-8{fill:#41ae76;background:#41ae76;stroke:#41ae76}.BuGn.q6-8{fill:#238b45;background:#238b45;stroke:#238b45}.BuGn.q7-8{fill:#005824;background:#005824;stroke:#005824}.BuGn.q0-9{fill:#f7fcfd;background:#f7fcfd;stroke:#f7fcfd}.BuGn.q1-9{fill:#e5f5f9;background:#e5f5f9;stroke:#e5f5f9}.BuGn.q2-9{fill:#ccece6;background:#ccece6;stroke:#ccece6}.BuGn.q3-9{fill:#99d8c9;background:#99d8c9;stroke:#99d8c9}.BuGn.q4-9{fill:#66c2a4;background:#66c2a4;stroke:#66c2a4}.BuGn.q5-9{fill:#41ae76;background:#41ae76;stroke:#41ae76}.BuGn.q6-9{fill:#238b45;background:#238b45;stroke:#238b45}.BuGn.q7-9{fill:#006d2c;background:#006d2c;stroke:#006d2c}.BuGn.q8-9{fill:#00441b;background:#00441b;stroke:#00441b}.PuBuGn.q0-3{fill:#ece2f0;background:#ece2f0;stroke:#ece2f0}.PuBuGn.q1-3{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBuGn.q2-3{fill:#1c9099;background:#1c9099;stroke:#1c9099}.PuBuGn.q0-4{fill:#f6eff7;background:#f6eff7;stroke:#f6eff7}.PuBuGn.q1-4{fill:#bdc9e1;background:#bdc9e1;stroke:#bdc9e1}.PuBuGn.q2-4{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.PuBuGn.q3-4{fill:#02818a;background:#02818a;stroke:#02818a}.PuBuGn.q0-5{fill:#f6eff7;background:#f6eff7;stroke:#f6eff7}.PuBuGn.q1-5{fill:#bdc9e1;background:#bdc9e1;stroke:#bdc9e1}.PuBuGn.q2-5{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.PuBuGn.q3-5{fill:#1c9099;background:#1c9099;stroke:#1c9099}.PuBuGn.q4-5{fill:#016c59;background:#016c59;stroke:#016c59}.PuBuGn.q0-6{fill:#f6eff7;background:#f6eff7;stroke:#f6eff7}.PuBuGn.q1-6{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBuGn.q2-6{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBuGn.q3-6{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.PuBuGn.q4-6{fill:#1c9099;background:#1c9099;stroke:#1c9099}.PuBuGn.q5-6{fill:#016c59;background:#016c59;stroke:#016c59}.PuBuGn.q0-7{fill:#f6eff7;background:#f6eff7;stroke:#f6eff7}.PuBuGn.q1-7{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBuGn.q2-7{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBuGn.q3-7{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.PuBuGn.q4-7{fill:#3690c0;background:#3690c0;stroke:#3690c0}.PuBuGn.q5-7{fill:#02818a;background:#02818a;stroke:#02818a}.PuBuGn.q6-7{fill:#016450;background:#016450;stroke:#016450}.PuBuGn.q0-8{fill:#fff7fb;background:#fff7fb;stroke:#fff7fb}.PuBuGn.q1-8{fill:#ece2f0;background:#ece2f0;stroke:#ece2f0}.PuBuGn.q2-8{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBuGn.q3-8{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBuGn.q4-8{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.PuBuGn.q5-8{fill:#3690c0;background:#3690c0;stroke:#3690c0}.PuBuGn.q6-8{fill:#02818a;background:#02818a;stroke:#02818a}.PuBuGn.q7-8{fill:#016450;background:#016450;stroke:#016450}.PuBuGn.q0-9{fill:#fff7fb;background:#fff7fb;stroke:#fff7fb}.PuBuGn.q1-9{fill:#ece2f0;background:#ece2f0;stroke:#ece2f0}.PuBuGn.q2-9{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBuGn.q3-9{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBuGn.q4-9{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.PuBuGn.q5-9{fill:#3690c0;background:#3690c0;stroke:#3690c0}.PuBuGn.q6-9{fill:#02818a;background:#02818a;stroke:#02818a}.PuBuGn.q7-9{fill:#016c59;background:#016c59;stroke:#016c59}.PuBuGn.q8-9{fill:#014636;background:#014636;stroke:#014636}.PuBu.q0-3{fill:#ece7f2;background:#ece7f2;stroke:#ece7f2}.PuBu.q1-3{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBu.q2-3{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.PuBu.q0-4{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuBu.q1-4{fill:#bdc9e1;background:#bdc9e1;stroke:#bdc9e1}.PuBu.q2-4{fill:#74a9cf;background:#74a9cf;stroke:#74a9cf}.PuBu.q3-4{fill:#0570b0;background:#0570b0;stroke:#0570b0}.PuBu.q0-5{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuBu.q1-5{fill:#bdc9e1;background:#bdc9e1;stroke:#bdc9e1}.PuBu.q2-5{fill:#74a9cf;background:#74a9cf;stroke:#74a9cf}.PuBu.q3-5{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.PuBu.q4-5{fill:#045a8d;background:#045a8d;stroke:#045a8d}.PuBu.q0-6{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuBu.q1-6{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBu.q2-6{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBu.q3-6{fill:#74a9cf;background:#74a9cf;stroke:#74a9cf}.PuBu.q4-6{fill:#2b8cbe;background:#2b8cbe;stroke:#2b8cbe}.PuBu.q5-6{fill:#045a8d;background:#045a8d;stroke:#045a8d}.PuBu.q0-7{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuBu.q1-7{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBu.q2-7{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBu.q3-7{fill:#74a9cf;background:#74a9cf;stroke:#74a9cf}.PuBu.q4-7{fill:#3690c0;background:#3690c0;stroke:#3690c0}.PuBu.q5-7{fill:#0570b0;background:#0570b0;stroke:#0570b0}.PuBu.q6-7{fill:#034e7b;background:#034e7b;stroke:#034e7b}.PuBu.q0-8{fill:#fff7fb;background:#fff7fb;stroke:#fff7fb}.PuBu.q1-8{fill:#ece7f2;background:#ece7f2;stroke:#ece7f2}.PuBu.q2-8{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBu.q3-8{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBu.q4-8{fill:#74a9cf;background:#74a9cf;stroke:#74a9cf}.PuBu.q5-8{fill:#3690c0;background:#3690c0;stroke:#3690c0}.PuBu.q6-8{fill:#0570b0;background:#0570b0;stroke:#0570b0}.PuBu.q7-8{fill:#034e7b;background:#034e7b;stroke:#034e7b}.PuBu.q0-9{fill:#fff7fb;background:#fff7fb;stroke:#fff7fb}.PuBu.q1-9{fill:#ece7f2;background:#ece7f2;stroke:#ece7f2}.PuBu.q2-9{fill:#d0d1e6;background:#d0d1e6;stroke:#d0d1e6}.PuBu.q3-9{fill:#a6bddb;background:#a6bddb;stroke:#a6bddb}.PuBu.q4-9{fill:#74a9cf;background:#74a9cf;stroke:#74a9cf}.PuBu.q5-9{fill:#3690c0;background:#3690c0;stroke:#3690c0}.PuBu.q6-9{fill:#0570b0;background:#0570b0;stroke:#0570b0}.PuBu.q7-9{fill:#045a8d;background:#045a8d;stroke:#045a8d}.PuBu.q8-9{fill:#023858;background:#023858;stroke:#023858}.BuPu.q0-3{fill:#e0ecf4;background:#e0ecf4;stroke:#e0ecf4}.BuPu.q1-3{fill:#9ebcda;background:#9ebcda;stroke:#9ebcda}.BuPu.q2-3{fill:#8856a7;background:#8856a7;stroke:#8856a7}.BuPu.q0-4{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuPu.q1-4{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.BuPu.q2-4{fill:#8c96c6;background:#8c96c6;stroke:#8c96c6}.BuPu.q3-4{fill:#88419d;background:#88419d;stroke:#88419d}.BuPu.q0-5{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuPu.q1-5{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.BuPu.q2-5{fill:#8c96c6;background:#8c96c6;stroke:#8c96c6}.BuPu.q3-5{fill:#8856a7;background:#8856a7;stroke:#8856a7}.BuPu.q4-5{fill:#810f7c;background:#810f7c;stroke:#810f7c}.BuPu.q0-6{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuPu.q1-6{fill:#bfd3e6;background:#bfd3e6;stroke:#bfd3e6}.BuPu.q2-6{fill:#9ebcda;background:#9ebcda;stroke:#9ebcda}.BuPu.q3-6{fill:#8c96c6;background:#8c96c6;stroke:#8c96c6}.BuPu.q4-6{fill:#8856a7;background:#8856a7;stroke:#8856a7}.BuPu.q5-6{fill:#810f7c;background:#810f7c;stroke:#810f7c}.BuPu.q0-7{fill:#edf8fb;background:#edf8fb;stroke:#edf8fb}.BuPu.q1-7{fill:#bfd3e6;background:#bfd3e6;stroke:#bfd3e6}.BuPu.q2-7{fill:#9ebcda;background:#9ebcda;stroke:#9ebcda}.BuPu.q3-7{fill:#8c96c6;background:#8c96c6;stroke:#8c96c6}.BuPu.q4-7{fill:#8c6bb1;background:#8c6bb1;stroke:#8c6bb1}.BuPu.q5-7{fill:#88419d;background:#88419d;stroke:#88419d}.BuPu.q6-7{fill:#6e016b;background:#6e016b;stroke:#6e016b}.BuPu.q0-8{fill:#f7fcfd;background:#f7fcfd;stroke:#f7fcfd}.BuPu.q1-8{fill:#e0ecf4;background:#e0ecf4;stroke:#e0ecf4}.BuPu.q2-8{fill:#bfd3e6;background:#bfd3e6;stroke:#bfd3e6}.BuPu.q3-8{fill:#9ebcda;background:#9ebcda;stroke:#9ebcda}.BuPu.q4-8{fill:#8c96c6;background:#8c96c6;stroke:#8c96c6}.BuPu.q5-8{fill:#8c6bb1;background:#8c6bb1;stroke:#8c6bb1}.BuPu.q6-8{fill:#88419d;background:#88419d;stroke:#88419d}.BuPu.q7-8{fill:#6e016b;background:#6e016b;stroke:#6e016b}.BuPu.q0-9{fill:#f7fcfd;background:#f7fcfd;stroke:#f7fcfd}.BuPu.q1-9{fill:#e0ecf4;background:#e0ecf4;stroke:#e0ecf4}.BuPu.q2-9{fill:#bfd3e6;background:#bfd3e6;stroke:#bfd3e6}.BuPu.q3-9{fill:#9ebcda;background:#9ebcda;stroke:#9ebcda}.BuPu.q4-9{fill:#8c96c6;background:#8c96c6;stroke:#8c96c6}.BuPu.q5-9{fill:#8c6bb1;background:#8c6bb1;stroke:#8c6bb1}.BuPu.q6-9{fill:#88419d;background:#88419d;stroke:#88419d}.BuPu.q7-9{fill:#810f7c;background:#810f7c;stroke:#810f7c}.BuPu.q8-9{fill:#4d004b;background:#4d004b;stroke:#4d004b}.RdPu.q0-3{fill:#fde0dd;background:#fde0dd;stroke:#fde0dd}.RdPu.q1-3{fill:#fa9fb5;background:#fa9fb5;stroke:#fa9fb5}.RdPu.q2-3{fill:#c51b8a;background:#c51b8a;stroke:#c51b8a}.RdPu.q0-4{fill:#feebe2;background:#feebe2;stroke:#feebe2}.RdPu.q1-4{fill:#fbb4b9;background:#fbb4b9;stroke:#fbb4b9}.RdPu.q2-4{fill:#f768a1;background:#f768a1;stroke:#f768a1}.RdPu.q3-4{fill:#ae017e;background:#ae017e;stroke:#ae017e}.RdPu.q0-5{fill:#feebe2;background:#feebe2;stroke:#feebe2}.RdPu.q1-5{fill:#fbb4b9;background:#fbb4b9;stroke:#fbb4b9}.RdPu.q2-5{fill:#f768a1;background:#f768a1;stroke:#f768a1}.RdPu.q3-5{fill:#c51b8a;background:#c51b8a;stroke:#c51b8a}.RdPu.q4-5{fill:#7a0177;background:#7a0177;stroke:#7a0177}.RdPu.q0-6{fill:#feebe2;background:#feebe2;stroke:#feebe2}.RdPu.q1-6{fill:#fcc5c0;background:#fcc5c0;stroke:#fcc5c0}.RdPu.q2-6{fill:#fa9fb5;background:#fa9fb5;stroke:#fa9fb5}.RdPu.q3-6{fill:#f768a1;background:#f768a1;stroke:#f768a1}.RdPu.q4-6{fill:#c51b8a;background:#c51b8a;stroke:#c51b8a}.RdPu.q5-6{fill:#7a0177;background:#7a0177;stroke:#7a0177}.RdPu.q0-7{fill:#feebe2;background:#feebe2;stroke:#feebe2}.RdPu.q1-7{fill:#fcc5c0;background:#fcc5c0;stroke:#fcc5c0}.RdPu.q2-7{fill:#fa9fb5;background:#fa9fb5;stroke:#fa9fb5}.RdPu.q3-7{fill:#f768a1;background:#f768a1;stroke:#f768a1}.RdPu.q4-7{fill:#dd3497;background:#dd3497;stroke:#dd3497}.RdPu.q5-7{fill:#ae017e;background:#ae017e;stroke:#ae017e}.RdPu.q6-7{fill:#7a0177;background:#7a0177;stroke:#7a0177}.RdPu.q0-8{fill:#fff7f3;background:#fff7f3;stroke:#fff7f3}.RdPu.q1-8{fill:#fde0dd;background:#fde0dd;stroke:#fde0dd}.RdPu.q2-8{fill:#fcc5c0;background:#fcc5c0;stroke:#fcc5c0}.RdPu.q3-8{fill:#fa9fb5;background:#fa9fb5;stroke:#fa9fb5}.RdPu.q4-8{fill:#f768a1;background:#f768a1;stroke:#f768a1}.RdPu.q5-8{fill:#dd3497;background:#dd3497;stroke:#dd3497}.RdPu.q6-8{fill:#ae017e;background:#ae017e;stroke:#ae017e}.RdPu.q7-8{fill:#7a0177;background:#7a0177;stroke:#7a0177}.RdPu.q0-9{fill:#fff7f3;background:#fff7f3;stroke:#fff7f3}.RdPu.q1-9{fill:#fde0dd;background:#fde0dd;stroke:#fde0dd}.RdPu.q2-9{fill:#fcc5c0;background:#fcc5c0;stroke:#fcc5c0}.RdPu.q3-9{fill:#fa9fb5;background:#fa9fb5;stroke:#fa9fb5}.RdPu.q4-9{fill:#f768a1;background:#f768a1;stroke:#f768a1}.RdPu.q5-9{fill:#dd3497;background:#dd3497;stroke:#dd3497}.RdPu.q6-9{fill:#ae017e;background:#ae017e;stroke:#ae017e}.RdPu.q7-9{fill:#7a0177;background:#7a0177;stroke:#7a0177}.RdPu.q8-9{fill:#49006a;background:#49006a;stroke:#49006a}.PuRd.q0-3{fill:#e7e1ef;background:#e7e1ef;stroke:#e7e1ef}.PuRd.q1-3{fill:#c994c7;background:#c994c7;stroke:#c994c7}.PuRd.q2-3{fill:#dd1c77;background:#dd1c77;stroke:#dd1c77}.PuRd.q0-4{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuRd.q1-4{fill:#d7b5d8;background:#d7b5d8;stroke:#d7b5d8}.PuRd.q2-4{fill:#df65b0;background:#df65b0;stroke:#df65b0}.PuRd.q3-4{fill:#ce1256;background:#ce1256;stroke:#ce1256}.PuRd.q0-5{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuRd.q1-5{fill:#d7b5d8;background:#d7b5d8;stroke:#d7b5d8}.PuRd.q2-5{fill:#df65b0;background:#df65b0;stroke:#df65b0}.PuRd.q3-5{fill:#dd1c77;background:#dd1c77;stroke:#dd1c77}.PuRd.q4-5{fill:#980043;background:#980043;stroke:#980043}.PuRd.q0-6{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuRd.q1-6{fill:#d4b9da;background:#d4b9da;stroke:#d4b9da}.PuRd.q2-6{fill:#c994c7;background:#c994c7;stroke:#c994c7}.PuRd.q3-6{fill:#df65b0;background:#df65b0;stroke:#df65b0}.PuRd.q4-6{fill:#dd1c77;background:#dd1c77;stroke:#dd1c77}.PuRd.q5-6{fill:#980043;background:#980043;stroke:#980043}.PuRd.q0-7{fill:#f1eef6;background:#f1eef6;stroke:#f1eef6}.PuRd.q1-7{fill:#d4b9da;background:#d4b9da;stroke:#d4b9da}.PuRd.q2-7{fill:#c994c7;background:#c994c7;stroke:#c994c7}.PuRd.q3-7{fill:#df65b0;background:#df65b0;stroke:#df65b0}.PuRd.q4-7{fill:#e7298a;background:#e7298a;stroke:#e7298a}.PuRd.q5-7{fill:#ce1256;background:#ce1256;stroke:#ce1256}.PuRd.q6-7{fill:#91003f;background:#91003f;stroke:#91003f}.PuRd.q0-8{fill:#f7f4f9;background:#f7f4f9;stroke:#f7f4f9}.PuRd.q1-8{fill:#e7e1ef;background:#e7e1ef;stroke:#e7e1ef}.PuRd.q2-8{fill:#d4b9da;background:#d4b9da;stroke:#d4b9da}.PuRd.q3-8{fill:#c994c7;background:#c994c7;stroke:#c994c7}.PuRd.q4-8{fill:#df65b0;background:#df65b0;stroke:#df65b0}.PuRd.q5-8{fill:#e7298a;background:#e7298a;stroke:#e7298a}.PuRd.q6-8{fill:#ce1256;background:#ce1256;stroke:#ce1256}.PuRd.q7-8{fill:#91003f;background:#91003f;stroke:#91003f}.PuRd.q0-9{fill:#f7f4f9;background:#f7f4f9;stroke:#f7f4f9}.PuRd.q1-9{fill:#e7e1ef;background:#e7e1ef;stroke:#e7e1ef}.PuRd.q2-9{fill:#d4b9da;background:#d4b9da;stroke:#d4b9da}.PuRd.q3-9{fill:#c994c7;background:#c994c7;stroke:#c994c7}.PuRd.q4-9{fill:#df65b0;background:#df65b0;stroke:#df65b0}.PuRd.q5-9{fill:#e7298a;background:#e7298a;stroke:#e7298a}.PuRd.q6-9{fill:#ce1256;background:#ce1256;stroke:#ce1256}.PuRd.q7-9{fill:#980043;background:#980043;stroke:#980043}.PuRd.q8-9{fill:#67001f;background:#67001f;stroke:#67001f}.OrRd.q0-3{fill:#fee8c8;background:#fee8c8;stroke:#fee8c8}.OrRd.q1-3{fill:#fdbb84;background:#fdbb84;stroke:#fdbb84}.OrRd.q2-3{fill:#e34a33;background:#e34a33;stroke:#e34a33}.OrRd.q0-4{fill:#fef0d9;background:#fef0d9;stroke:#fef0d9}.OrRd.q1-4{fill:#fdcc8a;background:#fdcc8a;stroke:#fdcc8a}.OrRd.q2-4{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.OrRd.q3-4{fill:#d7301f;background:#d7301f;stroke:#d7301f}.OrRd.q0-5{fill:#fef0d9;background:#fef0d9;stroke:#fef0d9}.OrRd.q1-5{fill:#fdcc8a;background:#fdcc8a;stroke:#fdcc8a}.OrRd.q2-5{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.OrRd.q3-5{fill:#e34a33;background:#e34a33;stroke:#e34a33}.OrRd.q4-5{fill:#b30000;background:#b30000;stroke:#b30000}.OrRd.q0-6{fill:#fef0d9;background:#fef0d9;stroke:#fef0d9}.OrRd.q1-6{fill:#fdd49e;background:#fdd49e;stroke:#fdd49e}.OrRd.q2-6{fill:#fdbb84;background:#fdbb84;stroke:#fdbb84}.OrRd.q3-6{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.OrRd.q4-6{fill:#e34a33;background:#e34a33;stroke:#e34a33}.OrRd.q5-6{fill:#b30000;background:#b30000;stroke:#b30000}.OrRd.q0-7{fill:#fef0d9;background:#fef0d9;stroke:#fef0d9}.OrRd.q1-7{fill:#fdd49e;background:#fdd49e;stroke:#fdd49e}.OrRd.q2-7{fill:#fdbb84;background:#fdbb84;stroke:#fdbb84}.OrRd.q3-7{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.OrRd.q4-7{fill:#ef6548;background:#ef6548;stroke:#ef6548}.OrRd.q5-7{fill:#d7301f;background:#d7301f;stroke:#d7301f}.OrRd.q6-7{fill:#900;background:#900;stroke:#900}.OrRd.q0-8{fill:#fff7ec;background:#fff7ec;stroke:#fff7ec}.OrRd.q1-8{fill:#fee8c8;background:#fee8c8;stroke:#fee8c8}.OrRd.q2-8{fill:#fdd49e;background:#fdd49e;stroke:#fdd49e}.OrRd.q3-8{fill:#fdbb84;background:#fdbb84;stroke:#fdbb84}.OrRd.q4-8{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.OrRd.q5-8{fill:#ef6548;background:#ef6548;stroke:#ef6548}.OrRd.q6-8{fill:#d7301f;background:#d7301f;stroke:#d7301f}.OrRd.q7-8{fill:#900;background:#900;stroke:#900}.OrRd.q0-9{fill:#fff7ec;background:#fff7ec;stroke:#fff7ec}.OrRd.q1-9{fill:#fee8c8;background:#fee8c8;stroke:#fee8c8}.OrRd.q2-9{fill:#fdd49e;background:#fdd49e;stroke:#fdd49e}.OrRd.q3-9{fill:#fdbb84;background:#fdbb84;stroke:#fdbb84}.OrRd.q4-9{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.OrRd.q5-9{fill:#ef6548;background:#ef6548;stroke:#ef6548}.OrRd.q6-9{fill:#d7301f;background:#d7301f;stroke:#d7301f}.OrRd.q7-9{fill:#b30000;background:#b30000;stroke:#b30000}.OrRd.q8-9{fill:#7f0000;background:#7f0000;stroke:#7f0000}.YlOrRd.q0-3{fill:#ffeda0;background:#ffeda0;stroke:#ffeda0}.YlOrRd.q1-3{fill:#feb24c;background:#feb24c;stroke:#feb24c}.YlOrRd.q2-3{fill:#f03b20;background:#f03b20;stroke:#f03b20}.YlOrRd.q0-4{fill:#ffffb2;background:#ffffb2;stroke:#ffffb2}.YlOrRd.q1-4{fill:#fecc5c;background:#fecc5c;stroke:#fecc5c}.YlOrRd.q2-4{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.YlOrRd.q3-4{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.YlOrRd.q0-5{fill:#ffffb2;background:#ffffb2;stroke:#ffffb2}.YlOrRd.q1-5{fill:#fecc5c;background:#fecc5c;stroke:#fecc5c}.YlOrRd.q2-5{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.YlOrRd.q3-5{fill:#f03b20;background:#f03b20;stroke:#f03b20}.YlOrRd.q4-5{fill:#bd0026;background:#bd0026;stroke:#bd0026}.YlOrRd.q0-6{fill:#ffffb2;background:#ffffb2;stroke:#ffffb2}.YlOrRd.q1-6{fill:#fed976;background:#fed976;stroke:#fed976}.YlOrRd.q2-6{fill:#feb24c;background:#feb24c;stroke:#feb24c}.YlOrRd.q3-6{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.YlOrRd.q4-6{fill:#f03b20;background:#f03b20;stroke:#f03b20}.YlOrRd.q5-6{fill:#bd0026;background:#bd0026;stroke:#bd0026}.YlOrRd.q0-7{fill:#ffffb2;background:#ffffb2;stroke:#ffffb2}.YlOrRd.q1-7{fill:#fed976;background:#fed976;stroke:#fed976}.YlOrRd.q2-7{fill:#feb24c;background:#feb24c;stroke:#feb24c}.YlOrRd.q3-7{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.YlOrRd.q4-7{fill:#fc4e2a;background:#fc4e2a;stroke:#fc4e2a}.YlOrRd.q5-7{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.YlOrRd.q6-7{fill:#b10026;background:#b10026;stroke:#b10026}.YlOrRd.q0-8{fill:#ffc;background:#ffc;stroke:#ffc}.YlOrRd.q1-8{fill:#ffeda0;background:#ffeda0;stroke:#ffeda0}.YlOrRd.q2-8{fill:#fed976;background:#fed976;stroke:#fed976}.YlOrRd.q3-8{fill:#feb24c;background:#feb24c;stroke:#feb24c}.YlOrRd.q4-8{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.YlOrRd.q5-8{fill:#fc4e2a;background:#fc4e2a;stroke:#fc4e2a}.YlOrRd.q6-8{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.YlOrRd.q7-8{fill:#b10026;background:#b10026;stroke:#b10026}.YlOrRd.q0-9{fill:#ffc;background:#ffc;stroke:#ffc}.YlOrRd.q1-9{fill:#ffeda0;background:#ffeda0;stroke:#ffeda0}.YlOrRd.q2-9{fill:#fed976;background:#fed976;stroke:#fed976}.YlOrRd.q3-9{fill:#feb24c;background:#feb24c;stroke:#feb24c}.YlOrRd.q4-9{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.YlOrRd.q5-9{fill:#fc4e2a;background:#fc4e2a;stroke:#fc4e2a}.YlOrRd.q6-9{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.YlOrRd.q7-9{fill:#bd0026;background:#bd0026;stroke:#bd0026}.YlOrRd.q8-9{fill:#800026;background:#800026;stroke:#800026}.YlOrBr.q0-3{fill:#fff7bc;background:#fff7bc;stroke:#fff7bc}.YlOrBr.q1-3{fill:#fec44f;background:#fec44f;stroke:#fec44f}.YlOrBr.q2-3{fill:#d95f0e;background:#d95f0e;stroke:#d95f0e}.YlOrBr.q0-4{fill:#ffffd4;background:#ffffd4;stroke:#ffffd4}.YlOrBr.q1-4{fill:#fed98e;background:#fed98e;stroke:#fed98e}.YlOrBr.q2-4{fill:#fe9929;background:#fe9929;stroke:#fe9929}.YlOrBr.q3-4{fill:#cc4c02;background:#cc4c02;stroke:#cc4c02}.YlOrBr.q0-5{fill:#ffffd4;background:#ffffd4;stroke:#ffffd4}.YlOrBr.q1-5{fill:#fed98e;background:#fed98e;stroke:#fed98e}.YlOrBr.q2-5{fill:#fe9929;background:#fe9929;stroke:#fe9929}.YlOrBr.q3-5{fill:#d95f0e;background:#d95f0e;stroke:#d95f0e}.YlOrBr.q4-5{fill:#993404;background:#993404;stroke:#993404}.YlOrBr.q0-6{fill:#ffffd4;background:#ffffd4;stroke:#ffffd4}.YlOrBr.q1-6{fill:#fee391;background:#fee391;stroke:#fee391}.YlOrBr.q2-6{fill:#fec44f;background:#fec44f;stroke:#fec44f}.YlOrBr.q3-6{fill:#fe9929;background:#fe9929;stroke:#fe9929}.YlOrBr.q4-6{fill:#d95f0e;background:#d95f0e;stroke:#d95f0e}.YlOrBr.q5-6{fill:#993404;background:#993404;stroke:#993404}.YlOrBr.q0-7{fill:#ffffd4;background:#ffffd4;stroke:#ffffd4}.YlOrBr.q1-7{fill:#fee391;background:#fee391;stroke:#fee391}.YlOrBr.q2-7{fill:#fec44f;background:#fec44f;stroke:#fec44f}.YlOrBr.q3-7{fill:#fe9929;background:#fe9929;stroke:#fe9929}.YlOrBr.q4-7{fill:#ec7014;background:#ec7014;stroke:#ec7014}.YlOrBr.q5-7{fill:#cc4c02;background:#cc4c02;stroke:#cc4c02}.YlOrBr.q6-7{fill:#8c2d04;background:#8c2d04;stroke:#8c2d04}.YlOrBr.q0-8{fill:#ffffe5;background:#ffffe5;stroke:#ffffe5}.YlOrBr.q1-8{fill:#fff7bc;background:#fff7bc;stroke:#fff7bc}.YlOrBr.q2-8{fill:#fee391;background:#fee391;stroke:#fee391}.YlOrBr.q3-8{fill:#fec44f;background:#fec44f;stroke:#fec44f}.YlOrBr.q4-8{fill:#fe9929;background:#fe9929;stroke:#fe9929}.YlOrBr.q5-8{fill:#ec7014;background:#ec7014;stroke:#ec7014}.YlOrBr.q6-8{fill:#cc4c02;background:#cc4c02;stroke:#cc4c02}.YlOrBr.q7-8{fill:#8c2d04;background:#8c2d04;stroke:#8c2d04}.YlOrBr.q0-9{fill:#ffffe5;background:#ffffe5;stroke:#ffffe5}.YlOrBr.q1-9{fill:#fff7bc;background:#fff7bc;stroke:#fff7bc}.YlOrBr.q2-9{fill:#fee391;background:#fee391;stroke:#fee391}.YlOrBr.q3-9{fill:#fec44f;background:#fec44f;stroke:#fec44f}.YlOrBr.q4-9{fill:#fe9929;background:#fe9929;stroke:#fe9929}.YlOrBr.q5-9{fill:#ec7014;background:#ec7014;stroke:#ec7014}.YlOrBr.q6-9{fill:#cc4c02;background:#cc4c02;stroke:#cc4c02}.YlOrBr.q7-9{fill:#993404;background:#993404;stroke:#993404}.YlOrBr.q8-9{fill:#662506;background:#662506;stroke:#662506}.Purples.q0-3{fill:#efedf5;background:#efedf5;stroke:#efedf5}.Purples.q1-3{fill:#bcbddc;background:#bcbddc;stroke:#bcbddc}.Purples.q2-3{fill:#756bb1;background:#756bb1;stroke:#756bb1}.Purples.q0-4{fill:#f2f0f7;background:#f2f0f7;stroke:#f2f0f7}.Purples.q1-4{fill:#cbc9e2;background:#cbc9e2;stroke:#cbc9e2}.Purples.q2-4{fill:#9e9ac8;background:#9e9ac8;stroke:#9e9ac8}.Purples.q3-4{fill:#6a51a3;background:#6a51a3;stroke:#6a51a3}.Purples.q0-5{fill:#f2f0f7;background:#f2f0f7;stroke:#f2f0f7}.Purples.q1-5{fill:#cbc9e2;background:#cbc9e2;stroke:#cbc9e2}.Purples.q2-5{fill:#9e9ac8;background:#9e9ac8;stroke:#9e9ac8}.Purples.q3-5{fill:#756bb1;background:#756bb1;stroke:#756bb1}.Purples.q4-5{fill:#54278f;background:#54278f;stroke:#54278f}.Purples.q0-6{fill:#f2f0f7;background:#f2f0f7;stroke:#f2f0f7}.Purples.q1-6{fill:#dadaeb;background:#dadaeb;stroke:#dadaeb}.Purples.q2-6{fill:#bcbddc;background:#bcbddc;stroke:#bcbddc}.Purples.q3-6{fill:#9e9ac8;background:#9e9ac8;stroke:#9e9ac8}.Purples.q4-6{fill:#756bb1;background:#756bb1;stroke:#756bb1}.Purples.q5-6{fill:#54278f;background:#54278f;stroke:#54278f}.Purples.q0-7{fill:#f2f0f7;background:#f2f0f7;stroke:#f2f0f7}.Purples.q1-7{fill:#dadaeb;background:#dadaeb;stroke:#dadaeb}.Purples.q2-7{fill:#bcbddc;background:#bcbddc;stroke:#bcbddc}.Purples.q3-7{fill:#9e9ac8;background:#9e9ac8;stroke:#9e9ac8}.Purples.q4-7{fill:#807dba;background:#807dba;stroke:#807dba}.Purples.q5-7{fill:#6a51a3;background:#6a51a3;stroke:#6a51a3}.Purples.q6-7{fill:#4a1486;background:#4a1486;stroke:#4a1486}.Purples.q0-8{fill:#fcfbfd;background:#fcfbfd;stroke:#fcfbfd}.Purples.q1-8{fill:#efedf5;background:#efedf5;stroke:#efedf5}.Purples.q2-8{fill:#dadaeb;background:#dadaeb;stroke:#dadaeb}.Purples.q3-8{fill:#bcbddc;background:#bcbddc;stroke:#bcbddc}.Purples.q4-8{fill:#9e9ac8;background:#9e9ac8;stroke:#9e9ac8}.Purples.q5-8{fill:#807dba;background:#807dba;stroke:#807dba}.Purples.q6-8{fill:#6a51a3;background:#6a51a3;stroke:#6a51a3}.Purples.q7-8{fill:#4a1486;background:#4a1486;stroke:#4a1486}.Purples.q0-9{fill:#fcfbfd;background:#fcfbfd;stroke:#fcfbfd}.Purples.q1-9{fill:#efedf5;background:#efedf5;stroke:#efedf5}.Purples.q2-9{fill:#dadaeb;background:#dadaeb;stroke:#dadaeb}.Purples.q3-9{fill:#bcbddc;background:#bcbddc;stroke:#bcbddc}.Purples.q4-9{fill:#9e9ac8;background:#9e9ac8;stroke:#9e9ac8}.Purples.q5-9{fill:#807dba;background:#807dba;stroke:#807dba}.Purples.q6-9{fill:#6a51a3;background:#6a51a3;stroke:#6a51a3}.Purples.q7-9{fill:#54278f;background:#54278f;stroke:#54278f}.Purples.q8-9{fill:#3f007d;background:#3f007d;stroke:#3f007d}.Blues.q0-3{fill:#deebf7;background:#deebf7;stroke:#deebf7}.Blues.q1-3{fill:#9ecae1;background:#9ecae1;stroke:#9ecae1}.Blues.q2-3{fill:#3182bd;background:#3182bd;stroke:#3182bd}.Blues.q0-4{fill:#eff3ff;background:#eff3ff;stroke:#eff3ff}.Blues.q1-4{fill:#bdd7e7;background:#bdd7e7;stroke:#bdd7e7}.Blues.q2-4{fill:#6baed6;background:#6baed6;stroke:#6baed6}.Blues.q3-4{fill:#2171b5;background:#2171b5;stroke:#2171b5}.Blues.q0-5{fill:#eff3ff;background:#eff3ff;stroke:#eff3ff}.Blues.q1-5{fill:#bdd7e7;background:#bdd7e7;stroke:#bdd7e7}.Blues.q2-5{fill:#6baed6;background:#6baed6;stroke:#6baed6}.Blues.q3-5{fill:#3182bd;background:#3182bd;stroke:#3182bd}.Blues.q4-5{fill:#08519c;background:#08519c;stroke:#08519c}.Blues.q0-6{fill:#eff3ff;background:#eff3ff;stroke:#eff3ff}.Blues.q1-6{fill:#c6dbef;background:#c6dbef;stroke:#c6dbef}.Blues.q2-6{fill:#9ecae1;background:#9ecae1;stroke:#9ecae1}.Blues.q3-6{fill:#6baed6;background:#6baed6;stroke:#6baed6}.Blues.q4-6{fill:#3182bd;background:#3182bd;stroke:#3182bd}.Blues.q5-6{fill:#08519c;background:#08519c;stroke:#08519c}.Blues.q0-7{fill:#eff3ff;background:#eff3ff;stroke:#eff3ff}.Blues.q1-7{fill:#c6dbef;background:#c6dbef;stroke:#c6dbef}.Blues.q2-7{fill:#9ecae1;background:#9ecae1;stroke:#9ecae1}.Blues.q3-7{fill:#6baed6;background:#6baed6;stroke:#6baed6}.Blues.q4-7{fill:#4292c6;background:#4292c6;stroke:#4292c6}.Blues.q5-7{fill:#2171b5;background:#2171b5;stroke:#2171b5}.Blues.q6-7{fill:#084594;background:#084594;stroke:#084594}.Blues.q0-8{fill:#f7fbff;background:#f7fbff;stroke:#f7fbff}.Blues.q1-8{fill:#deebf7;background:#deebf7;stroke:#deebf7}.Blues.q2-8{fill:#c6dbef;background:#c6dbef;stroke:#c6dbef}.Blues.q3-8{fill:#9ecae1;background:#9ecae1;stroke:#9ecae1}.Blues.q4-8{fill:#6baed6;background:#6baed6;stroke:#6baed6}.Blues.q5-8{fill:#4292c6;background:#4292c6;stroke:#4292c6}.Blues.q6-8{fill:#2171b5;background:#2171b5;stroke:#2171b5}.Blues.q7-8{fill:#084594;background:#084594;stroke:#084594}.Blues.q0-9{fill:#f7fbff;background:#f7fbff;stroke:#f7fbff}.Blues.q1-9{fill:#deebf7;background:#deebf7;stroke:#deebf7}.Blues.q2-9{fill:#c6dbef;background:#c6dbef;stroke:#c6dbef}.Blues.q3-9{fill:#9ecae1;background:#9ecae1;stroke:#9ecae1}.Blues.q4-9{fill:#6baed6;background:#6baed6;stroke:#6baed6}.Blues.q5-9{fill:#4292c6;background:#4292c6;stroke:#4292c6}.Blues.q6-9{fill:#2171b5;background:#2171b5;stroke:#2171b5}.Blues.q7-9{fill:#08519c;background:#08519c;stroke:#08519c}.Blues.q8-9{fill:#08306b;background:#08306b;stroke:#08306b}.Greens.q0-3{fill:#e5f5e0;background:#e5f5e0;stroke:#e5f5e0}.Greens.q1-3{fill:#a1d99b;background:#a1d99b;stroke:#a1d99b}.Greens.q2-3{fill:#31a354;background:#31a354;stroke:#31a354}.Greens.q0-4{fill:#edf8e9;background:#edf8e9;stroke:#edf8e9}.Greens.q1-4{fill:#bae4b3;background:#bae4b3;stroke:#bae4b3}.Greens.q2-4{fill:#74c476;background:#74c476;stroke:#74c476}.Greens.q3-4{fill:#238b45;background:#238b45;stroke:#238b45}.Greens.q0-5{fill:#edf8e9;background:#edf8e9;stroke:#edf8e9}.Greens.q1-5{fill:#bae4b3;background:#bae4b3;stroke:#bae4b3}.Greens.q2-5{fill:#74c476;background:#74c476;stroke:#74c476}.Greens.q3-5{fill:#31a354;background:#31a354;stroke:#31a354}.Greens.q4-5{fill:#006d2c;background:#006d2c;stroke:#006d2c}.Greens.q0-6{fill:#edf8e9;background:#edf8e9;stroke:#edf8e9}.Greens.q1-6{fill:#c7e9c0;background:#c7e9c0;stroke:#c7e9c0}.Greens.q2-6{fill:#a1d99b;background:#a1d99b;stroke:#a1d99b}.Greens.q3-6{fill:#74c476;background:#74c476;stroke:#74c476}.Greens.q4-6{fill:#31a354;background:#31a354;stroke:#31a354}.Greens.q5-6{fill:#006d2c;background:#006d2c;stroke:#006d2c}.Greens.q0-7{fill:#edf8e9;background:#edf8e9;stroke:#edf8e9}.Greens.q1-7{fill:#c7e9c0;background:#c7e9c0;stroke:#c7e9c0}.Greens.q2-7{fill:#a1d99b;background:#a1d99b;stroke:#a1d99b}.Greens.q3-7{fill:#74c476;background:#74c476;stroke:#74c476}.Greens.q4-7{fill:#41ab5d;background:#41ab5d;stroke:#41ab5d}.Greens.q5-7{fill:#238b45;background:#238b45;stroke:#238b45}.Greens.q6-7{fill:#005a32;background:#005a32;stroke:#005a32}.Greens.q0-8{fill:#f7fcf5;background:#f7fcf5;stroke:#f7fcf5}.Greens.q1-8{fill:#e5f5e0;background:#e5f5e0;stroke:#e5f5e0}.Greens.q2-8{fill:#c7e9c0;background:#c7e9c0;stroke:#c7e9c0}.Greens.q3-8{fill:#a1d99b;background:#a1d99b;stroke:#a1d99b}.Greens.q4-8{fill:#74c476;background:#74c476;stroke:#74c476}.Greens.q5-8{fill:#41ab5d;background:#41ab5d;stroke:#41ab5d}.Greens.q6-8{fill:#238b45;background:#238b45;stroke:#238b45}.Greens.q7-8{fill:#005a32;background:#005a32;stroke:#005a32}.Greens.q0-9{fill:#f7fcf5;background:#f7fcf5;stroke:#f7fcf5}.Greens.q1-9{fill:#e5f5e0;background:#e5f5e0;stroke:#e5f5e0}.Greens.q2-9{fill:#c7e9c0;background:#c7e9c0;stroke:#c7e9c0}.Greens.q3-9{fill:#a1d99b;background:#a1d99b;stroke:#a1d99b}.Greens.q4-9{fill:#74c476;background:#74c476;stroke:#74c476}.Greens.q5-9{fill:#41ab5d;background:#41ab5d;stroke:#41ab5d}.Greens.q6-9{fill:#238b45;background:#238b45;stroke:#238b45}.Greens.q7-9{fill:#006d2c;background:#006d2c;stroke:#006d2c}.Greens.q8-9{fill:#00441b;background:#00441b;stroke:#00441b}.Oranges.q0-3{fill:#fee6ce;background:#fee6ce;stroke:#fee6ce}.Oranges.q1-3{fill:#fdae6b;background:#fdae6b;stroke:#fdae6b}.Oranges.q2-3{fill:#e6550d;background:#e6550d;stroke:#e6550d}.Oranges.q0-4{fill:#feedde;background:#feedde;stroke:#feedde}.Oranges.q1-4{fill:#fdbe85;background:#fdbe85;stroke:#fdbe85}.Oranges.q2-4{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.Oranges.q3-4{fill:#d94701;background:#d94701;stroke:#d94701}.Oranges.q0-5{fill:#feedde;background:#feedde;stroke:#feedde}.Oranges.q1-5{fill:#fdbe85;background:#fdbe85;stroke:#fdbe85}.Oranges.q2-5{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.Oranges.q3-5{fill:#e6550d;background:#e6550d;stroke:#e6550d}.Oranges.q4-5{fill:#a63603;background:#a63603;stroke:#a63603}.Oranges.q0-6{fill:#feedde;background:#feedde;stroke:#feedde}.Oranges.q1-6{fill:#fdd0a2;background:#fdd0a2;stroke:#fdd0a2}.Oranges.q2-6{fill:#fdae6b;background:#fdae6b;stroke:#fdae6b}.Oranges.q3-6{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.Oranges.q4-6{fill:#e6550d;background:#e6550d;stroke:#e6550d}.Oranges.q5-6{fill:#a63603;background:#a63603;stroke:#a63603}.Oranges.q0-7{fill:#feedde;background:#feedde;stroke:#feedde}.Oranges.q1-7{fill:#fdd0a2;background:#fdd0a2;stroke:#fdd0a2}.Oranges.q2-7{fill:#fdae6b;background:#fdae6b;stroke:#fdae6b}.Oranges.q3-7{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.Oranges.q4-7{fill:#f16913;background:#f16913;stroke:#f16913}.Oranges.q5-7{fill:#d94801;background:#d94801;stroke:#d94801}.Oranges.q6-7{fill:#8c2d04;background:#8c2d04;stroke:#8c2d04}.Oranges.q0-8{fill:#fff5eb;background:#fff5eb;stroke:#fff5eb}.Oranges.q1-8{fill:#fee6ce;background:#fee6ce;stroke:#fee6ce}.Oranges.q2-8{fill:#fdd0a2;background:#fdd0a2;stroke:#fdd0a2}.Oranges.q3-8{fill:#fdae6b;background:#fdae6b;stroke:#fdae6b}.Oranges.q4-8{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.Oranges.q5-8{fill:#f16913;background:#f16913;stroke:#f16913}.Oranges.q6-8{fill:#d94801;background:#d94801;stroke:#d94801}.Oranges.q7-8{fill:#8c2d04;background:#8c2d04;stroke:#8c2d04}.Oranges.q0-9{fill:#fff5eb;background:#fff5eb;stroke:#fff5eb}.Oranges.q1-9{fill:#fee6ce;background:#fee6ce;stroke:#fee6ce}.Oranges.q2-9{fill:#fdd0a2;background:#fdd0a2;stroke:#fdd0a2}.Oranges.q3-9{fill:#fdae6b;background:#fdae6b;stroke:#fdae6b}.Oranges.q4-9{fill:#fd8d3c;background:#fd8d3c;stroke:#fd8d3c}.Oranges.q5-9{fill:#f16913;background:#f16913;stroke:#f16913}.Oranges.q6-9{fill:#d94801;background:#d94801;stroke:#d94801}.Oranges.q7-9{fill:#a63603;background:#a63603;stroke:#a63603}.Oranges.q8-9{fill:#7f2704;background:#7f2704;stroke:#7f2704}.Reds.q0-3{fill:#fee0d2;background:#fee0d2;stroke:#fee0d2}.Reds.q1-3{fill:#fc9272;background:#fc9272;stroke:#fc9272}.Reds.q2-3{fill:#de2d26;background:#de2d26;stroke:#de2d26}.Reds.q0-4{fill:#fee5d9;background:#fee5d9;stroke:#fee5d9}.Reds.q1-4{fill:#fcae91;background:#fcae91;stroke:#fcae91}.Reds.q2-4{fill:#fb6a4a;background:#fb6a4a;stroke:#fb6a4a}.Reds.q3-4{fill:#cb181d;background:#cb181d;stroke:#cb181d}.Reds.q0-5{fill:#fee5d9;background:#fee5d9;stroke:#fee5d9}.Reds.q1-5{fill:#fcae91;background:#fcae91;stroke:#fcae91}.Reds.q2-5{fill:#fb6a4a;background:#fb6a4a;stroke:#fb6a4a}.Reds.q3-5{fill:#de2d26;background:#de2d26;stroke:#de2d26}.Reds.q4-5{fill:#a50f15;background:#a50f15;stroke:#a50f15}.Reds.q0-6{fill:#fee5d9;background:#fee5d9;stroke:#fee5d9}.Reds.q1-6{fill:#fcbba1;background:#fcbba1;stroke:#fcbba1}.Reds.q2-6{fill:#fc9272;background:#fc9272;stroke:#fc9272}.Reds.q3-6{fill:#fb6a4a;background:#fb6a4a;stroke:#fb6a4a}.Reds.q4-6{fill:#de2d26;background:#de2d26;stroke:#de2d26}.Reds.q5-6{fill:#a50f15;background:#a50f15;stroke:#a50f15}.Reds.q0-7{fill:#fee5d9;background:#fee5d9;stroke:#fee5d9}.Reds.q1-7{fill:#fcbba1;background:#fcbba1;stroke:#fcbba1}.Reds.q2-7{fill:#fc9272;background:#fc9272;stroke:#fc9272}.Reds.q3-7{fill:#fb6a4a;background:#fb6a4a;stroke:#fb6a4a}.Reds.q4-7{fill:#ef3b2c;background:#ef3b2c;stroke:#ef3b2c}.Reds.q5-7{fill:#cb181d;background:#cb181d;stroke:#cb181d}.Reds.q6-7{fill:#99000d;background:#99000d;stroke:#99000d}.Reds.q0-8{fill:#fff5f0;background:#fff5f0;stroke:#fff5f0}.Reds.q1-8{fill:#fee0d2;background:#fee0d2;stroke:#fee0d2}.Reds.q2-8{fill:#fcbba1;background:#fcbba1;stroke:#fcbba1}.Reds.q3-8{fill:#fc9272;background:#fc9272;stroke:#fc9272}.Reds.q4-8{fill:#fb6a4a;background:#fb6a4a;stroke:#fb6a4a}.Reds.q5-8{fill:#ef3b2c;background:#ef3b2c;stroke:#ef3b2c}.Reds.q6-8{fill:#cb181d;background:#cb181d;stroke:#cb181d}.Reds.q7-8{fill:#99000d;background:#99000d;stroke:#99000d}.Reds.q0-9{fill:#fff5f0;background:#fff5f0;stroke:#fff5f0}.Reds.q1-9{fill:#fee0d2;background:#fee0d2;stroke:#fee0d2}.Reds.q2-9{fill:#fcbba1;background:#fcbba1;stroke:#fcbba1}.Reds.q3-9{fill:#fc9272;background:#fc9272;stroke:#fc9272}.Reds.q4-9{fill:#fb6a4a;background:#fb6a4a;stroke:#fb6a4a}.Reds.q5-9{fill:#ef3b2c;background:#ef3b2c;stroke:#ef3b2c}.Reds.q6-9{fill:#cb181d;background:#cb181d;stroke:#cb181d}.Reds.q7-9{fill:#a50f15;background:#a50f15;stroke:#a50f15}.Reds.q8-9{fill:#67000d;background:#67000d;stroke:#67000d}.Greys.q0-3{fill:#f0f0f0;background:#f0f0f0;stroke:#f0f0f0}.Greys.q1-3{fill:#bdbdbd;background:#bdbdbd;stroke:#bdbdbd}.Greys.q2-3{fill:#636363;background:#636363;stroke:#636363}.Greys.q0-4{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.Greys.q1-4{fill:#ccc;background:#ccc;stroke:#ccc}.Greys.q2-4{fill:#969696;background:#969696;stroke:#969696}.Greys.q3-4{fill:#525252;background:#525252;stroke:#525252}.Greys.q0-5{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.Greys.q1-5{fill:#ccc;background:#ccc;stroke:#ccc}.Greys.q2-5{fill:#969696;background:#969696;stroke:#969696}.Greys.q3-5{fill:#636363;background:#636363;stroke:#636363}.Greys.q4-5{fill:#252525;background:#252525;stroke:#252525}.Greys.q0-6{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.Greys.q1-6{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Greys.q2-6{fill:#bdbdbd;background:#bdbdbd;stroke:#bdbdbd}.Greys.q3-6{fill:#969696;background:#969696;stroke:#969696}.Greys.q4-6{fill:#636363;background:#636363;stroke:#636363}.Greys.q5-6{fill:#252525;background:#252525;stroke:#252525}.Greys.q0-7{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.Greys.q1-7{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Greys.q2-7{fill:#bdbdbd;background:#bdbdbd;stroke:#bdbdbd}.Greys.q3-7{fill:#969696;background:#969696;stroke:#969696}.Greys.q4-7{fill:#737373;background:#737373;stroke:#737373}.Greys.q5-7{fill:#525252;background:#525252;stroke:#525252}.Greys.q6-7{fill:#252525;background:#252525;stroke:#252525}.Greys.q0-8{fill:#fff;background:#fff;stroke:#fff}.Greys.q1-8{fill:#f0f0f0;background:#f0f0f0;stroke:#f0f0f0}.Greys.q2-8{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Greys.q3-8{fill:#bdbdbd;background:#bdbdbd;stroke:#bdbdbd}.Greys.q4-8{fill:#969696;background:#969696;stroke:#969696}.Greys.q5-8{fill:#737373;background:#737373;stroke:#737373}.Greys.q6-8{fill:#525252;background:#525252;stroke:#525252}.Greys.q7-8{fill:#252525;background:#252525;stroke:#252525}.Greys.q0-9{fill:#fff;background:#fff;stroke:#fff}.Greys.q1-9{fill:#f0f0f0;background:#f0f0f0;stroke:#f0f0f0}.Greys.q2-9{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Greys.q3-9{fill:#bdbdbd;background:#bdbdbd;stroke:#bdbdbd}.Greys.q4-9{fill:#969696;background:#969696;stroke:#969696}.Greys.q5-9{fill:#737373;background:#737373;stroke:#737373}.Greys.q6-9{fill:#525252;background:#525252;stroke:#525252}.Greys.q7-9{fill:#252525;background:#252525;stroke:#252525}.Greys.q8-9{fill:#000;background:#000;stroke:#000}.PuOr.q0-3{fill:#f1a340;background:#f1a340;stroke:#f1a340}.PuOr.q1-3{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PuOr.q2-3{fill:#998ec3;background:#998ec3;stroke:#998ec3}.PuOr.q0-4{fill:#e66101;background:#e66101;stroke:#e66101}.PuOr.q1-4{fill:#fdb863;background:#fdb863;stroke:#fdb863}.PuOr.q2-4{fill:#b2abd2;background:#b2abd2;stroke:#b2abd2}.PuOr.q3-4{fill:#5e3c99;background:#5e3c99;stroke:#5e3c99}.PuOr.q0-5{fill:#e66101;background:#e66101;stroke:#e66101}.PuOr.q1-5{fill:#fdb863;background:#fdb863;stroke:#fdb863}.PuOr.q2-5{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PuOr.q3-5{fill:#b2abd2;background:#b2abd2;stroke:#b2abd2}.PuOr.q4-5{fill:#5e3c99;background:#5e3c99;stroke:#5e3c99}.PuOr.q0-6{fill:#b35806;background:#b35806;stroke:#b35806}.PuOr.q1-6{fill:#f1a340;background:#f1a340;stroke:#f1a340}.PuOr.q2-6{fill:#fee0b6;background:#fee0b6;stroke:#fee0b6}.PuOr.q3-6{fill:#d8daeb;background:#d8daeb;stroke:#d8daeb}.PuOr.q4-6{fill:#998ec3;background:#998ec3;stroke:#998ec3}.PuOr.q5-6{fill:#542788;background:#542788;stroke:#542788}.PuOr.q0-7{fill:#b35806;background:#b35806;stroke:#b35806}.PuOr.q1-7{fill:#f1a340;background:#f1a340;stroke:#f1a340}.PuOr.q2-7{fill:#fee0b6;background:#fee0b6;stroke:#fee0b6}.PuOr.q3-7{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PuOr.q4-7{fill:#d8daeb;background:#d8daeb;stroke:#d8daeb}.PuOr.q5-7{fill:#998ec3;background:#998ec3;stroke:#998ec3}.PuOr.q6-7{fill:#542788;background:#542788;stroke:#542788}.PuOr.q0-8{fill:#b35806;background:#b35806;stroke:#b35806}.PuOr.q1-8{fill:#e08214;background:#e08214;stroke:#e08214}.PuOr.q2-8{fill:#fdb863;background:#fdb863;stroke:#fdb863}.PuOr.q3-8{fill:#fee0b6;background:#fee0b6;stroke:#fee0b6}.PuOr.q4-8{fill:#d8daeb;background:#d8daeb;stroke:#d8daeb}.PuOr.q5-8{fill:#b2abd2;background:#b2abd2;stroke:#b2abd2}.PuOr.q6-8{fill:#8073ac;background:#8073ac;stroke:#8073ac}.PuOr.q7-8{fill:#542788;background:#542788;stroke:#542788}.PuOr.q0-9{fill:#b35806;background:#b35806;stroke:#b35806}.PuOr.q1-9{fill:#e08214;background:#e08214;stroke:#e08214}.PuOr.q2-9{fill:#fdb863;background:#fdb863;stroke:#fdb863}.PuOr.q3-9{fill:#fee0b6;background:#fee0b6;stroke:#fee0b6}.PuOr.q4-9{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PuOr.q5-9{fill:#d8daeb;background:#d8daeb;stroke:#d8daeb}.PuOr.q6-9{fill:#b2abd2;background:#b2abd2;stroke:#b2abd2}.PuOr.q7-9{fill:#8073ac;background:#8073ac;stroke:#8073ac}.PuOr.q8-9{fill:#542788;background:#542788;stroke:#542788}.PuOr.q0-10{fill:#7f3b08;background:#7f3b08;stroke:#7f3b08}.PuOr.q1-10{fill:#b35806;background:#b35806;stroke:#b35806}.PuOr.q2-10{fill:#e08214;background:#e08214;stroke:#e08214}.PuOr.q3-10{fill:#fdb863;background:#fdb863;stroke:#fdb863}.PuOr.q4-10{fill:#fee0b6;background:#fee0b6;stroke:#fee0b6}.PuOr.q5-10{fill:#d8daeb;background:#d8daeb;stroke:#d8daeb}.PuOr.q6-10{fill:#b2abd2;background:#b2abd2;stroke:#b2abd2}.PuOr.q7-10{fill:#8073ac;background:#8073ac;stroke:#8073ac}.PuOr.q8-10{fill:#542788;background:#542788;stroke:#542788}.PuOr.q9-10{fill:#2d004b;background:#2d004b;stroke:#2d004b}.PuOr.q0-11{fill:#7f3b08;background:#7f3b08;stroke:#7f3b08}.PuOr.q1-11{fill:#b35806;background:#b35806;stroke:#b35806}.PuOr.q2-11{fill:#e08214;background:#e08214;stroke:#e08214}.PuOr.q3-11{fill:#fdb863;background:#fdb863;stroke:#fdb863}.PuOr.q4-11{fill:#fee0b6;background:#fee0b6;stroke:#fee0b6}.PuOr.q5-11{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PuOr.q6-11{fill:#d8daeb;background:#d8daeb;stroke:#d8daeb}.PuOr.q7-11{fill:#b2abd2;background:#b2abd2;stroke:#b2abd2}.PuOr.q8-11{fill:#8073ac;background:#8073ac;stroke:#8073ac}.PuOr.q9-11{fill:#542788;background:#542788;stroke:#542788}.PuOr.q10-11{fill:#2d004b;background:#2d004b;stroke:#2d004b}.BrBG.q0-3{fill:#d8b365;background:#d8b365;stroke:#d8b365}.BrBG.q1-3{fill:#f5f5f5;background:#f5f5f5;stroke:#f5f5f5}.BrBG.q2-3{fill:#5ab4ac;background:#5ab4ac;stroke:#5ab4ac}.BrBG.q0-4{fill:#a6611a;background:#a6611a;stroke:#a6611a}.BrBG.q1-4{fill:#dfc27d;background:#dfc27d;stroke:#dfc27d}.BrBG.q2-4{fill:#80cdc1;background:#80cdc1;stroke:#80cdc1}.BrBG.q3-4{fill:#018571;background:#018571;stroke:#018571}.BrBG.q0-5{fill:#a6611a;background:#a6611a;stroke:#a6611a}.BrBG.q1-5{fill:#dfc27d;background:#dfc27d;stroke:#dfc27d}.BrBG.q2-5{fill:#f5f5f5;background:#f5f5f5;stroke:#f5f5f5}.BrBG.q3-5{fill:#80cdc1;background:#80cdc1;stroke:#80cdc1}.BrBG.q4-5{fill:#018571;background:#018571;stroke:#018571}.BrBG.q0-6{fill:#8c510a;background:#8c510a;stroke:#8c510a}.BrBG.q1-6{fill:#d8b365;background:#d8b365;stroke:#d8b365}.BrBG.q2-6{fill:#f6e8c3;background:#f6e8c3;stroke:#f6e8c3}.BrBG.q3-6{fill:#c7eae5;background:#c7eae5;stroke:#c7eae5}.BrBG.q4-6{fill:#5ab4ac;background:#5ab4ac;stroke:#5ab4ac}.BrBG.q5-6{fill:#01665e;background:#01665e;stroke:#01665e}.BrBG.q0-7{fill:#8c510a;background:#8c510a;stroke:#8c510a}.BrBG.q1-7{fill:#d8b365;background:#d8b365;stroke:#d8b365}.BrBG.q2-7{fill:#f6e8c3;background:#f6e8c3;stroke:#f6e8c3}.BrBG.q3-7{fill:#f5f5f5;background:#f5f5f5;stroke:#f5f5f5}.BrBG.q4-7{fill:#c7eae5;background:#c7eae5;stroke:#c7eae5}.BrBG.q5-7{fill:#5ab4ac;background:#5ab4ac;stroke:#5ab4ac}.BrBG.q6-7{fill:#01665e;background:#01665e;stroke:#01665e}.BrBG.q0-8{fill:#8c510a;background:#8c510a;stroke:#8c510a}.BrBG.q1-8{fill:#bf812d;background:#bf812d;stroke:#bf812d}.BrBG.q2-8{fill:#dfc27d;background:#dfc27d;stroke:#dfc27d}.BrBG.q3-8{fill:#f6e8c3;background:#f6e8c3;stroke:#f6e8c3}.BrBG.q4-8{fill:#c7eae5;background:#c7eae5;stroke:#c7eae5}.BrBG.q5-8{fill:#80cdc1;background:#80cdc1;stroke:#80cdc1}.BrBG.q6-8{fill:#35978f;background:#35978f;stroke:#35978f}.BrBG.q7-8{fill:#01665e;background:#01665e;stroke:#01665e}.BrBG.q0-9{fill:#8c510a;background:#8c510a;stroke:#8c510a}.BrBG.q1-9{fill:#bf812d;background:#bf812d;stroke:#bf812d}.BrBG.q2-9{fill:#dfc27d;background:#dfc27d;stroke:#dfc27d}.BrBG.q3-9{fill:#f6e8c3;background:#f6e8c3;stroke:#f6e8c3}.BrBG.q4-9{fill:#f5f5f5;background:#f5f5f5;stroke:#f5f5f5}.BrBG.q5-9{fill:#c7eae5;background:#c7eae5;stroke:#c7eae5}.BrBG.q6-9{fill:#80cdc1;background:#80cdc1;stroke:#80cdc1}.BrBG.q7-9{fill:#35978f;background:#35978f;stroke:#35978f}.BrBG.q8-9{fill:#01665e;background:#01665e;stroke:#01665e}.BrBG.q0-10{fill:#543005;background:#543005;stroke:#543005}.BrBG.q1-10{fill:#8c510a;background:#8c510a;stroke:#8c510a}.BrBG.q2-10{fill:#bf812d;background:#bf812d;stroke:#bf812d}.BrBG.q3-10{fill:#dfc27d;background:#dfc27d;stroke:#dfc27d}.BrBG.q4-10{fill:#f6e8c3;background:#f6e8c3;stroke:#f6e8c3}.BrBG.q5-10{fill:#c7eae5;background:#c7eae5;stroke:#c7eae5}.BrBG.q6-10{fill:#80cdc1;background:#80cdc1;stroke:#80cdc1}.BrBG.q7-10{fill:#35978f;background:#35978f;stroke:#35978f}.BrBG.q8-10{fill:#01665e;background:#01665e;stroke:#01665e}.BrBG.q9-10{fill:#003c30;background:#003c30;stroke:#003c30}.BrBG.q0-11{fill:#543005;background:#543005;stroke:#543005}.BrBG.q1-11{fill:#8c510a;background:#8c510a;stroke:#8c510a}.BrBG.q2-11{fill:#bf812d;background:#bf812d;stroke:#bf812d}.BrBG.q3-11{fill:#dfc27d;background:#dfc27d;stroke:#dfc27d}.BrBG.q4-11{fill:#f6e8c3;background:#f6e8c3;stroke:#f6e8c3}.BrBG.q5-11{fill:#f5f5f5;background:#f5f5f5;stroke:#f5f5f5}.BrBG.q6-11{fill:#c7eae5;background:#c7eae5;stroke:#c7eae5}.BrBG.q7-11{fill:#80cdc1;background:#80cdc1;stroke:#80cdc1}.BrBG.q8-11{fill:#35978f;background:#35978f;stroke:#35978f}.BrBG.q9-11{fill:#01665e;background:#01665e;stroke:#01665e}.BrBG.q10-11{fill:#003c30;background:#003c30;stroke:#003c30}.PRGn.q0-3{fill:#af8dc3;background:#af8dc3;stroke:#af8dc3}.PRGn.q1-3{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PRGn.q2-3{fill:#7fbf7b;background:#7fbf7b;stroke:#7fbf7b}.PRGn.q0-4{fill:#7b3294;background:#7b3294;stroke:#7b3294}.PRGn.q1-4{fill:#c2a5cf;background:#c2a5cf;stroke:#c2a5cf}.PRGn.q2-4{fill:#a6dba0;background:#a6dba0;stroke:#a6dba0}.PRGn.q3-4{fill:#008837;background:#008837;stroke:#008837}.PRGn.q0-5{fill:#7b3294;background:#7b3294;stroke:#7b3294}.PRGn.q1-5{fill:#c2a5cf;background:#c2a5cf;stroke:#c2a5cf}.PRGn.q2-5{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PRGn.q3-5{fill:#a6dba0;background:#a6dba0;stroke:#a6dba0}.PRGn.q4-5{fill:#008837;background:#008837;stroke:#008837}.PRGn.q0-6{fill:#762a83;background:#762a83;stroke:#762a83}.PRGn.q1-6{fill:#af8dc3;background:#af8dc3;stroke:#af8dc3}.PRGn.q2-6{fill:#e7d4e8;background:#e7d4e8;stroke:#e7d4e8}.PRGn.q3-6{fill:#d9f0d3;background:#d9f0d3;stroke:#d9f0d3}.PRGn.q4-6{fill:#7fbf7b;background:#7fbf7b;stroke:#7fbf7b}.PRGn.q5-6{fill:#1b7837;background:#1b7837;stroke:#1b7837}.PRGn.q0-7{fill:#762a83;background:#762a83;stroke:#762a83}.PRGn.q1-7{fill:#af8dc3;background:#af8dc3;stroke:#af8dc3}.PRGn.q2-7{fill:#e7d4e8;background:#e7d4e8;stroke:#e7d4e8}.PRGn.q3-7{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PRGn.q4-7{fill:#d9f0d3;background:#d9f0d3;stroke:#d9f0d3}.PRGn.q5-7{fill:#7fbf7b;background:#7fbf7b;stroke:#7fbf7b}.PRGn.q6-7{fill:#1b7837;background:#1b7837;stroke:#1b7837}.PRGn.q0-8{fill:#762a83;background:#762a83;stroke:#762a83}.PRGn.q1-8{fill:#9970ab;background:#9970ab;stroke:#9970ab}.PRGn.q2-8{fill:#c2a5cf;background:#c2a5cf;stroke:#c2a5cf}.PRGn.q3-8{fill:#e7d4e8;background:#e7d4e8;stroke:#e7d4e8}.PRGn.q4-8{fill:#d9f0d3;background:#d9f0d3;stroke:#d9f0d3}.PRGn.q5-8{fill:#a6dba0;background:#a6dba0;stroke:#a6dba0}.PRGn.q6-8{fill:#5aae61;background:#5aae61;stroke:#5aae61}.PRGn.q7-8{fill:#1b7837;background:#1b7837;stroke:#1b7837}.PRGn.q0-9{fill:#762a83;background:#762a83;stroke:#762a83}.PRGn.q1-9{fill:#9970ab;background:#9970ab;stroke:#9970ab}.PRGn.q2-9{fill:#c2a5cf;background:#c2a5cf;stroke:#c2a5cf}.PRGn.q3-9{fill:#e7d4e8;background:#e7d4e8;stroke:#e7d4e8}.PRGn.q4-9{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PRGn.q5-9{fill:#d9f0d3;background:#d9f0d3;stroke:#d9f0d3}.PRGn.q6-9{fill:#a6dba0;background:#a6dba0;stroke:#a6dba0}.PRGn.q7-9{fill:#5aae61;background:#5aae61;stroke:#5aae61}.PRGn.q8-9{fill:#1b7837;background:#1b7837;stroke:#1b7837}.PRGn.q0-10{fill:#40004b;background:#40004b;stroke:#40004b}.PRGn.q1-10{fill:#762a83;background:#762a83;stroke:#762a83}.PRGn.q2-10{fill:#9970ab;background:#9970ab;stroke:#9970ab}.PRGn.q3-10{fill:#c2a5cf;background:#c2a5cf;stroke:#c2a5cf}.PRGn.q4-10{fill:#e7d4e8;background:#e7d4e8;stroke:#e7d4e8}.PRGn.q5-10{fill:#d9f0d3;background:#d9f0d3;stroke:#d9f0d3}.PRGn.q6-10{fill:#a6dba0;background:#a6dba0;stroke:#a6dba0}.PRGn.q7-10{fill:#5aae61;background:#5aae61;stroke:#5aae61}.PRGn.q8-10{fill:#1b7837;background:#1b7837;stroke:#1b7837}.PRGn.q9-10{fill:#00441b;background:#00441b;stroke:#00441b}.PRGn.q0-11{fill:#40004b;background:#40004b;stroke:#40004b}.PRGn.q1-11{fill:#762a83;background:#762a83;stroke:#762a83}.PRGn.q2-11{fill:#9970ab;background:#9970ab;stroke:#9970ab}.PRGn.q3-11{fill:#c2a5cf;background:#c2a5cf;stroke:#c2a5cf}.PRGn.q4-11{fill:#e7d4e8;background:#e7d4e8;stroke:#e7d4e8}.PRGn.q5-11{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PRGn.q6-11{fill:#d9f0d3;background:#d9f0d3;stroke:#d9f0d3}.PRGn.q7-11{fill:#a6dba0;background:#a6dba0;stroke:#a6dba0}.PRGn.q8-11{fill:#5aae61;background:#5aae61;stroke:#5aae61}.PRGn.q9-11{fill:#1b7837;background:#1b7837;stroke:#1b7837}.PRGn.q10-11{fill:#00441b;background:#00441b;stroke:#00441b}.PiYG.q0-3{fill:#e9a3c9;background:#e9a3c9;stroke:#e9a3c9}.PiYG.q1-3{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PiYG.q2-3{fill:#a1d76a;background:#a1d76a;stroke:#a1d76a}.PiYG.q0-4{fill:#d01c8b;background:#d01c8b;stroke:#d01c8b}.PiYG.q1-4{fill:#f1b6da;background:#f1b6da;stroke:#f1b6da}.PiYG.q2-4{fill:#b8e186;background:#b8e186;stroke:#b8e186}.PiYG.q3-4{fill:#4dac26;background:#4dac26;stroke:#4dac26}.PiYG.q0-5{fill:#d01c8b;background:#d01c8b;stroke:#d01c8b}.PiYG.q1-5{fill:#f1b6da;background:#f1b6da;stroke:#f1b6da}.PiYG.q2-5{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PiYG.q3-5{fill:#b8e186;background:#b8e186;stroke:#b8e186}.PiYG.q4-5{fill:#4dac26;background:#4dac26;stroke:#4dac26}.PiYG.q0-6{fill:#c51b7d;background:#c51b7d;stroke:#c51b7d}.PiYG.q1-6{fill:#e9a3c9;background:#e9a3c9;stroke:#e9a3c9}.PiYG.q2-6{fill:#fde0ef;background:#fde0ef;stroke:#fde0ef}.PiYG.q3-6{fill:#e6f5d0;background:#e6f5d0;stroke:#e6f5d0}.PiYG.q4-6{fill:#a1d76a;background:#a1d76a;stroke:#a1d76a}.PiYG.q5-6{fill:#4d9221;background:#4d9221;stroke:#4d9221}.PiYG.q0-7{fill:#c51b7d;background:#c51b7d;stroke:#c51b7d}.PiYG.q1-7{fill:#e9a3c9;background:#e9a3c9;stroke:#e9a3c9}.PiYG.q2-7{fill:#fde0ef;background:#fde0ef;stroke:#fde0ef}.PiYG.q3-7{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PiYG.q4-7{fill:#e6f5d0;background:#e6f5d0;stroke:#e6f5d0}.PiYG.q5-7{fill:#a1d76a;background:#a1d76a;stroke:#a1d76a}.PiYG.q6-7{fill:#4d9221;background:#4d9221;stroke:#4d9221}.PiYG.q0-8{fill:#c51b7d;background:#c51b7d;stroke:#c51b7d}.PiYG.q1-8{fill:#de77ae;background:#de77ae;stroke:#de77ae}.PiYG.q2-8{fill:#f1b6da;background:#f1b6da;stroke:#f1b6da}.PiYG.q3-8{fill:#fde0ef;background:#fde0ef;stroke:#fde0ef}.PiYG.q4-8{fill:#e6f5d0;background:#e6f5d0;stroke:#e6f5d0}.PiYG.q5-8{fill:#b8e186;background:#b8e186;stroke:#b8e186}.PiYG.q6-8{fill:#7fbc41;background:#7fbc41;stroke:#7fbc41}.PiYG.q7-8{fill:#4d9221;background:#4d9221;stroke:#4d9221}.PiYG.q0-9{fill:#c51b7d;background:#c51b7d;stroke:#c51b7d}.PiYG.q1-9{fill:#de77ae;background:#de77ae;stroke:#de77ae}.PiYG.q2-9{fill:#f1b6da;background:#f1b6da;stroke:#f1b6da}.PiYG.q3-9{fill:#fde0ef;background:#fde0ef;stroke:#fde0ef}.PiYG.q4-9{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PiYG.q5-9{fill:#e6f5d0;background:#e6f5d0;stroke:#e6f5d0}.PiYG.q6-9{fill:#b8e186;background:#b8e186;stroke:#b8e186}.PiYG.q7-9{fill:#7fbc41;background:#7fbc41;stroke:#7fbc41}.PiYG.q8-9{fill:#4d9221;background:#4d9221;stroke:#4d9221}.PiYG.q0-10{fill:#8e0152;background:#8e0152;stroke:#8e0152}.PiYG.q1-10{fill:#c51b7d;background:#c51b7d;stroke:#c51b7d}.PiYG.q2-10{fill:#de77ae;background:#de77ae;stroke:#de77ae}.PiYG.q3-10{fill:#f1b6da;background:#f1b6da;stroke:#f1b6da}.PiYG.q4-10{fill:#fde0ef;background:#fde0ef;stroke:#fde0ef}.PiYG.q5-10{fill:#e6f5d0;background:#e6f5d0;stroke:#e6f5d0}.PiYG.q6-10{fill:#b8e186;background:#b8e186;stroke:#b8e186}.PiYG.q7-10{fill:#7fbc41;background:#7fbc41;stroke:#7fbc41}.PiYG.q8-10{fill:#4d9221;background:#4d9221;stroke:#4d9221}.PiYG.q9-10{fill:#276419;background:#276419;stroke:#276419}.PiYG.q0-11{fill:#8e0152;background:#8e0152;stroke:#8e0152}.PiYG.q1-11{fill:#c51b7d;background:#c51b7d;stroke:#c51b7d}.PiYG.q2-11{fill:#de77ae;background:#de77ae;stroke:#de77ae}.PiYG.q3-11{fill:#f1b6da;background:#f1b6da;stroke:#f1b6da}.PiYG.q4-11{fill:#fde0ef;background:#fde0ef;stroke:#fde0ef}.PiYG.q5-11{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.PiYG.q6-11{fill:#e6f5d0;background:#e6f5d0;stroke:#e6f5d0}.PiYG.q7-11{fill:#b8e186;background:#b8e186;stroke:#b8e186}.PiYG.q8-11{fill:#7fbc41;background:#7fbc41;stroke:#7fbc41}.PiYG.q9-11{fill:#4d9221;background:#4d9221;stroke:#4d9221}.PiYG.q10-11{fill:#276419;background:#276419;stroke:#276419}.RdBu.q0-3{fill:#ef8a62;background:#ef8a62;stroke:#ef8a62}.RdBu.q1-3{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.RdBu.q2-3{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.RdBu.q0-4{fill:#ca0020;background:#ca0020;stroke:#ca0020}.RdBu.q1-4{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdBu.q2-4{fill:#92c5de;background:#92c5de;stroke:#92c5de}.RdBu.q3-4{fill:#0571b0;background:#0571b0;stroke:#0571b0}.RdBu.q0-5{fill:#ca0020;background:#ca0020;stroke:#ca0020}.RdBu.q1-5{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdBu.q2-5{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.RdBu.q3-5{fill:#92c5de;background:#92c5de;stroke:#92c5de}.RdBu.q4-5{fill:#0571b0;background:#0571b0;stroke:#0571b0}.RdBu.q0-6{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdBu.q1-6{fill:#ef8a62;background:#ef8a62;stroke:#ef8a62}.RdBu.q2-6{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdBu.q3-6{fill:#d1e5f0;background:#d1e5f0;stroke:#d1e5f0}.RdBu.q4-6{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.RdBu.q5-6{fill:#2166ac;background:#2166ac;stroke:#2166ac}.RdBu.q0-7{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdBu.q1-7{fill:#ef8a62;background:#ef8a62;stroke:#ef8a62}.RdBu.q2-7{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdBu.q3-7{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.RdBu.q4-7{fill:#d1e5f0;background:#d1e5f0;stroke:#d1e5f0}.RdBu.q5-7{fill:#67a9cf;background:#67a9cf;stroke:#67a9cf}.RdBu.q6-7{fill:#2166ac;background:#2166ac;stroke:#2166ac}.RdBu.q0-8{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdBu.q1-8{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdBu.q2-8{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdBu.q3-8{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdBu.q4-8{fill:#d1e5f0;background:#d1e5f0;stroke:#d1e5f0}.RdBu.q5-8{fill:#92c5de;background:#92c5de;stroke:#92c5de}.RdBu.q6-8{fill:#4393c3;background:#4393c3;stroke:#4393c3}.RdBu.q7-8{fill:#2166ac;background:#2166ac;stroke:#2166ac}.RdBu.q0-9{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdBu.q1-9{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdBu.q2-9{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdBu.q3-9{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdBu.q4-9{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.RdBu.q5-9{fill:#d1e5f0;background:#d1e5f0;stroke:#d1e5f0}.RdBu.q6-9{fill:#92c5de;background:#92c5de;stroke:#92c5de}.RdBu.q7-9{fill:#4393c3;background:#4393c3;stroke:#4393c3}.RdBu.q8-9{fill:#2166ac;background:#2166ac;stroke:#2166ac}.RdBu.q0-10{fill:#67001f;background:#67001f;stroke:#67001f}.RdBu.q1-10{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdBu.q2-10{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdBu.q3-10{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdBu.q4-10{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdBu.q5-10{fill:#d1e5f0;background:#d1e5f0;stroke:#d1e5f0}.RdBu.q6-10{fill:#92c5de;background:#92c5de;stroke:#92c5de}.RdBu.q7-10{fill:#4393c3;background:#4393c3;stroke:#4393c3}.RdBu.q8-10{fill:#2166ac;background:#2166ac;stroke:#2166ac}.RdBu.q9-10{fill:#053061;background:#053061;stroke:#053061}.RdBu.q0-11{fill:#67001f;background:#67001f;stroke:#67001f}.RdBu.q1-11{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdBu.q2-11{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdBu.q3-11{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdBu.q4-11{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdBu.q5-11{fill:#f7f7f7;background:#f7f7f7;stroke:#f7f7f7}.RdBu.q6-11{fill:#d1e5f0;background:#d1e5f0;stroke:#d1e5f0}.RdBu.q7-11{fill:#92c5de;background:#92c5de;stroke:#92c5de}.RdBu.q8-11{fill:#4393c3;background:#4393c3;stroke:#4393c3}.RdBu.q9-11{fill:#2166ac;background:#2166ac;stroke:#2166ac}.RdBu.q10-11{fill:#053061;background:#053061;stroke:#053061}.RdGy.q0-3{fill:#ef8a62;background:#ef8a62;stroke:#ef8a62}.RdGy.q1-3{fill:#fff;background:#fff;stroke:#fff}.RdGy.q2-3{fill:#999;background:#999;stroke:#999}.RdGy.q0-4{fill:#ca0020;background:#ca0020;stroke:#ca0020}.RdGy.q1-4{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdGy.q2-4{fill:#bababa;background:#bababa;stroke:#bababa}.RdGy.q3-4{fill:#404040;background:#404040;stroke:#404040}.RdGy.q0-5{fill:#ca0020;background:#ca0020;stroke:#ca0020}.RdGy.q1-5{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdGy.q2-5{fill:#fff;background:#fff;stroke:#fff}.RdGy.q3-5{fill:#bababa;background:#bababa;stroke:#bababa}.RdGy.q4-5{fill:#404040;background:#404040;stroke:#404040}.RdGy.q0-6{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdGy.q1-6{fill:#ef8a62;background:#ef8a62;stroke:#ef8a62}.RdGy.q2-6{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdGy.q3-6{fill:#e0e0e0;background:#e0e0e0;stroke:#e0e0e0}.RdGy.q4-6{fill:#999;background:#999;stroke:#999}.RdGy.q5-6{fill:#4d4d4d;background:#4d4d4d;stroke:#4d4d4d}.RdGy.q0-7{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdGy.q1-7{fill:#ef8a62;background:#ef8a62;stroke:#ef8a62}.RdGy.q2-7{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdGy.q3-7{fill:#fff;background:#fff;stroke:#fff}.RdGy.q4-7{fill:#e0e0e0;background:#e0e0e0;stroke:#e0e0e0}.RdGy.q5-7{fill:#999;background:#999;stroke:#999}.RdGy.q6-7{fill:#4d4d4d;background:#4d4d4d;stroke:#4d4d4d}.RdGy.q0-8{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdGy.q1-8{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdGy.q2-8{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdGy.q3-8{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdGy.q4-8{fill:#e0e0e0;background:#e0e0e0;stroke:#e0e0e0}.RdGy.q5-8{fill:#bababa;background:#bababa;stroke:#bababa}.RdGy.q6-8{fill:#878787;background:#878787;stroke:#878787}.RdGy.q7-8{fill:#4d4d4d;background:#4d4d4d;stroke:#4d4d4d}.RdGy.q0-9{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdGy.q1-9{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdGy.q2-9{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdGy.q3-9{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdGy.q4-9{fill:#fff;background:#fff;stroke:#fff}.RdGy.q5-9{fill:#e0e0e0;background:#e0e0e0;stroke:#e0e0e0}.RdGy.q6-9{fill:#bababa;background:#bababa;stroke:#bababa}.RdGy.q7-9{fill:#878787;background:#878787;stroke:#878787}.RdGy.q8-9{fill:#4d4d4d;background:#4d4d4d;stroke:#4d4d4d}.RdGy.q0-10{fill:#67001f;background:#67001f;stroke:#67001f}.RdGy.q1-10{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdGy.q2-10{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdGy.q3-10{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdGy.q4-10{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdGy.q5-10{fill:#e0e0e0;background:#e0e0e0;stroke:#e0e0e0}.RdGy.q6-10{fill:#bababa;background:#bababa;stroke:#bababa}.RdGy.q7-10{fill:#878787;background:#878787;stroke:#878787}.RdGy.q8-10{fill:#4d4d4d;background:#4d4d4d;stroke:#4d4d4d}.RdGy.q9-10{fill:#1a1a1a;background:#1a1a1a;stroke:#1a1a1a}.RdGy.q0-11{fill:#67001f;background:#67001f;stroke:#67001f}.RdGy.q1-11{fill:#b2182b;background:#b2182b;stroke:#b2182b}.RdGy.q2-11{fill:#d6604d;background:#d6604d;stroke:#d6604d}.RdGy.q3-11{fill:#f4a582;background:#f4a582;stroke:#f4a582}.RdGy.q4-11{fill:#fddbc7;background:#fddbc7;stroke:#fddbc7}.RdGy.q5-11{fill:#fff;background:#fff;stroke:#fff}.RdGy.q6-11{fill:#e0e0e0;background:#e0e0e0;stroke:#e0e0e0}.RdGy.q7-11{fill:#bababa;background:#bababa;stroke:#bababa}.RdGy.q8-11{fill:#878787;background:#878787;stroke:#878787}.RdGy.q9-11{fill:#4d4d4d;background:#4d4d4d;stroke:#4d4d4d}.RdGy.q10-11{fill:#1a1a1a;background:#1a1a1a;stroke:#1a1a1a}.RdYlBu.q0-3{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.RdYlBu.q1-3{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlBu.q2-3{fill:#91bfdb;background:#91bfdb;stroke:#91bfdb}.RdYlBu.q0-4{fill:#d7191c;background:#d7191c;stroke:#d7191c}.RdYlBu.q1-4{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlBu.q2-4{fill:#abd9e9;background:#abd9e9;stroke:#abd9e9}.RdYlBu.q3-4{fill:#2c7bb6;background:#2c7bb6;stroke:#2c7bb6}.RdYlBu.q0-5{fill:#d7191c;background:#d7191c;stroke:#d7191c}.RdYlBu.q1-5{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlBu.q2-5{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlBu.q3-5{fill:#abd9e9;background:#abd9e9;stroke:#abd9e9}.RdYlBu.q4-5{fill:#2c7bb6;background:#2c7bb6;stroke:#2c7bb6}.RdYlBu.q0-6{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlBu.q1-6{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.RdYlBu.q2-6{fill:#fee090;background:#fee090;stroke:#fee090}.RdYlBu.q3-6{fill:#e0f3f8;background:#e0f3f8;stroke:#e0f3f8}.RdYlBu.q4-6{fill:#91bfdb;background:#91bfdb;stroke:#91bfdb}.RdYlBu.q5-6{fill:#4575b4;background:#4575b4;stroke:#4575b4}.RdYlBu.q0-7{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlBu.q1-7{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.RdYlBu.q2-7{fill:#fee090;background:#fee090;stroke:#fee090}.RdYlBu.q3-7{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlBu.q4-7{fill:#e0f3f8;background:#e0f3f8;stroke:#e0f3f8}.RdYlBu.q5-7{fill:#91bfdb;background:#91bfdb;stroke:#91bfdb}.RdYlBu.q6-7{fill:#4575b4;background:#4575b4;stroke:#4575b4}.RdYlBu.q0-8{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlBu.q1-8{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlBu.q2-8{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlBu.q3-8{fill:#fee090;background:#fee090;stroke:#fee090}.RdYlBu.q4-8{fill:#e0f3f8;background:#e0f3f8;stroke:#e0f3f8}.RdYlBu.q5-8{fill:#abd9e9;background:#abd9e9;stroke:#abd9e9}.RdYlBu.q6-8{fill:#74add1;background:#74add1;stroke:#74add1}.RdYlBu.q7-8{fill:#4575b4;background:#4575b4;stroke:#4575b4}.RdYlBu.q0-9{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlBu.q1-9{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlBu.q2-9{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlBu.q3-9{fill:#fee090;background:#fee090;stroke:#fee090}.RdYlBu.q4-9{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlBu.q5-9{fill:#e0f3f8;background:#e0f3f8;stroke:#e0f3f8}.RdYlBu.q6-9{fill:#abd9e9;background:#abd9e9;stroke:#abd9e9}.RdYlBu.q7-9{fill:#74add1;background:#74add1;stroke:#74add1}.RdYlBu.q8-9{fill:#4575b4;background:#4575b4;stroke:#4575b4}.RdYlBu.q0-10{fill:#a50026;background:#a50026;stroke:#a50026}.RdYlBu.q1-10{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlBu.q2-10{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlBu.q3-10{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlBu.q4-10{fill:#fee090;background:#fee090;stroke:#fee090}.RdYlBu.q5-10{fill:#e0f3f8;background:#e0f3f8;stroke:#e0f3f8}.RdYlBu.q6-10{fill:#abd9e9;background:#abd9e9;stroke:#abd9e9}.RdYlBu.q7-10{fill:#74add1;background:#74add1;stroke:#74add1}.RdYlBu.q8-10{fill:#4575b4;background:#4575b4;stroke:#4575b4}.RdYlBu.q9-10{fill:#313695;background:#313695;stroke:#313695}.RdYlBu.q0-11{fill:#a50026;background:#a50026;stroke:#a50026}.RdYlBu.q1-11{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlBu.q2-11{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlBu.q3-11{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlBu.q4-11{fill:#fee090;background:#fee090;stroke:#fee090}.RdYlBu.q5-11{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlBu.q6-11{fill:#e0f3f8;background:#e0f3f8;stroke:#e0f3f8}.RdYlBu.q7-11{fill:#abd9e9;background:#abd9e9;stroke:#abd9e9}.RdYlBu.q8-11{fill:#74add1;background:#74add1;stroke:#74add1}.RdYlBu.q9-11{fill:#4575b4;background:#4575b4;stroke:#4575b4}.RdYlBu.q10-11{fill:#313695;background:#313695;stroke:#313695}.Spectral.q0-3{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.Spectral.q1-3{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.Spectral.q2-3{fill:#99d594;background:#99d594;stroke:#99d594}.Spectral.q0-4{fill:#d7191c;background:#d7191c;stroke:#d7191c}.Spectral.q1-4{fill:#fdae61;background:#fdae61;stroke:#fdae61}.Spectral.q2-4{fill:#abdda4;background:#abdda4;stroke:#abdda4}.Spectral.q3-4{fill:#2b83ba;background:#2b83ba;stroke:#2b83ba}.Spectral.q0-5{fill:#d7191c;background:#d7191c;stroke:#d7191c}.Spectral.q1-5{fill:#fdae61;background:#fdae61;stroke:#fdae61}.Spectral.q2-5{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.Spectral.q3-5{fill:#abdda4;background:#abdda4;stroke:#abdda4}.Spectral.q4-5{fill:#2b83ba;background:#2b83ba;stroke:#2b83ba}.Spectral.q0-6{fill:#d53e4f;background:#d53e4f;stroke:#d53e4f}.Spectral.q1-6{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.Spectral.q2-6{fill:#fee08b;background:#fee08b;stroke:#fee08b}.Spectral.q3-6{fill:#e6f598;background:#e6f598;stroke:#e6f598}.Spectral.q4-6{fill:#99d594;background:#99d594;stroke:#99d594}.Spectral.q5-6{fill:#3288bd;background:#3288bd;stroke:#3288bd}.Spectral.q0-7{fill:#d53e4f;background:#d53e4f;stroke:#d53e4f}.Spectral.q1-7{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.Spectral.q2-7{fill:#fee08b;background:#fee08b;stroke:#fee08b}.Spectral.q3-7{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.Spectral.q4-7{fill:#e6f598;background:#e6f598;stroke:#e6f598}.Spectral.q5-7{fill:#99d594;background:#99d594;stroke:#99d594}.Spectral.q6-7{fill:#3288bd;background:#3288bd;stroke:#3288bd}.Spectral.q0-8{fill:#d53e4f;background:#d53e4f;stroke:#d53e4f}.Spectral.q1-8{fill:#f46d43;background:#f46d43;stroke:#f46d43}.Spectral.q2-8{fill:#fdae61;background:#fdae61;stroke:#fdae61}.Spectral.q3-8{fill:#fee08b;background:#fee08b;stroke:#fee08b}.Spectral.q4-8{fill:#e6f598;background:#e6f598;stroke:#e6f598}.Spectral.q5-8{fill:#abdda4;background:#abdda4;stroke:#abdda4}.Spectral.q6-8{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Spectral.q7-8{fill:#3288bd;background:#3288bd;stroke:#3288bd}.Spectral.q0-9{fill:#d53e4f;background:#d53e4f;stroke:#d53e4f}.Spectral.q1-9{fill:#f46d43;background:#f46d43;stroke:#f46d43}.Spectral.q2-9{fill:#fdae61;background:#fdae61;stroke:#fdae61}.Spectral.q3-9{fill:#fee08b;background:#fee08b;stroke:#fee08b}.Spectral.q4-9{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.Spectral.q5-9{fill:#e6f598;background:#e6f598;stroke:#e6f598}.Spectral.q6-9{fill:#abdda4;background:#abdda4;stroke:#abdda4}.Spectral.q7-9{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Spectral.q8-9{fill:#3288bd;background:#3288bd;stroke:#3288bd}.Spectral.q0-10{fill:#9e0142;background:#9e0142;stroke:#9e0142}.Spectral.q1-10{fill:#d53e4f;background:#d53e4f;stroke:#d53e4f}.Spectral.q2-10{fill:#f46d43;background:#f46d43;stroke:#f46d43}.Spectral.q3-10{fill:#fdae61;background:#fdae61;stroke:#fdae61}.Spectral.q4-10{fill:#fee08b;background:#fee08b;stroke:#fee08b}.Spectral.q5-10{fill:#e6f598;background:#e6f598;stroke:#e6f598}.Spectral.q6-10{fill:#abdda4;background:#abdda4;stroke:#abdda4}.Spectral.q7-10{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Spectral.q8-10{fill:#3288bd;background:#3288bd;stroke:#3288bd}.Spectral.q9-10{fill:#5e4fa2;background:#5e4fa2;stroke:#5e4fa2}.Spectral.q0-11{fill:#9e0142;background:#9e0142;stroke:#9e0142}.Spectral.q1-11{fill:#d53e4f;background:#d53e4f;stroke:#d53e4f}.Spectral.q2-11{fill:#f46d43;background:#f46d43;stroke:#f46d43}.Spectral.q3-11{fill:#fdae61;background:#fdae61;stroke:#fdae61}.Spectral.q4-11{fill:#fee08b;background:#fee08b;stroke:#fee08b}.Spectral.q5-11{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.Spectral.q6-11{fill:#e6f598;background:#e6f598;stroke:#e6f598}.Spectral.q7-11{fill:#abdda4;background:#abdda4;stroke:#abdda4}.Spectral.q8-11{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Spectral.q9-11{fill:#3288bd;background:#3288bd;stroke:#3288bd}.Spectral.q10-11{fill:#5e4fa2;background:#5e4fa2;stroke:#5e4fa2}.RdYlGn.q0-3{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.RdYlGn.q1-3{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlGn.q2-3{fill:#91cf60;background:#91cf60;stroke:#91cf60}.RdYlGn.q0-4{fill:#d7191c;background:#d7191c;stroke:#d7191c}.RdYlGn.q1-4{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlGn.q2-4{fill:#a6d96a;background:#a6d96a;stroke:#a6d96a}.RdYlGn.q3-4{fill:#1a9641;background:#1a9641;stroke:#1a9641}.RdYlGn.q0-5{fill:#d7191c;background:#d7191c;stroke:#d7191c}.RdYlGn.q1-5{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlGn.q2-5{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlGn.q3-5{fill:#a6d96a;background:#a6d96a;stroke:#a6d96a}.RdYlGn.q4-5{fill:#1a9641;background:#1a9641;stroke:#1a9641}.RdYlGn.q0-6{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlGn.q1-6{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.RdYlGn.q2-6{fill:#fee08b;background:#fee08b;stroke:#fee08b}.RdYlGn.q3-6{fill:#d9ef8b;background:#d9ef8b;stroke:#d9ef8b}.RdYlGn.q4-6{fill:#91cf60;background:#91cf60;stroke:#91cf60}.RdYlGn.q5-6{fill:#1a9850;background:#1a9850;stroke:#1a9850}.RdYlGn.q0-7{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlGn.q1-7{fill:#fc8d59;background:#fc8d59;stroke:#fc8d59}.RdYlGn.q2-7{fill:#fee08b;background:#fee08b;stroke:#fee08b}.RdYlGn.q3-7{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlGn.q4-7{fill:#d9ef8b;background:#d9ef8b;stroke:#d9ef8b}.RdYlGn.q5-7{fill:#91cf60;background:#91cf60;stroke:#91cf60}.RdYlGn.q6-7{fill:#1a9850;background:#1a9850;stroke:#1a9850}.RdYlGn.q0-8{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlGn.q1-8{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlGn.q2-8{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlGn.q3-8{fill:#fee08b;background:#fee08b;stroke:#fee08b}.RdYlGn.q4-8{fill:#d9ef8b;background:#d9ef8b;stroke:#d9ef8b}.RdYlGn.q5-8{fill:#a6d96a;background:#a6d96a;stroke:#a6d96a}.RdYlGn.q6-8{fill:#66bd63;background:#66bd63;stroke:#66bd63}.RdYlGn.q7-8{fill:#1a9850;background:#1a9850;stroke:#1a9850}.RdYlGn.q0-9{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlGn.q1-9{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlGn.q2-9{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlGn.q3-9{fill:#fee08b;background:#fee08b;stroke:#fee08b}.RdYlGn.q4-9{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlGn.q5-9{fill:#d9ef8b;background:#d9ef8b;stroke:#d9ef8b}.RdYlGn.q6-9{fill:#a6d96a;background:#a6d96a;stroke:#a6d96a}.RdYlGn.q7-9{fill:#66bd63;background:#66bd63;stroke:#66bd63}.RdYlGn.q8-9{fill:#1a9850;background:#1a9850;stroke:#1a9850}.RdYlGn.q0-10{fill:#a50026;background:#a50026;stroke:#a50026}.RdYlGn.q1-10{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlGn.q2-10{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlGn.q3-10{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlGn.q4-10{fill:#fee08b;background:#fee08b;stroke:#fee08b}.RdYlGn.q5-10{fill:#d9ef8b;background:#d9ef8b;stroke:#d9ef8b}.RdYlGn.q6-10{fill:#a6d96a;background:#a6d96a;stroke:#a6d96a}.RdYlGn.q7-10{fill:#66bd63;background:#66bd63;stroke:#66bd63}.RdYlGn.q8-10{fill:#1a9850;background:#1a9850;stroke:#1a9850}.RdYlGn.q9-10{fill:#006837;background:#006837;stroke:#006837}.RdYlGn.q0-11{fill:#a50026;background:#a50026;stroke:#a50026}.RdYlGn.q1-11{fill:#d73027;background:#d73027;stroke:#d73027}.RdYlGn.q2-11{fill:#f46d43;background:#f46d43;stroke:#f46d43}.RdYlGn.q3-11{fill:#fdae61;background:#fdae61;stroke:#fdae61}.RdYlGn.q4-11{fill:#fee08b;background:#fee08b;stroke:#fee08b}.RdYlGn.q5-11{fill:#ffffbf;background:#ffffbf;stroke:#ffffbf}.RdYlGn.q6-11{fill:#d9ef8b;background:#d9ef8b;stroke:#d9ef8b}.RdYlGn.q7-11{fill:#a6d96a;background:#a6d96a;stroke:#a6d96a}.RdYlGn.q8-11{fill:#66bd63;background:#66bd63;stroke:#66bd63}.RdYlGn.q9-11{fill:#1a9850;background:#1a9850;stroke:#1a9850}.RdYlGn.q10-11{fill:#006837;background:#006837;stroke:#006837}.Accent.q0-3{fill:#7fc97f;background:#7fc97f;stroke:#7fc97f}.Accent.q1-3{fill:#beaed4;background:#beaed4;stroke:#beaed4}.Accent.q2-3{fill:#fdc086;background:#fdc086;stroke:#fdc086}.Accent.q0-4{fill:#7fc97f;background:#7fc97f;stroke:#7fc97f}.Accent.q1-4{fill:#beaed4;background:#beaed4;stroke:#beaed4}.Accent.q2-4{fill:#fdc086;background:#fdc086;stroke:#fdc086}.Accent.q3-4{fill:#ff9;background:#ff9;stroke:#ff9}.Accent.q0-5{fill:#7fc97f;background:#7fc97f;stroke:#7fc97f}.Accent.q1-5{fill:#beaed4;background:#beaed4;stroke:#beaed4}.Accent.q2-5{fill:#fdc086;background:#fdc086;stroke:#fdc086}.Accent.q3-5{fill:#ff9;background:#ff9;stroke:#ff9}.Accent.q4-5{fill:#386cb0;background:#386cb0;stroke:#386cb0}.Accent.q0-6{fill:#7fc97f;background:#7fc97f;stroke:#7fc97f}.Accent.q1-6{fill:#beaed4;background:#beaed4;stroke:#beaed4}.Accent.q2-6{fill:#fdc086;background:#fdc086;stroke:#fdc086}.Accent.q3-6{fill:#ff9;background:#ff9;stroke:#ff9}.Accent.q4-6{fill:#386cb0;background:#386cb0;stroke:#386cb0}.Accent.q5-6{fill:#f0027f;background:#f0027f;stroke:#f0027f}.Accent.q0-7{fill:#7fc97f;background:#7fc97f;stroke:#7fc97f}.Accent.q1-7{fill:#beaed4;background:#beaed4;stroke:#beaed4}.Accent.q2-7{fill:#fdc086;background:#fdc086;stroke:#fdc086}.Accent.q3-7{fill:#ff9;background:#ff9;stroke:#ff9}.Accent.q4-7{fill:#386cb0;background:#386cb0;stroke:#386cb0}.Accent.q5-7{fill:#f0027f;background:#f0027f;stroke:#f0027f}.Accent.q6-7{fill:#bf5b17;background:#bf5b17;stroke:#bf5b17}.Accent.q0-8{fill:#7fc97f;background:#7fc97f;stroke:#7fc97f}.Accent.q1-8{fill:#beaed4;background:#beaed4;stroke:#beaed4}.Accent.q2-8{fill:#fdc086;background:#fdc086;stroke:#fdc086}.Accent.q3-8{fill:#ff9;background:#ff9;stroke:#ff9}.Accent.q4-8{fill:#386cb0;background:#386cb0;stroke:#386cb0}.Accent.q5-8{fill:#f0027f;background:#f0027f;stroke:#f0027f}.Accent.q6-8{fill:#bf5b17;background:#bf5b17;stroke:#bf5b17}.Accent.q7-8{fill:#666;background:#666;stroke:#666}.Dark2.q0-3{fill:#1b9e77;background:#1b9e77;stroke:#1b9e77}.Dark2.q1-3{fill:#d95f02;background:#d95f02;stroke:#d95f02}.Dark2.q2-3{fill:#7570b3;background:#7570b3;stroke:#7570b3}.Dark2.q0-4{fill:#1b9e77;background:#1b9e77;stroke:#1b9e77}.Dark2.q1-4{fill:#d95f02;background:#d95f02;stroke:#d95f02}.Dark2.q2-4{fill:#7570b3;background:#7570b3;stroke:#7570b3}.Dark2.q3-4{fill:#e7298a;background:#e7298a;stroke:#e7298a}.Dark2.q0-5{fill:#1b9e77;background:#1b9e77;stroke:#1b9e77}.Dark2.q1-5{fill:#d95f02;background:#d95f02;stroke:#d95f02}.Dark2.q2-5{fill:#7570b3;background:#7570b3;stroke:#7570b3}.Dark2.q3-5{fill:#e7298a;background:#e7298a;stroke:#e7298a}.Dark2.q4-5{fill:#66a61e;background:#66a61e;stroke:#66a61e}.Dark2.q0-6{fill:#1b9e77;background:#1b9e77;stroke:#1b9e77}.Dark2.q1-6{fill:#d95f02;background:#d95f02;stroke:#d95f02}.Dark2.q2-6{fill:#7570b3;background:#7570b3;stroke:#7570b3}.Dark2.q3-6{fill:#e7298a;background:#e7298a;stroke:#e7298a}.Dark2.q4-6{fill:#66a61e;background:#66a61e;stroke:#66a61e}.Dark2.q5-6{fill:#e6ab02;background:#e6ab02;stroke:#e6ab02}.Dark2.q0-7{fill:#1b9e77;background:#1b9e77;stroke:#1b9e77}.Dark2.q1-7{fill:#d95f02;background:#d95f02;stroke:#d95f02}.Dark2.q2-7{fill:#7570b3;background:#7570b3;stroke:#7570b3}.Dark2.q3-7{fill:#e7298a;background:#e7298a;stroke:#e7298a}.Dark2.q4-7{fill:#66a61e;background:#66a61e;stroke:#66a61e}.Dark2.q5-7{fill:#e6ab02;background:#e6ab02;stroke:#e6ab02}.Dark2.q6-7{fill:#a6761d;background:#a6761d;stroke:#a6761d}.Dark2.q0-8{fill:#1b9e77;background:#1b9e77;stroke:#1b9e77}.Dark2.q1-8{fill:#d95f02;background:#d95f02;stroke:#d95f02}.Dark2.q2-8{fill:#7570b3;background:#7570b3;stroke:#7570b3}.Dark2.q3-8{fill:#e7298a;background:#e7298a;stroke:#e7298a}.Dark2.q4-8{fill:#66a61e;background:#66a61e;stroke:#66a61e}.Dark2.q5-8{fill:#e6ab02;background:#e6ab02;stroke:#e6ab02}.Dark2.q6-8{fill:#a6761d;background:#a6761d;stroke:#a6761d}.Dark2.q7-8{fill:#666;background:#666;stroke:#666}.Paired.q0-3{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-3{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-3{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q0-4{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-4{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-4{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-4{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q0-5{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-5{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-5{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-5{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-5{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q0-6{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-6{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-6{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-6{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-6{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-6{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q0-7{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-7{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-7{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-7{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-7{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-7{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q6-7{fill:#fdbf6f;background:#fdbf6f;stroke:#fdbf6f}.Paired.q0-8{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-8{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-8{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-8{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-8{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-8{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q6-8{fill:#fdbf6f;background:#fdbf6f;stroke:#fdbf6f}.Paired.q7-8{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Paired.q0-9{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-9{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-9{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-9{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-9{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-9{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q6-9{fill:#fdbf6f;background:#fdbf6f;stroke:#fdbf6f}.Paired.q7-9{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Paired.q8-9{fill:#cab2d6;background:#cab2d6;stroke:#cab2d6}.Paired.q0-10{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-10{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-10{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-10{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-10{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-10{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q6-10{fill:#fdbf6f;background:#fdbf6f;stroke:#fdbf6f}.Paired.q7-10{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Paired.q8-10{fill:#cab2d6;background:#cab2d6;stroke:#cab2d6}.Paired.q9-10{fill:#6a3d9a;background:#6a3d9a;stroke:#6a3d9a}.Paired.q0-11{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-11{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-11{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-11{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-11{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-11{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q6-11{fill:#fdbf6f;background:#fdbf6f;stroke:#fdbf6f}.Paired.q7-11{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Paired.q8-11{fill:#cab2d6;background:#cab2d6;stroke:#cab2d6}.Paired.q9-11{fill:#6a3d9a;background:#6a3d9a;stroke:#6a3d9a}.Paired.q10-11{fill:#ff9;background:#ff9;stroke:#ff9}.Paired.q0-12{fill:#a6cee3;background:#a6cee3;stroke:#a6cee3}.Paired.q1-12{fill:#1f78b4;background:#1f78b4;stroke:#1f78b4}.Paired.q2-12{fill:#b2df8a;background:#b2df8a;stroke:#b2df8a}.Paired.q3-12{fill:#33a02c;background:#33a02c;stroke:#33a02c}.Paired.q4-12{fill:#fb9a99;background:#fb9a99;stroke:#fb9a99}.Paired.q5-12{fill:#e31a1c;background:#e31a1c;stroke:#e31a1c}.Paired.q6-12{fill:#fdbf6f;background:#fdbf6f;stroke:#fdbf6f}.Paired.q7-12{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Paired.q8-12{fill:#cab2d6;background:#cab2d6;stroke:#cab2d6}.Paired.q9-12{fill:#6a3d9a;background:#6a3d9a;stroke:#6a3d9a}.Paired.q10-12{fill:#ff9;background:#ff9;stroke:#ff9}.Paired.q11-12{fill:#b15928;background:#b15928;stroke:#b15928}.Pastel1.q0-3{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-3{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-3{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q0-4{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-4{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-4{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q3-4{fill:#decbe4;background:#decbe4;stroke:#decbe4}.Pastel1.q0-5{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-5{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-5{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q3-5{fill:#decbe4;background:#decbe4;stroke:#decbe4}.Pastel1.q4-5{fill:#fed9a6;background:#fed9a6;stroke:#fed9a6}.Pastel1.q0-6{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-6{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-6{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q3-6{fill:#decbe4;background:#decbe4;stroke:#decbe4}.Pastel1.q4-6{fill:#fed9a6;background:#fed9a6;stroke:#fed9a6}.Pastel1.q5-6{fill:#ffc;background:#ffc;stroke:#ffc}.Pastel1.q0-7{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-7{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-7{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q3-7{fill:#decbe4;background:#decbe4;stroke:#decbe4}.Pastel1.q4-7{fill:#fed9a6;background:#fed9a6;stroke:#fed9a6}.Pastel1.q5-7{fill:#ffc;background:#ffc;stroke:#ffc}.Pastel1.q6-7{fill:#e5d8bd;background:#e5d8bd;stroke:#e5d8bd}.Pastel1.q0-8{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-8{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-8{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q3-8{fill:#decbe4;background:#decbe4;stroke:#decbe4}.Pastel1.q4-8{fill:#fed9a6;background:#fed9a6;stroke:#fed9a6}.Pastel1.q5-8{fill:#ffc;background:#ffc;stroke:#ffc}.Pastel1.q6-8{fill:#e5d8bd;background:#e5d8bd;stroke:#e5d8bd}.Pastel1.q7-8{fill:#fddaec;background:#fddaec;stroke:#fddaec}.Pastel1.q0-9{fill:#fbb4ae;background:#fbb4ae;stroke:#fbb4ae}.Pastel1.q1-9{fill:#b3cde3;background:#b3cde3;stroke:#b3cde3}.Pastel1.q2-9{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Pastel1.q3-9{fill:#decbe4;background:#decbe4;stroke:#decbe4}.Pastel1.q4-9{fill:#fed9a6;background:#fed9a6;stroke:#fed9a6}.Pastel1.q5-9{fill:#ffc;background:#ffc;stroke:#ffc}.Pastel1.q6-9{fill:#e5d8bd;background:#e5d8bd;stroke:#e5d8bd}.Pastel1.q7-9{fill:#fddaec;background:#fddaec;stroke:#fddaec}.Pastel1.q8-9{fill:#f2f2f2;background:#f2f2f2;stroke:#f2f2f2}.Pastel2.q0-3{fill:#b3e2cd;background:#b3e2cd;stroke:#b3e2cd}.Pastel2.q1-3{fill:#fdcdac;background:#fdcdac;stroke:#fdcdac}.Pastel2.q2-3{fill:#cbd5e8;background:#cbd5e8;stroke:#cbd5e8}.Pastel2.q0-4{fill:#b3e2cd;background:#b3e2cd;stroke:#b3e2cd}.Pastel2.q1-4{fill:#fdcdac;background:#fdcdac;stroke:#fdcdac}.Pastel2.q2-4{fill:#cbd5e8;background:#cbd5e8;stroke:#cbd5e8}.Pastel2.q3-4{fill:#f4cae4;background:#f4cae4;stroke:#f4cae4}.Pastel2.q0-5{fill:#b3e2cd;background:#b3e2cd;stroke:#b3e2cd}.Pastel2.q1-5{fill:#fdcdac;background:#fdcdac;stroke:#fdcdac}.Pastel2.q2-5{fill:#cbd5e8;background:#cbd5e8;stroke:#cbd5e8}.Pastel2.q3-5{fill:#f4cae4;background:#f4cae4;stroke:#f4cae4}.Pastel2.q4-5{fill:#e6f5c9;background:#e6f5c9;stroke:#e6f5c9}.Pastel2.q0-6{fill:#b3e2cd;background:#b3e2cd;stroke:#b3e2cd}.Pastel2.q1-6{fill:#fdcdac;background:#fdcdac;stroke:#fdcdac}.Pastel2.q2-6{fill:#cbd5e8;background:#cbd5e8;stroke:#cbd5e8}.Pastel2.q3-6{fill:#f4cae4;background:#f4cae4;stroke:#f4cae4}.Pastel2.q4-6{fill:#e6f5c9;background:#e6f5c9;stroke:#e6f5c9}.Pastel2.q5-6{fill:#fff2ae;background:#fff2ae;stroke:#fff2ae}.Pastel2.q0-7{fill:#b3e2cd;background:#b3e2cd;stroke:#b3e2cd}.Pastel2.q1-7{fill:#fdcdac;background:#fdcdac;stroke:#fdcdac}.Pastel2.q2-7{fill:#cbd5e8;background:#cbd5e8;stroke:#cbd5e8}.Pastel2.q3-7{fill:#f4cae4;background:#f4cae4;stroke:#f4cae4}.Pastel2.q4-7{fill:#e6f5c9;background:#e6f5c9;stroke:#e6f5c9}.Pastel2.q5-7{fill:#fff2ae;background:#fff2ae;stroke:#fff2ae}.Pastel2.q6-7{fill:#f1e2cc;background:#f1e2cc;stroke:#f1e2cc}.Pastel2.q0-8{fill:#b3e2cd;background:#b3e2cd;stroke:#b3e2cd}.Pastel2.q1-8{fill:#fdcdac;background:#fdcdac;stroke:#fdcdac}.Pastel2.q2-8{fill:#cbd5e8;background:#cbd5e8;stroke:#cbd5e8}.Pastel2.q3-8{fill:#f4cae4;background:#f4cae4;stroke:#f4cae4}.Pastel2.q4-8{fill:#e6f5c9;background:#e6f5c9;stroke:#e6f5c9}.Pastel2.q5-8{fill:#fff2ae;background:#fff2ae;stroke:#fff2ae}.Pastel2.q6-8{fill:#f1e2cc;background:#f1e2cc;stroke:#f1e2cc}.Pastel2.q7-8{fill:#ccc;background:#ccc;stroke:#ccc}.Set1.q0-3{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-3{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-3{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q0-4{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-4{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-4{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q3-4{fill:#984ea3;background:#984ea3;stroke:#984ea3}.Set1.q0-5{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-5{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-5{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q3-5{fill:#984ea3;background:#984ea3;stroke:#984ea3}.Set1.q4-5{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Set1.q0-6{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-6{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-6{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q3-6{fill:#984ea3;background:#984ea3;stroke:#984ea3}.Set1.q4-6{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Set1.q5-6{fill:#ff3;background:#ff3;stroke:#ff3}.Set1.q0-7{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-7{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-7{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q3-7{fill:#984ea3;background:#984ea3;stroke:#984ea3}.Set1.q4-7{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Set1.q5-7{fill:#ff3;background:#ff3;stroke:#ff3}.Set1.q6-7{fill:#a65628;background:#a65628;stroke:#a65628}.Set1.q0-8{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-8{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-8{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q3-8{fill:#984ea3;background:#984ea3;stroke:#984ea3}.Set1.q4-8{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Set1.q5-8{fill:#ff3;background:#ff3;stroke:#ff3}.Set1.q6-8{fill:#a65628;background:#a65628;stroke:#a65628}.Set1.q7-8{fill:#f781bf;background:#f781bf;stroke:#f781bf}.Set1.q0-9{fill:#e41a1c;background:#e41a1c;stroke:#e41a1c}.Set1.q1-9{fill:#377eb8;background:#377eb8;stroke:#377eb8}.Set1.q2-9{fill:#4daf4a;background:#4daf4a;stroke:#4daf4a}.Set1.q3-9{fill:#984ea3;background:#984ea3;stroke:#984ea3}.Set1.q4-9{fill:#ff7f00;background:#ff7f00;stroke:#ff7f00}.Set1.q5-9{fill:#ff3;background:#ff3;stroke:#ff3}.Set1.q6-9{fill:#a65628;background:#a65628;stroke:#a65628}.Set1.q7-9{fill:#f781bf;background:#f781bf;stroke:#f781bf}.Set1.q8-9{fill:#999;background:#999;stroke:#999}.Set2.q0-3{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Set2.q1-3{fill:#fc8d62;background:#fc8d62;stroke:#fc8d62}.Set2.q2-3{fill:#8da0cb;background:#8da0cb;stroke:#8da0cb}.Set2.q0-4{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Set2.q1-4{fill:#fc8d62;background:#fc8d62;stroke:#fc8d62}.Set2.q2-4{fill:#8da0cb;background:#8da0cb;stroke:#8da0cb}.Set2.q3-4{fill:#e78ac3;background:#e78ac3;stroke:#e78ac3}.Set2.q0-5{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Set2.q1-5{fill:#fc8d62;background:#fc8d62;stroke:#fc8d62}.Set2.q2-5{fill:#8da0cb;background:#8da0cb;stroke:#8da0cb}.Set2.q3-5{fill:#e78ac3;background:#e78ac3;stroke:#e78ac3}.Set2.q4-5{fill:#a6d854;background:#a6d854;stroke:#a6d854}.Set2.q0-6{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Set2.q1-6{fill:#fc8d62;background:#fc8d62;stroke:#fc8d62}.Set2.q2-6{fill:#8da0cb;background:#8da0cb;stroke:#8da0cb}.Set2.q3-6{fill:#e78ac3;background:#e78ac3;stroke:#e78ac3}.Set2.q4-6{fill:#a6d854;background:#a6d854;stroke:#a6d854}.Set2.q5-6{fill:#ffd92f;background:#ffd92f;stroke:#ffd92f}.Set2.q0-7{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Set2.q1-7{fill:#fc8d62;background:#fc8d62;stroke:#fc8d62}.Set2.q2-7{fill:#8da0cb;background:#8da0cb;stroke:#8da0cb}.Set2.q3-7{fill:#e78ac3;background:#e78ac3;stroke:#e78ac3}.Set2.q4-7{fill:#a6d854;background:#a6d854;stroke:#a6d854}.Set2.q5-7{fill:#ffd92f;background:#ffd92f;stroke:#ffd92f}.Set2.q6-7{fill:#e5c494;background:#e5c494;stroke:#e5c494}.Set2.q0-8{fill:#66c2a5;background:#66c2a5;stroke:#66c2a5}.Set2.q1-8{fill:#fc8d62;background:#fc8d62;stroke:#fc8d62}.Set2.q2-8{fill:#8da0cb;background:#8da0cb;stroke:#8da0cb}.Set2.q3-8{fill:#e78ac3;background:#e78ac3;stroke:#e78ac3}.Set2.q4-8{fill:#a6d854;background:#a6d854;stroke:#a6d854}.Set2.q5-8{fill:#ffd92f;background:#ffd92f;stroke:#ffd92f}.Set2.q6-8{fill:#e5c494;background:#e5c494;stroke:#e5c494}.Set2.q7-8{fill:#b3b3b3;background:#b3b3b3;stroke:#b3b3b3}.Set3.q0-3{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-3{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-3{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q0-4{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-4{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-4{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-4{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q0-5{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-5{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-5{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-5{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-5{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q0-6{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-6{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-6{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-6{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-6{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-6{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q0-7{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-7{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-7{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-7{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-7{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-7{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q6-7{fill:#b3de69;background:#b3de69;stroke:#b3de69}.Set3.q0-8{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-8{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-8{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-8{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-8{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-8{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q6-8{fill:#b3de69;background:#b3de69;stroke:#b3de69}.Set3.q7-8{fill:#fccde5;background:#fccde5;stroke:#fccde5}.Set3.q0-9{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-9{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-9{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-9{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-9{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-9{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q6-9{fill:#b3de69;background:#b3de69;stroke:#b3de69}.Set3.q7-9{fill:#fccde5;background:#fccde5;stroke:#fccde5}.Set3.q8-9{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Set3.q0-10{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-10{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-10{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-10{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-10{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-10{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q6-10{fill:#b3de69;background:#b3de69;stroke:#b3de69}.Set3.q7-10{fill:#fccde5;background:#fccde5;stroke:#fccde5}.Set3.q8-10{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Set3.q9-10{fill:#bc80bd;background:#bc80bd;stroke:#bc80bd}.Set3.q0-11{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-11{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-11{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-11{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-11{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-11{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q6-11{fill:#b3de69;background:#b3de69;stroke:#b3de69}.Set3.q7-11{fill:#fccde5;background:#fccde5;stroke:#fccde5}.Set3.q8-11{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Set3.q9-11{fill:#bc80bd;background:#bc80bd;stroke:#bc80bd}.Set3.q10-11{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Set3.q0-12{fill:#8dd3c7;background:#8dd3c7;stroke:#8dd3c7}.Set3.q1-12{fill:#ffffb3;background:#ffffb3;stroke:#ffffb3}.Set3.q2-12{fill:#bebada;background:#bebada;stroke:#bebada}.Set3.q3-12{fill:#fb8072;background:#fb8072;stroke:#fb8072}.Set3.q4-12{fill:#80b1d3;background:#80b1d3;stroke:#80b1d3}.Set3.q5-12{fill:#fdb462;background:#fdb462;stroke:#fdb462}.Set3.q6-12{fill:#b3de69;background:#b3de69;stroke:#b3de69}.Set3.q7-12{fill:#fccde5;background:#fccde5;stroke:#fccde5}.Set3.q8-12{fill:#d9d9d9;background:#d9d9d9;stroke:#d9d9d9}.Set3.q9-12{fill:#bc80bd;background:#bc80bd;stroke:#bc80bd}.Set3.q10-12{fill:#ccebc5;background:#ccebc5;stroke:#ccebc5}.Set3.q11-12{fill:#ffed6f;background:#ffed6f;stroke:#ffed6f}.graphical-report__layout{line-height:1;font-family:Helvetica Neue,Segoe UI,Open Sans,Ubuntu,sans-serif;display:-webkit-flexbox;display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%;overflow:auto;background:0 0;color:#333}.graphical-report__layout text{font:400 13px Helvetica Neue,Segoe UI,Open Sans,Ubuntu,sans-serif;fill:#333}.graphical-report__chart{font-family:Helvetica Neue,Segoe UI,Open Sans,Ubuntu,sans-serif;position:absolute;height:100%;width:100%;overflow:auto}.graphical-report__layout__header{-ms-flex:0 .1 auto;flex:0 .1 auto;position:relative}.graphical-report__layout__container{display:-webkit-flexbox;display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;height:100%}.graphical-report__layout__footer,.graphical-report__layout__sidebar{-ms-flex:0 1 auto;flex:0 1 auto}.graphical-report__layout__content{-ms-flex:1 1 auto;flex:1 1 auto;overflow:hidden}.graphical-report__layout__sidebar-right{position:relative;overflow:hidden;-ms-flex:0 0 auto;flex:0 0 auto}.graphical-report__layout__sidebar-right__wrap{max-height:100%;box-sizing:border-box}.graphical-report__layout.graphical-report__layout_rendering-error{opacity:.75}.graphical-report__rendering-timeout-warning{-ms-flex-align:center;align-items:center;background:rgba(255,255,255,.5);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;position:absolute;top:0;width:100%}.graphical-report__rendering-timeout-warning svg{height:100%;max-width:32em;width:100%}.graphical-report__rendering-timeout-warning text{font-weight:300}.graphical-report__progress{box-sizing:border-box;height:.25em;opacity:0;overflow:hidden;pointer-events:none;position:absolute;top:0;transition:opacity 1s .75s;width:100%}.graphical-report__progress_active{opacity:1}.graphical-report__progress__value{background:rgba(51,51,51,.25);height:100%;transition:width .75s}.graphical-report__checkbox{position:relative;display:block}.graphical-report__checkbox__input{position:absolute;z-index:-1;opacity:0}.graphical-report__checkbox__icon{position:relative;width:14px;height:14px;top:3px;display:inline-block;border:1px solid #c3c3c3;border-radius:2px;background:linear-gradient(to bottom,#fff 0,#dbdbde 100%)}.graphical-report__checkbox__icon:before{display:none;content:'';background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAFoTx1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEQ4M0RDOTE4NDQ2MTFFNEE5RTdBRERDQzRBQzNEMTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEQ4M0RDOTI4NDQ2MTFFNEE5RTdBRERDQzRBQzNEMTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRDgzREM4Rjg0NDYxMUU0QTlFN0FERENDNEFDM0QxNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRDgzREM5MDg0NDYxMUU0QTlFN0FERENDNEFDM0QxNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pn2UjdoAAAEGSURBVHjaYvz//z8DGIAYSUlJdwECiBEukpiY/BDEAQggBrgIVBkLjAEDAAHEiMyBywBNOwDmJCYm/cdQBhBAqHrQAUgSojV5P8QtSY+A+D7cPTDdMAUwTQABhNdYJgZ8AF1nRkaGAgjDvQzi/AOCP3+YWX7+/HmXiYlRAcXY37//AEPs511OTg65uXPnPkQxNi0tTTklJUWGaNcCBBj+EMIDmBjIBCwo1jMyYigAul/x79//B4CulwOqODBv3hxHDKcmJycfAHLtgfrvMTExJf/7938xUF4GaOB9FhZmh1mzZj2CqUdNEkAdSUmZSsAgBNrAIAsUAQYlu+O0adMeo0cS/QMHAGJZps83N5ZDAAAAAElFTkSuQmCC);width:100%;height:100%;position:absolute;top:0;left:0}.graphical-report__checkbox__text{margin-left:5px}.graphical-report__checkbox__input~.graphical-report__checkbox__text{cursor:pointer}.graphical-report__checkbox__input:disabled~.graphical-report__checkbox__text,.graphical-report__select[disabled]{opacity:.3;cursor:default}.graphical-report__checkbox:hover .graphical-report__checkbox__input:not(:disabled)~.graphical-report__checkbox__icon{border-color:#999}.graphical-report__checkbox__input:checked+.graphical-report__checkbox__icon{background:linear-gradient(to bottom,#fff 0,#dbdbde 100%)}.graphical-report__checkbox__input:checked+.graphical-report__checkbox__icon:before{display:block}.graphical-report__select{font-size:13px;font-family:inherit;display:inline-block;height:24px;line-height:24px;vertical-align:middle;padding:2px;background-color:#fff;border:1px solid #c3c3c3;border-radius:2px;color:#333}.graphical-report__select[multiple]{height:auto}.graphical-report__select option[disabled]{opacity:.6}.graphical-report-btn{background-color:rgba(255,255,255,.9);border:1px solid currentColor;border-radius:4px;box-shadow:0 0 1px rgba(0,0,0,.1);box-sizing:border-box;color:#b3b3b3;cursor:pointer;font-size:13px;padding:0 6px;line-height:1.5em;height:calc(1.5em + 2px)}.graphical-report-btn:hover{border-color:#999;color:#333}.graphical-report__svg .color20-1{stroke:#6FA1D9;fill:#6FA1D9}.graphical-report__svg .color20-2{stroke:#DF2B59;fill:#DF2B59}.graphical-report__svg .color20-3{stroke:#66DA26;fill:#66DA26}.graphical-report__svg .color20-4{stroke:#4C3862;fill:#4C3862}.graphical-report__svg .color20-5{stroke:#E5B011;fill:#E5B011}.graphical-report__svg .color20-6{stroke:#3A3226;fill:#3A3226}.graphical-report__svg .color20-7{stroke:#CB461A;fill:#CB461A}.graphical-report__svg .color20-8{stroke:#C7CE23;fill:#C7CE23}.graphical-report__svg .color20-9{stroke:#7FCDC2;fill:#7FCDC2}.graphical-report__svg .color20-10{stroke:#CCA1C8;fill:#CCA1C8}.graphical-report__svg .color20-11{stroke:#C84CCE;fill:#C84CCE}.graphical-report__svg .color20-12{stroke:#54762E;fill:#54762E}.graphical-report__svg .color20-13{stroke:#746BC9;fill:#746BC9}.graphical-report__svg .color20-14{stroke:#953441;fill:#953441}.graphical-report__svg .color20-15{stroke:#5C7A76;fill:#5C7A76}.graphical-report__svg .color20-16{stroke:#C8BF87;fill:#C8BF87}.graphical-report__svg .color20-17{stroke:#BFC1C3;fill:#BFC1C3}.graphical-report__svg .color20-18{stroke:#8E5C31;fill:#8E5C31}.graphical-report__svg .color20-19{stroke:#71CE7B;fill:#71CE7B}.graphical-report__svg .color20-20{stroke:#BE478B;fill:#BE478B}.graphical-report__svg .color-default{stroke:#6FA1D9;fill:#6FA1D9}.graphical-report__line-width-1{stroke-width:1px}.graphical-report__line-width-2{stroke-width:1.5px}.graphical-report__line-width-3{stroke-width:2px}.graphical-report__line-width-4{stroke-width:2.5px}.graphical-report__line-width-5{stroke-width:3px}.graphical-report__line-opacity-1{stroke-opacity:1}.graphical-report__line-opacity-2{stroke-opacity:.95}.graphical-report__line-opacity-3{stroke-opacity:.9}.graphical-report__line-opacity-4{stroke-opacity:.85}.graphical-report__line-opacity-5{stroke-opacity:.8}.graphical-report a{color:#3962FF;border-bottom:1px solid rgba(57,98,255,.3);text-decoration:none}.graphical-report a:hover{color:#E17152;border-bottom:1px solid rgba(225,113,82,.3)}.graphical-report__d3-time-overflown .tick:nth-child(even){display:none}.graphical-report__svg{display:block;overflow:hidden}.graphical-report__svg .place{fill:#fff;stroke:#000;stroke-opacity:.7;stroke-width:.5}.graphical-report__svg .place-label{opacity:.7;font-size:11px;color:#000;line-height:13px;text-anchor:start}.graphical-report__svg .place-label-countries,.graphical-report__svg .place-label-states,.graphical-report__svg .place-label-subunits{text-anchor:middle;font-size:10px;fill:rgba(51,51,51,.5);line-height:10px;text-transform:capitalize}.graphical-report__svg .map-contour-level path{stroke-opacity:.5;stroke-linejoin:'round'}.graphical-report__svg .map-contour-highlighted path,.graphical-report__svg .map-contour-level-0 path,.graphical-report__svg .map-contour-level-1 path,.graphical-report__svg .map-contour-level-2 path,.graphical-report__svg .map-contour-level-3 path,.graphical-report__svg .map-contour-level-4 path,.graphical-report__svg .map-contour:hover path{stroke:#fff}.graphical-report__svg .map-contour-highlighted,.graphical-report__svg .map-contour:hover{fill:#FFBF00}.graphical-report__svg .map-contour-highlighted text,.graphical-report__svg .map-contour:hover text{fill:#000}.graphical-report__svg .axis line,.graphical-report__svg .axis path{stroke-width:1;fill:none;stroke:rgba(189,195,205,.4);shape-rendering:crispEdges}.graphical-report__svg .axis.facet-axis .tick line{opacity:0}.graphical-report__svg .axis.facet-axis .tick line.label-ref{opacity:1}.graphical-report__svg .axis.facet-axis .tick text{font-weight:600}.graphical-report__svg .axis.facet-axis path.domain{opacity:0}.graphical-report__svg .axis.facet-axis.compact .label,.graphical-report__svg .axis.facet-axis.compact .label .label-token,.graphical-report__svg .axis.facet-axis.compact .tick text{font-weight:400}.graphical-report__svg .tick text{font-size:11px}.graphical-report__svg .grid .grid-lines path{shape-rendering:crispEdges}.graphical-report__svg .grid .line path,.graphical-report__svg .grid path.domain,.graphical-report__svg .grid path.line{fill:none}.graphical-report__svg .grid .tick>line{fill:none;stroke:rgba(189,195,205,.4);stroke-width:1px;shape-rendering:crispEdges}.graphical-report__svg .grid .tick.zero-tick>line{stroke:rgba(126,129,134,.505)}.graphical-report__svg .grid .line path{shape-rendering:auto}.graphical-report__svg .grid .cursor-line{shape-rendering:crispEdges;stroke:#ccc;stroke-width:1px}.graphical-report__svg .label{font-size:12px;font-weight:600}.graphical-report__svg .label .label-token{font-size:12px;font-weight:600;text-transform:capitalize}.graphical-report__svg .label .label-token-1,.graphical-report__svg .label .label-token-2{font-weight:400}.graphical-report__svg .label .label-token-2{fill:gray}.graphical-report__svg .label .label-token-delimiter{font-weight:400;fill:gray}.graphical-report__svg .label.inline .label-token{font-weight:400;fill:gray;text-transform:none}.graphical-report__svg .brush .extent{fill-opacity:.3;stroke:#fff;shape-rendering:crispEdges}.graphical-report__svg .background{stroke:#f2f2f2}.graphical-report__dot{opacity:.7;stroke-width:0;transition:stroke-width .1s ease,opacity .2s ease}.graphical-report__line{fill:none;transition:stroke-opacity .2s ease,stroke-width .2s ease}.graphical-report__dot-line{opacity:1;transition:stroke-opacity .2s ease}.graphical-report__area,.graphical-report__bar{transition:opacity .2s ease}.graphical-report__bar{opacity:.7;shape-rendering:geometricPrecision;stroke-opacity:.5;stroke-width:1;stroke:#fff}.graphical-report__area path,.graphical-report__area polygon{opacity:.6;transition:stroke-opacity .2s ease,stroke-width .2s ease}.graphical-report__svg .graphical-report__bar{stroke:#fff}.graphical-report__dot.graphical-report__highlighted{stroke-width:1;opacity:1}.graphical-report__dot.graphical-report__dimmed{opacity:.2}.graphical-report__line.graphical-report__highlighted{stroke-opacity:1;stroke-width:3}.graphical-report__line.graphical-report__dimmed{stroke-opacity:.2}.graphical-report__area.graphical-report__highlighted,.graphical-report__bar.graphical-report__highlighted,.i-role-label.graphical-report__highlighted{stroke-opacity:1;opacity:1}.graphical-report__area.graphical-report__dimmed,.graphical-report__bar.graphical-report__dimmed,.i-role-label.graphical-report__dimmed{opacity:.2}.graphical-report__annotation-line{stroke-width:2px;stroke-dasharray:1,1;shape-rendering:crispEdges}.graphical-report__annotation-area.graphical-report__area polygon{opacity:.1}.graphical-report__layout .tau-crosshair__line{shape-rendering:crispEdges;stroke-dasharray:1px 1px;stroke-width:1px}.graphical-report__layout .tau-crosshair__label__text{fill:#fff;stroke:none}.graphical-report__layout .tau-crosshair__label__text,.graphical-report__layout .tau-crosshair__label__text-shadow{font-size:12px;font-weight:400}.graphical-report__layout .tau-crosshair__line-shadow{shape-rendering:crispEdges;stroke:#fff;stroke-width:1px}.graphical-report__layout .tau-crosshair__group.y .tau-crosshair__line-shadow{transform:translateX(-.5px)}.graphical-report__layout .tau-crosshair__group.x .tau-crosshair__line-shadow{transform:translateY(.5px)}.graphical-report__layout .tau-crosshair__label__text-shadow{stroke-linejoin:round;stroke-width:3px;visibility:hidden}.graphical-report__layout .tau-crosshair__label__box{fill-opacity:.85;rx:3px;ry:3px;stroke:none}.graphical-report__layout .tau-crosshair__label.color20-1 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-1{stroke:#6FA1D9}.graphical-report__layout .tau-crosshair__label.color20-1 .tau-crosshair__label__box{fill:#6FA1D9}.graphical-report__layout .tau-crosshair__label.color20-2 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-2{stroke:#DF2B59}.graphical-report__layout .tau-crosshair__label.color20-2 .tau-crosshair__label__box{fill:#DF2B59}.graphical-report__layout .tau-crosshair__label.color20-3 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-3{stroke:#66DA26}.graphical-report__layout .tau-crosshair__label.color20-3 .tau-crosshair__label__box{fill:#66DA26}.graphical-report__layout .tau-crosshair__label.color20-4 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-4{stroke:#4C3862}.graphical-report__layout .tau-crosshair__label.color20-4 .tau-crosshair__label__box{fill:#4C3862}.graphical-report__layout .tau-crosshair__label.color20-5 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-5{stroke:#E5B011}.graphical-report__layout .tau-crosshair__label.color20-5 .tau-crosshair__label__box{fill:#E5B011}.graphical-report__layout .tau-crosshair__label.color20-6 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-6{stroke:#3A3226}.graphical-report__layout .tau-crosshair__label.color20-6 .tau-crosshair__label__box{fill:#3A3226}.graphical-report__layout .tau-crosshair__label.color20-7 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-7{stroke:#CB461A}.graphical-report__layout .tau-crosshair__label.color20-7 .tau-crosshair__label__box{fill:#CB461A}.graphical-report__layout .tau-crosshair__label.color20-8 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-8{stroke:#C7CE23}.graphical-report__layout .tau-crosshair__label.color20-8 .tau-crosshair__label__box{fill:#C7CE23}.graphical-report__layout .tau-crosshair__label.color20-9 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-9{stroke:#7FCDC2}.graphical-report__layout .tau-crosshair__label.color20-9 .tau-crosshair__label__box{fill:#7FCDC2}.graphical-report__layout .tau-crosshair__label.color20-10 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-10{stroke:#CCA1C8}.graphical-report__layout .tau-crosshair__label.color20-10 .tau-crosshair__label__box{fill:#CCA1C8}.graphical-report__layout .tau-crosshair__label.color20-11 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-11{stroke:#C84CCE}.graphical-report__layout .tau-crosshair__label.color20-11 .tau-crosshair__label__box{fill:#C84CCE}.graphical-report__layout .tau-crosshair__label.color20-12 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-12{stroke:#54762E}.graphical-report__layout .tau-crosshair__label.color20-12 .tau-crosshair__label__box{fill:#54762E}.graphical-report__layout .tau-crosshair__label.color20-13 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-13{stroke:#746BC9}.graphical-report__layout .tau-crosshair__label.color20-13 .tau-crosshair__label__box{fill:#746BC9}.graphical-report__layout .tau-crosshair__label.color20-14 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-14{stroke:#953441}.graphical-report__layout .tau-crosshair__label.color20-14 .tau-crosshair__label__box{fill:#953441}.graphical-report__layout .tau-crosshair__label.color20-15 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-15{stroke:#5C7A76}.graphical-report__layout .tau-crosshair__label.color20-15 .tau-crosshair__label__box{fill:#5C7A76}.graphical-report__layout .tau-crosshair__label.color20-16 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-16{stroke:#C8BF87}.graphical-report__layout .tau-crosshair__label.color20-16 .tau-crosshair__label__box{fill:#C8BF87}.graphical-report__layout .tau-crosshair__label.color20-17 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-17{stroke:#BFC1C3}.graphical-report__layout .tau-crosshair__label.color20-17 .tau-crosshair__label__box{fill:#BFC1C3}.graphical-report__layout .tau-crosshair__label.color20-18 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-18{stroke:#8E5C31}.graphical-report__layout .tau-crosshair__label.color20-18 .tau-crosshair__label__box{fill:#8E5C31}.graphical-report__layout .tau-crosshair__label.color20-19 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-19{stroke:#71CE7B}.graphical-report__layout .tau-crosshair__label.color20-19 .tau-crosshair__label__box{fill:#71CE7B}.graphical-report__layout .tau-crosshair__label.color20-20 .tau-crosshair__label__text-shadow,.graphical-report__layout .tau-crosshair__line.color20-20{stroke:#BE478B}.graphical-report__layout .tau-crosshair__label.color20-20 .tau-crosshair__label__box{fill:#BE478B}.graphical-report__print-block{display:none}.graphical-report__export{float:right;margin:0 20px 0 0;display:block;text-indent:20px;overflow:hidden;background-repeat:no-repeat;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+ZXhwb3J0PC90aXRsZT48ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxnIGZpbGw9IiMwMDAiPjxwYXRoIGQ9Ik0xNyAxLjY3bC04LjMyOCA4LjM2Nkw4IDkuNSAxNi4zNTMgMUgxMlYwaDZ2NmgtMVYxLjY3eiIgb3BhY2l0eT0iLjgiLz48cGF0aCBkPSJNMCA1LjAxQzAgMy4zNDYgMS4zMzcgMiAzLjAxIDJIMTZ2MTIuOTljMCAxLjY2My0xLjMzNyAzLjAxLTMuMDEgMy4wMUgzLjAxQzEuMzQ2IDE4IDAgMTYuNjYzIDAgMTQuOTlWNS4wMXpNMTUgMTVDMTUgMTYuMTA1IDE0LjEwMyAxNyAxMi45OTQgMTdIMy4wMDZDMS44OTggMTcgMSAxNi4xMDMgMSAxNC45OTRWNS4wMDZDMSAzLjg5OCAxLjg4NyAzIDIuOTk4IDNIOVYyaDd2N2gtMXY2LjAwMnoiIG9wYWNpdHk9Ii40Ii8+PC9nPjwvZz48L3N2Zz4=);width:20px;height:20px;color:transparent;opacity:.6;cursor:pointer;text-decoration:none;position:relative;z-index:2}.graphical-report__export:hover{opacity:1;text-decoration:none}.graphical-report__export__list{font-size:11px;margin:0;padding:0}.graphical-report__export__item{overflow:hidden;box-sizing:border-box}.graphical-report__export__item>a{display:block;padding:7px 15px;color:inherit;text-decoration:none;cursor:pointer}.graphical-report__export__item>a:focus,.graphical-report__export__item>a:hover{background:#EAF2FC;outline:0;box-shadow:none}.graphical-report__legend{padding:20px 0 10px 10px;position:relative;margin-right:30px;width:160px;box-sizing:border-box}.graphical-report__legend__wrap{margin-bottom:30px;position:relative}.graphical-report__legend__wrap:last-child{margin-bottom:0}.graphical-report__legend__title{margin:0 0 10px 10px;text-transform:capitalize;font-weight:600;font-size:13px}.graphical-report__legend__reset{margin-top:-4px;position:absolute;right:-25px;top:0;z-index:1}.graphical-report__legend__reset.disabled{display:none}.graphical-report__legend__reset+.graphical-report__legend__title{margin-right:1.7em}.graphical-report__legend__item{padding:10px 20px 8px 40px;position:relative;font-size:13px;line-height:1.2em;cursor:pointer}.graphical-report__legend__item:hover{background-color:rgba(189,195,205,.2)}.graphical-report__legend__item--size{cursor:default}.graphical-report__legend__item--size:hover{background:0 0}.graphical-report__legend__item .color-default{background:#6FA1D9;border-color:#6FA1D9}.graphical-report__legend__item.disabled,.graphical-report__legend__item:disabled{color:#ccc}.graphical-report__legend__item.disabled .graphical-report__legend__guide{background:0 0}.graphical-report__legend__guide{position:absolute;box-sizing:border-box;width:100%;height:100%;left:50%;top:50%;transform:translate(-50%,-50%);border:1px solid transparent;border-radius:50%}.graphical-report__legend__guide__wrap{position:absolute;top:calc((10px - 8px) + .6em);left:10px;width:16px;height:16px}.graphical-report__legend__guide--size{stroke:#6FA1D9;fill:#6FA1D9}.graphical-report__legend__guide--color__overlay{background-color:transparent;height:36px;left:-12px;position:absolute;top:-12px;width:36px}.graphical-report__legend__guide--color::before{content:"";display:none;height:2px;left:3px;pointer-events:none;position:absolute;top:6px;width:8px}.graphical-report__legend__guide--color::after{content:"";display:none;height:8px;left:6px;pointer-events:none;position:absolute;top:3px;width:2px}.graphical-report__legend__item .graphical-report__legend__guide--color:hover::after,.graphical-report__legend__item .graphical-report__legend__guide--color:hover::before{background-color:#fff;display:inline-block;transform:rotate(45deg)}.graphical-report__legend__item.disabled .graphical-report__legend__guide--color:hover{background:#fff}.graphical-report__legend__item.disabled .graphical-report__legend__guide--color:hover::after,.graphical-report__legend__item.disabled .graphical-report__legend__guide--color:hover::before{background-color:#333;transform:none}.graphical-report__legend__gradient-wrapper,.graphical-report__legend__size-wrapper{box-sizing:border-box;margin:10px;overflow:visible;width:100%}.graphical-report__legend__gradient,.graphical-report__legend__size{overflow:visible}.graphical-report__legend__size__item__circle.color-definite{stroke:#cacaca;fill:#cacaca}.graphical-report__legend__size__item__circle.color-default-size{stroke:#6FA1D9;fill:#6FA1D9}.graphical-report__legend__gradient__bar{rx:4px;ry:4px}.graphical-report__legend__item .color20-1{background:#6FA1D9;border:1px solid #6FA1D9}.graphical-report__legend__item.disabled .color20-1{background-color:transparent}.graphical-report__legend__item .color20-2{background:#DF2B59;border:1px solid #DF2B59}.graphical-report__legend__item.disabled .color20-2{background-color:transparent}.graphical-report__legend__item .color20-3{background:#66DA26;border:1px solid #66DA26}.graphical-report__legend__item.disabled .color20-3{background-color:transparent}.graphical-report__legend__item .color20-4{background:#4C3862;border:1px solid #4C3862}.graphical-report__legend__item.disabled .color20-4{background-color:transparent}.graphical-report__legend__item .color20-5{background:#E5B011;border:1px solid #E5B011}.graphical-report__legend__item.disabled .color20-5{background-color:transparent}.graphical-report__legend__item .color20-6{background:#3A3226;border:1px solid #3A3226}.graphical-report__legend__item.disabled .color20-6{background-color:transparent}.graphical-report__legend__item .color20-7{background:#CB461A;border:1px solid #CB461A}.graphical-report__legend__item.disabled .color20-7{background-color:transparent}.graphical-report__legend__item .color20-8{background:#C7CE23;border:1px solid #C7CE23}.graphical-report__legend__item.disabled .color20-8{background-color:transparent}.graphical-report__legend__item .color20-9{background:#7FCDC2;border:1px solid #7FCDC2}.graphical-report__legend__item.disabled .color20-9{background-color:transparent}.graphical-report__legend__item .color20-10{background:#CCA1C8;border:1px solid #CCA1C8}.graphical-report__legend__item.disabled .color20-10{background-color:transparent}.graphical-report__legend__item .color20-11{background:#C84CCE;border:1px solid #C84CCE}.graphical-report__legend__item.disabled .color20-11{background-color:transparent}.graphical-report__legend__item .color20-12{background:#54762E;border:1px solid #54762E}.graphical-report__legend__item.disabled .color20-12{background-color:transparent}.graphical-report__legend__item .color20-13{background:#746BC9;border:1px solid #746BC9}.graphical-report__legend__item.disabled .color20-13{background-color:transparent}.graphical-report__legend__item .color20-14{background:#953441;border:1px solid #953441}.graphical-report__legend__item.disabled .color20-14{background-color:transparent}.graphical-report__legend__item .color20-15{background:#5C7A76;border:1px solid #5C7A76}.graphical-report__legend__item.disabled .color20-15{background-color:transparent}.graphical-report__legend__item .color20-16{background:#C8BF87;border:1px solid #C8BF87}.graphical-report__legend__item.disabled .color20-16{background-color:transparent}.graphical-report__legend__item .color20-17{background:#BFC1C3;border:1px solid #BFC1C3}.graphical-report__legend__item.disabled .color20-17{background-color:transparent}.graphical-report__legend__item .color20-18{background:#8E5C31;border:1px solid #8E5C31}.graphical-report__legend__item.disabled .color20-18{background-color:transparent}.graphical-report__legend__item .color20-19{background:#71CE7B;border:1px solid #71CE7B}.graphical-report__legend__item.disabled .color20-19{background-color:transparent}.graphical-report__legend__item .color20-20{background:#BE478B;border:1px solid #BE478B}.graphical-report__legend__item.disabled .color20-20{background-color:transparent}.graphical-report__filter__wrap{padding:20px 0 10px 10px;margin-right:30px;width:160px;box-sizing:border-box}.graphical-report__filter__wrap__title{margin:0 0 10px 10px;text-transform:capitalize;font-weight:600;font-size:13px}.graphical-report__filter__wrap .resize.e text,.graphical-report__filter__wrap .resize.w text,.graphical-report__filter__wrap text.date-label{text-anchor:middle;font-size:12px}.graphical-report__filter__wrap rect{fill:rgba(0,0,0,.2)}.graphical-report__filter__wrap .brush .extent{shape-rendering:crispEdges;fill-opacity:.4;fill:#0074FF}.graphical-report__filter__wrap text.date-label .common{font-weight:600}.graphical-report__filter__wrap .resize line{stroke:#000;stroke-width:1px;shape-rendering:crispEdges}.graphical-report__tooltip{position:absolute;top:0;left:0;max-width:none;z-index:900;display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;font-size:11px;background:rgba(255,255,255,.9);box-shadow:0 1px 4px 0 rgba(0,0,0,.2),0 0 0 1px rgba(0,0,0,.005);overflow:hidden;font-family:Helvetica Neue,Segoe UI,Open Sans,Ubuntu,sans-serif}.graphical-report__tooltip.fade{opacity:0;transition:opacity .2s ease-out}.graphical-report__tooltip.fade.in{opacity:1;transition-duration:.5s}.graphical-report__tooltip.bottom-right,.graphical-report__tooltip.top-right{margin-left:8px}.graphical-report__tooltip.bottom-left,.graphical-report__tooltip.top-left{margin-left:-8px}.graphical-report__tooltip.top-left,.graphical-report__tooltip.top-right{margin-top:8px}.graphical-report__tooltip__content{max-width:500px;overflow:hidden;padding:15px 15px 10px;box-sizing:border-box}.graphical-report__tooltip.stuck .graphical-report__tooltip__exclude,.graphical-report__tooltip.stuck .graphical-report__tooltip__vertical{width:26px}.graphical-report__tooltip__exclude,.graphical-report__tooltip__vertical{box-shadow:inset 2px 0 2px -2px rgba(0,0,0,.2);-ms-flex:0 0 auto;flex:0 0 auto;color:rgba(101,113,127,.8);cursor:pointer;min-height:86px;overflow:hidden;position:relative;transition:width .5s;width:0}.graphical-report__tooltip__exclude__wrap,.graphical-report__tooltip__vertical__wrap{left:calc(100% - 26px);line-height:26px;padding:0 15px;transform:rotate(-90deg);transform-origin:0 0;height:100%;white-space:nowrap;position:absolute;top:100%;box-sizing:border-box}.graphical-report__tooltip__exclude:hover,.graphical-report__tooltip__vertical:hover{color:#65717F;background:linear-gradient(to right,rgba(235,238,241,.9) 0,rgba(235,238,241,0) 100%)}.graphical-report__tooltip__exclude .tau-icon-close-gray,.graphical-report__tooltip__vertical .tau-icon-close-gray{display:inline-block;width:12px;height:12px;position:relative;top:3px;margin-right:5px;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIzMHB4IiBoZWlnaHQ9IjMwcHgiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzAgMzAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGlkPSJTaGFwZV8zNV8iIGZpbGw9IiM4NDk2QTciIGQ9Ik0xMCwwLjcxNUw5LjI4NSwwTDUsNC4yODVMMC43MTUsMEwwLDAuNzE1TDQuMjg1LDVMMCw5LjI4NUwwLjcxNSwxMEw1LDUuNzE1TDkuMjg1LDEwTDEwLDkuMjg1TDUuNzE1LDVMMTAsMC43MTV6Ii8+PC9zdmc+)}.graphical-report__tooltip__list{display:table}.graphical-report__tooltip__list__item{display:table-row}.graphical-report__tooltip__list__elem{display:table-cell;padding-bottom:4px;line-height:1.3;color:#000}.graphical-report__tooltip__list__elem:not(:first-child){padding-left:15px}.graphical-report__tooltip__gray-text,.graphical-report__tooltip__list__elem:first-child{color:#8e8e8e}.graphical-report__tooltip-target{cursor:pointer}.graphical-report__tooltip-target .graphical-report__bar.graphical-report__highlighted,.graphical-report__tooltip-target .graphical-report__dot.graphical-report__highlighted,.graphical-report__tooltip-target .i-data-anchor.graphical-report__highlighted{stroke:#333;stroke-width:1}.graphical-report__tooltip-target .graphical-report__bar.graphical-report__highlighted{shape-rendering:crispEdges}.graphical-report__svg .graphical-report__trendline.color20-1{stroke:#357ac7}.graphical-report__svg .graphical-report__trendline.color20-2{stroke:#a5193d}.graphical-report__svg .graphical-report__trendline.color20-3{stroke:#47991a}.graphical-report__svg .graphical-report__trendline.color20-4{stroke:#261c31}.graphical-report__svg .graphical-report__trendline.color20-5{stroke:#9e790c}.graphical-report__svg .graphical-report__trendline.color20-6{stroke:#0c0a08}.graphical-report__svg .graphical-report__trendline.color20-7{stroke:#872f11}.graphical-report__svg .graphical-report__trendline.color20-8{stroke:#888d18}.graphical-report__svg .graphical-report__trendline.color20-9{stroke:#48b8a8}.graphical-report__svg .graphical-report__trendline.color20-10{stroke:#b16fab}.graphical-report__svg .graphical-report__trendline.color20-11{stroke:#9c2ca1}.graphical-report__svg .graphical-report__trendline.color20-12{stroke:#2d3f19}.graphical-report__svg .graphical-report__trendline.color20-13{stroke:#483eaa}.graphical-report__svg .graphical-report__trendline.color20-14{stroke:#5c2028}.graphical-report__svg .graphical-report__trendline.color20-15{stroke:#3b4e4c}.graphical-report__svg .graphical-report__trendline.color20-16{stroke:#b0a353}.graphical-report__svg .graphical-report__trendline.color20-17{stroke:#989b9e}.graphical-report__svg .graphical-report__trendline.color20-18{stroke:#55371d}.graphical-report__svg .graphical-report__trendline.color20-19{stroke:#3eb44b}.graphical-report__svg .graphical-report__trendline.color20-20{stroke:#883063}.graphical-report__svg .graphical-report__trendline.color-default{stroke:#357ac7}.graphical-report__trendlinepanel{padding:20px 0 20px 20px;margin-right:20px;width:160px;box-sizing:border-box}.graphical-report__trendlinepanel__title{margin:0 0 10px;text-transform:capitalize;font-weight:600;font-size:13px}.graphical-report__trendlinepanel__control{width:100%}.graphical-report__trendlinepanel__error-message{font-size:11px;line-height:16px;margin-left:5px}.graphical-report__trendlinepanel.applicable-false .graphical-report__checkbox__icon,.graphical-report__trendlinepanel.applicable-false .graphical-report__checkbox__input,.graphical-report__trendlinepanel.applicable-false .graphical-report__trendlinepanel__control,.graphical-report__trendlinepanel.applicable-false.hide-trendline-error{display:none}.graphical-report__trendline{stroke-dasharray:4,4} \ No newline at end of file +/*! + * /* + * taucharts@2.7.1 (2019-03-14) + * Copyright 2019 Targetprocess, Inc. + * Licensed under Apache License 2.0 + * * / + * + */ +.tau-chart__layout { + line-height: 1; + font-family: Helvetica Neue, Segoe UI, Open Sans, Ubuntu, sans-serif; +} +.tau-chart__layout text { + font: normal 13px Helvetica Neue, Segoe UI, Open Sans, Ubuntu, sans-serif; +} +.tau-chart__chart { + font-family: Helvetica Neue, Segoe UI, Open Sans, Ubuntu, sans-serif; + position: absolute; + height: 100%; + width: 100%; + overflow: auto; +} +.tau-chart__layout { + display: -webkit-box; + display: -webkit-flexbox; + display: -ms-flexbox; + display: flex; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; + -ms-flex-direction: column; + -webkit-box-orient: vertical; + flex-direction: column; + height: 100%; + width: 100%; + overflow: auto; + background: transparent; + color: #333; +} +.tau-chart__layout__header { + -ms-flex: 0 0.1 auto; + -webkit-box-flex: 0 0.1 auto; + flex: 0 0.1 auto; + position: relative; +} +.tau-chart__layout__container { + display: -webkit-box; + display: -webkit-flexbox; + display: -ms-flexbox; + display: flex; + -ms-flex: 1 1 auto; + -webkit-box-flex: 1 1 auto; + flex: 1 1 auto; + height: 100%; +} +.tau-chart__layout__footer { + -ms-flex: 0 1 auto; + -webkit-box-flex: 0 1 auto; + flex: 0 1 auto; +} +.tau-chart__layout__sidebar { + -ms-flex: 0 1 auto; + -webkit-box-flex: 0 1 auto; + flex: 0 1 auto; +} +.tau-chart__layout__content { + -ms-flex: 1 1 auto; + -webkit-box-flex: 1 1 auto; + flex: 1 1 auto; + overflow: hidden; +} +.tau-chart__layout__sidebar-right { + position: relative; + overflow: hidden; + -ms-flex: 0 0 auto; + -webkit-box-flex: 0 0 auto; + flex: 0 0 auto; +} +.tau-chart__layout__sidebar-right__wrap { + max-height: 100%; + box-sizing: border-box; +} +.tau-chart__layout text { + fill: #333; +} +.tau-chart__layout.tau-chart__layout_rendering-error { + opacity: 0.75; +} +.tau-chart__rendering-timeout-warning { + align-items: center; + background: rgba(255, 255, 255, 0.5); + display: flex; + flex-direction: column; + height: 100%; + position: absolute; + top: 0; + width: 100%; +} +.tau-chart__rendering-timeout-warning svg { + height: 100%; + max-width: 32em; + width: 100%; +} +.tau-chart__rendering-timeout-warning text { + font-weight: 300; +} +.tau-chart__progress { + box-sizing: border-box; + height: 0.25em; + opacity: 0; + overflow: hidden; + pointer-events: none; + position: absolute; + top: 0; + transition: opacity 1s 0.75s; + width: 100%; +} +.tau-chart__progress_active { + opacity: 1; +} +.tau-chart__progress__value { + background: rgba(51, 51, 51, 0.25); + height: 100%; + transition: width 0.75s; +} +.tau-chart { + /* region Select --------------------------------------------------*/ +} +.tau-chart__checkbox { + position: relative; + display: block; +} +.tau-chart__checkbox__input { + position: absolute; + z-index: -1; + opacity: 0; +} +.tau-chart__checkbox__icon { + position: relative; + width: 14px; + height: 14px; + top: 3px; + display: inline-block; + border: 1px solid #c3c3c3; + border-radius: 2px; + background: linear-gradient(to bottom, #fff 0%, #dbdbde 100%); +} +.tau-chart__checkbox__icon:before { + display: none; + content: ''; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAFoTx1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEQ4M0RDOTE4NDQ2MTFFNEE5RTdBRERDQzRBQzNEMTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEQ4M0RDOTI4NDQ2MTFFNEE5RTdBRERDQzRBQzNEMTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRDgzREM4Rjg0NDYxMUU0QTlFN0FERENDNEFDM0QxNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRDgzREM5MDg0NDYxMUU0QTlFN0FERENDNEFDM0QxNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pn2UjdoAAAEGSURBVHjaYvz//z8DGIAYSUlJdwECiBEukpiY/BDEAQggBrgIVBkLjAEDAAHEiMyBywBNOwDmJCYm/cdQBhBAqHrQAUgSojV5P8QtSY+A+D7cPTDdMAUwTQABhNdYJgZ8AF1nRkaGAgjDvQzi/AOCP3+YWX7+/HmXiYlRAcXY37//AEPs511OTg65uXPnPkQxNi0tTTklJUWGaNcCBBj+EMIDmBjIBCwo1jMyYigAul/x79//B4CulwOqODBv3hxHDKcmJycfAHLtgfrvMTExJf/7938xUF4GaOB9FhZmh1mzZj2CqUdNEkAdSUmZSsAgBNrAIAsUAQYlu+O0adMeo0cS/QMHAGJZps83N5ZDAAAAAElFTkSuQmCC'); + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} +.tau-chart__checkbox__text { + margin-left: 5px; +} +.tau-chart__checkbox__input ~ .tau-chart__checkbox__text { + cursor: pointer; +} +.tau-chart__checkbox__input:disabled ~ .tau-chart__checkbox__text { + cursor: default; + opacity: 0.3; +} +.tau-chart__checkbox__input:not(:disabled):focus + .tau-chart__checkbox__icon { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 0 7px 0 #52a8ec; + outline: none; +} +.tau-chart__checkbox:hover .tau-chart__checkbox__input:not(:disabled) ~ .tau-chart__checkbox__icon { + border-color: #999; +} +.tau-chart__checkbox__input:checked + .tau-chart__checkbox__icon { + background: linear-gradient(to bottom, #fff 0%, #dbdbde 100%); +} +.tau-chart__checkbox__input:checked + .tau-chart__checkbox__icon:before { + display: block; +} +.tau-chart__select { + font-size: 13px; + font-family: inherit; + display: inline-block; + height: 24px; + line-height: 24px; + vertical-align: middle; + padding: 2px; + background-color: #fff; + border: 1px solid #c3c3c3; + border-radius: 2px; + color: #333; +} +.tau-chart__select:focus { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 0 7px 0 #52a8ec; + outline: none; +} +.tau-chart__select[disabled] { + opacity: 0.3; + cursor: default; +} +.tau-chart__select[multiple] { + height: auto; +} +.tau-chart__select option[disabled] { + opacity: 0.6; +} +.tau-chart__button { + background-color: rgba(255, 255, 255, 0.9); + border: 1px solid currentColor; + border-radius: 4px; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.1); + box-sizing: border-box; + color: #b3b3b3; + cursor: pointer; + font-size: 13px; + padding: 0 6px; + line-height: 1.5em; + height: calc(1.5em + 2px); +} +.tau-chart__button:hover { + border-color: #999999; + color: #333; +} +/* region Generate .color@{n}-@{i} function */ +.tau-chart__svg .color20-1 { + stroke: #6FA1D9; + fill: #6FA1D9; +} +.tau-chart__svg .color20-2 { + stroke: #DF2B59; + fill: #DF2B59; +} +.tau-chart__svg .color20-3 { + stroke: #66DA26; + fill: #66DA26; +} +.tau-chart__svg .color20-4 { + stroke: #4C3862; + fill: #4C3862; +} +.tau-chart__svg .color20-5 { + stroke: #E5B011; + fill: #E5B011; +} +.tau-chart__svg .color20-6 { + stroke: #3A3226; + fill: #3A3226; +} +.tau-chart__svg .color20-7 { + stroke: #CB461A; + fill: #CB461A; +} +.tau-chart__svg .color20-8 { + stroke: #C7CE23; + fill: #C7CE23; +} +.tau-chart__svg .color20-9 { + stroke: #7FCDC2; + fill: #7FCDC2; +} +.tau-chart__svg .color20-10 { + stroke: #CCA1C8; + fill: #CCA1C8; +} +.tau-chart__svg .color20-11 { + stroke: #C84CCE; + fill: #C84CCE; +} +.tau-chart__svg .color20-12 { + stroke: #54762E; + fill: #54762E; +} +.tau-chart__svg .color20-13 { + stroke: #746BC9; + fill: #746BC9; +} +.tau-chart__svg .color20-14 { + stroke: #953441; + fill: #953441; +} +.tau-chart__svg .color20-15 { + stroke: #5C7A76; + fill: #5C7A76; +} +.tau-chart__svg .color20-16 { + stroke: #C8BF87; + fill: #C8BF87; +} +.tau-chart__svg .color20-17 { + stroke: #BFC1C3; + fill: #BFC1C3; +} +.tau-chart__svg .color20-18 { + stroke: #8E5C31; + fill: #8E5C31; +} +.tau-chart__svg .color20-19 { + stroke: #71CE7B; + fill: #71CE7B; +} +.tau-chart__svg .color20-20 { + stroke: #BE478B; + fill: #BE478B; +} +.tau-chart__svg .color-default { + stroke: #6FA1D9; + fill: #6FA1D9; +} +/* endregion */ +/* region Generate .line-params-@{n} function */ +/* Generate .line-size-@{n} */ +.tau-chart__line-width-1 { + stroke-width: 1px; +} +.tau-chart__line-width-2 { + stroke-width: 1.5px; +} +.tau-chart__line-width-3 { + stroke-width: 2px; +} +.tau-chart__line-width-4 { + stroke-width: 2.5px; +} +.tau-chart__line-width-5 { + stroke-width: 3px; +} +/* Generate .line-opacity-@{n} */ +.tau-chart__line-opacity-1 { + stroke-opacity: 1; +} +.tau-chart__line-opacity-2 { + stroke-opacity: 0.95; +} +.tau-chart__line-opacity-3 { + stroke-opacity: 0.9; +} +.tau-chart__line-opacity-4 { + stroke-opacity: 0.85; +} +.tau-chart__line-opacity-5 { + stroke-opacity: 0.8; +} +/* endregion */ +/* endregion */ +.tau-chart { + /* Links */ + /* Axises and Grid */ + /* Scatterplot */ + /* Linechart */ + /* Bar */ + /* TODO: fix to avoid conflict on "stroke" with color brewer */ + /* TODO: remove this when CSS for color brewer is fixed */ + /* PLUGINS */ + /* Highlighter */ +} +.tau-chart a { + color: #3962FF; + border-bottom: 1px solid rgba(57, 98, 255, 0.3); + text-decoration: none; +} +.tau-chart a:hover { + color: #E17152; + border-bottom: 1px solid rgba(225, 113, 82, 0.3); +} +.tau-chart__time-axis-overflow .tick:nth-child(even) { + display: none; +} +.tau-chart__svg { + display: block; + overflow: hidden; +} +.tau-chart__svg .place { + fill: #fff; + stroke: #000; + stroke-opacity: 0.7; + stroke-width: 0.5; +} +.tau-chart__svg .place-label { + opacity: 0.7; + font-size: 11px; + color: #000000; + line-height: 13px; + text-anchor: start; +} +.tau-chart__svg .place-label-countries, +.tau-chart__svg .place-label-subunits, +.tau-chart__svg .place-label-states { + text-anchor: middle; + font-size: 10px; + fill: rgba(51, 51, 51, 0.5); + line-height: 10px; + text-transform: capitalize; +} +.tau-chart__svg .map-contour-level path { + stroke-opacity: 0.5; + stroke-linejoin: 'round'; +} +.tau-chart__svg .map-contour-level-0 path { + stroke: #fff; +} +.tau-chart__svg .map-contour-level-1 path { + stroke: #fff; +} +.tau-chart__svg .map-contour-level-2 path { + stroke: #fff; +} +.tau-chart__svg .map-contour-level-3 path { + stroke: #fff; +} +.tau-chart__svg .map-contour-level-4 path { + stroke: #fff; +} +.tau-chart__svg .map-contour-highlighted, +.tau-chart__svg .map-contour:hover { + fill: #FFBF00; +} +.tau-chart__svg .map-contour-highlighted path, +.tau-chart__svg .map-contour:hover path { + stroke: #fff; +} +.tau-chart__svg .map-contour-highlighted text, +.tau-chart__svg .map-contour:hover text { + fill: #000; +} +.tau-chart__svg .axis line, +.tau-chart__svg .axis path { + stroke-width: 1; + fill: none; + stroke: rgba(189, 195, 205, 0.4); + shape-rendering: crispEdges; +} +.tau-chart__svg .axis.facet-axis .tick line { + opacity: 0; +} +.tau-chart__svg .axis.facet-axis .tick line.label-ref { + opacity: 1; +} +.tau-chart__svg .axis.facet-axis .tick text { + font-size: 12px; + font-weight: 600; +} +.tau-chart__svg .axis.facet-axis path.domain { + opacity: 0; +} +.tau-chart__svg .axis.facet-axis.compact .tick text { + font-weight: normal; +} +.tau-chart__svg .axis.facet-axis.compact .label { + font-weight: normal; +} +.tau-chart__svg .axis.facet-axis.compact .label .label-token { + font-weight: normal; +} +.tau-chart__svg .tick text { + font-size: 11px; +} +.tau-chart__svg .grid .grid-lines path { + shape-rendering: crispEdges; +} +.tau-chart__svg .grid .line path, +.tau-chart__svg .grid path.line, +.tau-chart__svg .grid path.domain { + fill: none; +} +.tau-chart__svg .grid .tick > line, +.tau-chart__svg .grid .extra-tick-line { + fill: none; + stroke: rgba(189, 195, 205, 0.4); + stroke-width: 1px; + shape-rendering: crispEdges; +} +.tau-chart__svg .grid .tick.zero-tick > line { + stroke: rgba(126, 129, 134, 0.505); +} +.tau-chart__svg .grid .line path { + shape-rendering: auto; +} +.tau-chart__svg .grid .cursor-line { + shape-rendering: crispEdges; + stroke: #adadad; + stroke-width: 1px; +} +.tau-chart__svg .label { + font-size: 12px; + font-weight: 600; +} +.tau-chart__svg .label .label-token { + font-size: 12px; + font-weight: 600; + text-transform: capitalize; +} +.tau-chart__svg .label .label-token-1, +.tau-chart__svg .label .label-token-2 { + font-weight: normal; +} +.tau-chart__svg .label .label-token-2 { + fill: gray; +} +.tau-chart__svg .label .label-token-delimiter { + font-weight: normal; + fill: gray; +} +.tau-chart__svg .label.inline .label-token { + font-weight: normal; + fill: gray; + text-transform: none; +} +.tau-chart__svg .brush .selection { + fill-opacity: 0.3; + stroke: #fff; + shape-rendering: crispEdges; +} +.tau-chart__svg .background { + stroke: #f2f2f2; +} +.tau-chart__dot { + opacity: 0.7; + stroke-width: 0; + transition: stroke-width 0.1s ease, opacity 0.2s ease; +} +.tau-chart__line { + fill: none; + transition: stroke-opacity 0.2s ease, stroke-width 0.2s ease; +} +.tau-chart__dot-line { + opacity: 1; + transition: stroke-opacity 0.2s ease; +} +.tau-chart__bar { + opacity: 0.7; + shape-rendering: geometricPrecision; + stroke-opacity: 0.5; + stroke-width: 1; + stroke: #fff; + transition: opacity 0.2s ease; +} +.tau-chart__area { + transition: opacity 0.2s ease; +} +.tau-chart__area path:not(.i-data-anchor), +.tau-chart__area polygon { + opacity: 0.6; + transition: stroke-opacity 0.2s ease, stroke-width 0.2s ease; +} +.tau-chart__svg .tau-chart__bar { + stroke: #fff; +} +.tau-chart__dot.tau-chart__highlighted { + stroke-width: 1; + opacity: 1; +} +.tau-chart__dot.tau-chart__dimmed { + opacity: 0.2; +} +.tau-chart__line.tau-chart__highlighted { + stroke-opacity: 1; + stroke-width: 3; +} +.tau-chart__line.tau-chart__dimmed { + stroke-opacity: 0.2; +} +.i-role-label.tau-chart__highlighted, +.tau-chart__area.tau-chart__highlighted, +.tau-chart__bar.tau-chart__highlighted { + stroke-opacity: 1; + opacity: 1; +} +.i-role-label.tau-chart__dimmed, +.tau-chart__area.tau-chart__dimmed, +.tau-chart__bar.tau-chart__dimmed { + opacity: 0.2; +} +.tau-chart__annotation-line { + stroke-width: 2px; + stroke-dasharray: 1,1; + shape-rendering: crispEdges; +} +.tau-chart__annotation-area.tau-chart__area polygon { + opacity: 0.1; +} +.tau-chart__category-filter { + box-sizing: border-box; + margin-right: 30px; + padding: 20px 0 10px 10px; + width: 160px; +} +.tau-chart__category-filter__category__label { + font-weight: 600; + font-size: 13px; + margin: 0 0 10px 10px; + text-transform: capitalize; +} +.tau-chart__category-filter__category__values { + margin-bottom: 10px; +} +.tau-chart__category-filter__value { + align-items: center; + color: #ccc; + cursor: pointer; + display: flex; + flex-direction: row; + font-size: 13px; + width: 100%; +} +.tau-chart__category-filter__value:hover { + background-color: rgba(189, 195, 205, 0.2); +} +.tau-chart__category-filter__value_checked { + color: #333; +} +.tau-chart__category-filter__value__toggle { + flex: none; + padding: 10px 10px 8px 10px; +} +.tau-chart__category-filter__value__toggle__icon { + background-color: transparent; + border: 1px solid #8694a3; + box-sizing: border-box; + border-radius: 50%; + display: inline-block; + height: 16px; + pointer-events: none; + position: relative; + width: 16px; +} +.tau-chart__category-filter__value__toggle__icon::before, +.tau-chart__category-filter__value__toggle__icon::after { + background-color: #333; + content: ""; + display: block; + opacity: 0; + position: absolute; +} +.tau-chart__category-filter__value__toggle__icon::before { + height: 2px; + left: 3px; + top: 6px; + width: 8px; +} +.tau-chart__category-filter__value__toggle__icon::after { + height: 8px; + left: 6px; + top: 3px; + width: 2px; +} +.tau-chart__category-filter__value__toggle:hover .tau-chart__category-filter__value__toggle__icon::before, +.tau-chart__category-filter__value__toggle:hover .tau-chart__category-filter__value__toggle__icon::after { + opacity: 1; +} +.tau-chart__category-filter__value_checked .tau-chart__category-filter__value__toggle__icon { + background-color: #8694a3; + border-color: transparent; +} +.tau-chart__category-filter__value_checked .tau-chart__category-filter__value__toggle__icon::before, +.tau-chart__category-filter__value_checked .tau-chart__category-filter__value__toggle__icon::after { + background-color: #fff; + transform: rotate(45deg); +} +.tau-chart__category-filter__value__label { + padding-left: 4px; +} +.tau-chart__layout .tau-crosshair__line { + shape-rendering: crispEdges; + stroke-dasharray: 1px 1px; + stroke-width: 1px; +} +.tau-chart__layout .tau-crosshair__label__text { + fill: #fff; + stroke: none; +} +.tau-chart__layout .tau-crosshair__label__text, +.tau-chart__layout .tau-crosshair__label__text-shadow { + font-size: 12px; + font-weight: normal; +} +.tau-chart__layout .tau-crosshair__line-shadow { + shape-rendering: crispEdges; + stroke: #cccccc; + stroke-width: 1px; +} +.tau-chart__layout .tau-crosshair__group.y .tau-crosshair__line-shadow { + transform: translateX(-0.5px); +} +.tau-chart__layout .tau-crosshair__group.x .tau-crosshair__line-shadow { + transform: translateY(0.5px); +} +.tau-chart__layout .tau-crosshair__label__text-shadow { + stroke-linejoin: round; + stroke-width: 3px; + visibility: hidden; +} +.tau-chart__layout .tau-crosshair__label__box { + fill-opacity: 0.85; + rx: 3px; + ry: 3px; + stroke: none; +} +.tau-chart__layout .tau-crosshair__line.color20-1 { + stroke: #6FA1D9; +} +.tau-chart__layout .tau-crosshair__label.color20-1 .tau-crosshair__label__text-shadow { + stroke: #6FA1D9; +} +.tau-chart__layout .tau-crosshair__label.color20-1 .tau-crosshair__label__box { + fill: #6FA1D9; +} +.tau-chart__layout .tau-crosshair__line.color20-2 { + stroke: #DF2B59; +} +.tau-chart__layout .tau-crosshair__label.color20-2 .tau-crosshair__label__text-shadow { + stroke: #DF2B59; +} +.tau-chart__layout .tau-crosshair__label.color20-2 .tau-crosshair__label__box { + fill: #DF2B59; +} +.tau-chart__layout .tau-crosshair__line.color20-3 { + stroke: #66DA26; +} +.tau-chart__layout .tau-crosshair__label.color20-3 .tau-crosshair__label__text-shadow { + stroke: #66DA26; +} +.tau-chart__layout .tau-crosshair__label.color20-3 .tau-crosshair__label__box { + fill: #66DA26; +} +.tau-chart__layout .tau-crosshair__line.color20-4 { + stroke: #4C3862; +} +.tau-chart__layout .tau-crosshair__label.color20-4 .tau-crosshair__label__text-shadow { + stroke: #4C3862; +} +.tau-chart__layout .tau-crosshair__label.color20-4 .tau-crosshair__label__box { + fill: #4C3862; +} +.tau-chart__layout .tau-crosshair__line.color20-5 { + stroke: #E5B011; +} +.tau-chart__layout .tau-crosshair__label.color20-5 .tau-crosshair__label__text-shadow { + stroke: #E5B011; +} +.tau-chart__layout .tau-crosshair__label.color20-5 .tau-crosshair__label__box { + fill: #E5B011; +} +.tau-chart__layout .tau-crosshair__line.color20-6 { + stroke: #3A3226; +} +.tau-chart__layout .tau-crosshair__label.color20-6 .tau-crosshair__label__text-shadow { + stroke: #3A3226; +} +.tau-chart__layout .tau-crosshair__label.color20-6 .tau-crosshair__label__box { + fill: #3A3226; +} +.tau-chart__layout .tau-crosshair__line.color20-7 { + stroke: #CB461A; +} +.tau-chart__layout .tau-crosshair__label.color20-7 .tau-crosshair__label__text-shadow { + stroke: #CB461A; +} +.tau-chart__layout .tau-crosshair__label.color20-7 .tau-crosshair__label__box { + fill: #CB461A; +} +.tau-chart__layout .tau-crosshair__line.color20-8 { + stroke: #C7CE23; +} +.tau-chart__layout .tau-crosshair__label.color20-8 .tau-crosshair__label__text-shadow { + stroke: #C7CE23; +} +.tau-chart__layout .tau-crosshair__label.color20-8 .tau-crosshair__label__box { + fill: #C7CE23; +} +.tau-chart__layout .tau-crosshair__line.color20-9 { + stroke: #7FCDC2; +} +.tau-chart__layout .tau-crosshair__label.color20-9 .tau-crosshair__label__text-shadow { + stroke: #7FCDC2; +} +.tau-chart__layout .tau-crosshair__label.color20-9 .tau-crosshair__label__box { + fill: #7FCDC2; +} +.tau-chart__layout .tau-crosshair__line.color20-10 { + stroke: #CCA1C8; +} +.tau-chart__layout .tau-crosshair__label.color20-10 .tau-crosshair__label__text-shadow { + stroke: #CCA1C8; +} +.tau-chart__layout .tau-crosshair__label.color20-10 .tau-crosshair__label__box { + fill: #CCA1C8; +} +.tau-chart__layout .tau-crosshair__line.color20-11 { + stroke: #C84CCE; +} +.tau-chart__layout .tau-crosshair__label.color20-11 .tau-crosshair__label__text-shadow { + stroke: #C84CCE; +} +.tau-chart__layout .tau-crosshair__label.color20-11 .tau-crosshair__label__box { + fill: #C84CCE; +} +.tau-chart__layout .tau-crosshair__line.color20-12 { + stroke: #54762E; +} +.tau-chart__layout .tau-crosshair__label.color20-12 .tau-crosshair__label__text-shadow { + stroke: #54762E; +} +.tau-chart__layout .tau-crosshair__label.color20-12 .tau-crosshair__label__box { + fill: #54762E; +} +.tau-chart__layout .tau-crosshair__line.color20-13 { + stroke: #746BC9; +} +.tau-chart__layout .tau-crosshair__label.color20-13 .tau-crosshair__label__text-shadow { + stroke: #746BC9; +} +.tau-chart__layout .tau-crosshair__label.color20-13 .tau-crosshair__label__box { + fill: #746BC9; +} +.tau-chart__layout .tau-crosshair__line.color20-14 { + stroke: #953441; +} +.tau-chart__layout .tau-crosshair__label.color20-14 .tau-crosshair__label__text-shadow { + stroke: #953441; +} +.tau-chart__layout .tau-crosshair__label.color20-14 .tau-crosshair__label__box { + fill: #953441; +} +.tau-chart__layout .tau-crosshair__line.color20-15 { + stroke: #5C7A76; +} +.tau-chart__layout .tau-crosshair__label.color20-15 .tau-crosshair__label__text-shadow { + stroke: #5C7A76; +} +.tau-chart__layout .tau-crosshair__label.color20-15 .tau-crosshair__label__box { + fill: #5C7A76; +} +.tau-chart__layout .tau-crosshair__line.color20-16 { + stroke: #C8BF87; +} +.tau-chart__layout .tau-crosshair__label.color20-16 .tau-crosshair__label__text-shadow { + stroke: #C8BF87; +} +.tau-chart__layout .tau-crosshair__label.color20-16 .tau-crosshair__label__box { + fill: #C8BF87; +} +.tau-chart__layout .tau-crosshair__line.color20-17 { + stroke: #BFC1C3; +} +.tau-chart__layout .tau-crosshair__label.color20-17 .tau-crosshair__label__text-shadow { + stroke: #BFC1C3; +} +.tau-chart__layout .tau-crosshair__label.color20-17 .tau-crosshair__label__box { + fill: #BFC1C3; +} +.tau-chart__layout .tau-crosshair__line.color20-18 { + stroke: #8E5C31; +} +.tau-chart__layout .tau-crosshair__label.color20-18 .tau-crosshair__label__text-shadow { + stroke: #8E5C31; +} +.tau-chart__layout .tau-crosshair__label.color20-18 .tau-crosshair__label__box { + fill: #8E5C31; +} +.tau-chart__layout .tau-crosshair__line.color20-19 { + stroke: #71CE7B; +} +.tau-chart__layout .tau-crosshair__label.color20-19 .tau-crosshair__label__text-shadow { + stroke: #71CE7B; +} +.tau-chart__layout .tau-crosshair__label.color20-19 .tau-crosshair__label__box { + fill: #71CE7B; +} +.tau-chart__layout .tau-crosshair__line.color20-20 { + stroke: #BE478B; +} +.tau-chart__layout .tau-crosshair__label.color20-20 .tau-crosshair__label__text-shadow { + stroke: #BE478B; +} +.tau-chart__layout .tau-crosshair__label.color20-20 .tau-crosshair__label__box { + fill: #BE478B; +} +.diff-tooltip__table { + border-top: 1px solid rgba(51, 51, 51, 0.2); + margin-top: 5px; + padding-top: 5px; + width: calc(100% + 15px); +} +.diff-tooltip__header { + align-items: stretch; + display: flex; + font-weight: 600; + justify-content: space-between; + padding: 2px 0px; + position: relative; +} +.diff-tooltip__header__text { + align-items: center; + display: inline-flex; + flex: 1 1 auto; + justify-content: flex-start; + max-width: 120px; +} +.diff-tooltip__header__value { + align-items: center; + display: inline-flex; + flex: 1 1 auto; + justify-content: flex-end; + margin-right: 15px; + max-width: 120px; + padding-left: 10px; + text-align: right; +} +.diff-tooltip__header__updown { + align-items: center; + display: inline-flex; + flex: 1 1 auto; + font-size: 75%; + height: 100%; + justify-content: flex-start; + padding-left: 2px; + position: absolute; + right: 0; + visibility: hidden; +} +.diff-tooltip__body { + max-height: 250px; + overflow: hidden; + padding: 1px; + position: relative; +} +.diff-tooltip__body__content { + padding-bottom: 1px; +} +.diff-tooltip__body_overflow-top::before, +.diff-tooltip__body_overflow-bottom::after { + align-items: center; + color: rgba(51, 51, 51, 0.7); + content: "..."; + display: flex; + flex-direction: column; + height: 26px; + left: 0; + position: absolute; + width: 100%; + z-index: 2; +} +.diff-tooltip__body_overflow-top::before { + background: linear-gradient(to bottom, #fff, rgba(255, 255, 255, 0)); + justify-content: flex-start; + top: 0; +} +.diff-tooltip__body_overflow-bottom::after { + background: linear-gradient(to top, #fff, rgba(255, 255, 255, 0)); + justify-content: flex-end; + bottom: 0; +} +.diff-tooltip__item { + display: flex; + justify-content: space-between; + margin-right: 15px; + min-width: 100px; + position: relative; +} +.diff-tooltip__item_highlighted { + background-color: rgba(241, 233, 255, 0.5); + box-shadow: 0 0 0 1px #877aa1; + z-index: 1; +} +.diff-tooltip__item__bg { + align-items: center; + display: inline-flex; + height: 100%; + justify-content: center; + min-width: 3px; + opacity: 0.6; + position: absolute; + z-index: 0; +} +.diff-tooltip__item__text { + flex: 1 1 auto; + overflow: hidden; + padding: 2px 4px; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + z-index: 1; +} +.diff-tooltip__item__value { + flex: none; + display: table-cell; + padding: 2px 4px 2px 30px; + z-index: 1; +} +.diff-tooltip__item__updown { + align-items: center; + display: inline-flex; + flex: 4; + justify-content: flex-start; + left: 100%; + height: 100%; + padding: 0 4px 0 4px; + position: absolute; +} +.diff-tooltip__item__updown_positive { + color: #4ca383; +} +.diff-tooltip__item__updown_negative { + color: #df6772; +} +.diff-tooltip__field__updown_positive { + color: #4ca383; +} +.diff-tooltip__field__updown_negative { + color: #df6772; +} +.interval-highlight__range { + shape-rendering: crispEdges; +} +.interval-highlight__range-start { + shape-rendering: crispEdges; + stroke: #b8aecb; + stroke-dasharray: 2 1; +} +.interval-highlight__range-end { + shape-rendering: crispEdges; + stroke: #b8aecb; +} +.interval-highlight__gradient-start { + stop-color: #c4b3e6; + stop-opacity: 0.02; +} +.interval-highlight__gradient-end { + stop-color: #c4b3e6; + stop-opacity: 0.2; +} +.diff-tooltip__item__bg.color20-1 { + background-color: #6FA1D9; +} +.diff-tooltip__item__bg.color20-2 { + background-color: #DF2B59; +} +.diff-tooltip__item__bg.color20-3 { + background-color: #66DA26; +} +.diff-tooltip__item__bg.color20-4 { + background-color: #4C3862; +} +.diff-tooltip__item__bg.color20-5 { + background-color: #E5B011; +} +.diff-tooltip__item__bg.color20-6 { + background-color: #3A3226; +} +.diff-tooltip__item__bg.color20-7 { + background-color: #CB461A; +} +.diff-tooltip__item__bg.color20-8 { + background-color: #C7CE23; +} +.diff-tooltip__item__bg.color20-9 { + background-color: #7FCDC2; +} +.diff-tooltip__item__bg.color20-10 { + background-color: #CCA1C8; +} +.diff-tooltip__item__bg.color20-11 { + background-color: #C84CCE; +} +.diff-tooltip__item__bg.color20-12 { + background-color: #54762E; +} +.diff-tooltip__item__bg.color20-13 { + background-color: #746BC9; +} +.diff-tooltip__item__bg.color20-14 { + background-color: #953441; +} +.diff-tooltip__item__bg.color20-15 { + background-color: #5C7A76; +} +.diff-tooltip__item__bg.color20-16 { + background-color: #C8BF87; +} +.diff-tooltip__item__bg.color20-17 { + background-color: #BFC1C3; +} +.diff-tooltip__item__bg.color20-18 { + background-color: #8E5C31; +} +.diff-tooltip__item__bg.color20-19 { + background-color: #71CE7B; +} +.diff-tooltip__item__bg.color20-20 { + background-color: #BE478B; +} +.tau-chart__print-block { + display: none; +} +.tau-chart__export { + float: right; + margin: 0 20px 0 0; + display: block; + text-indent: 20px; + overflow: hidden; + background-repeat: no-repeat; + background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+ZXhwb3J0PC90aXRsZT48ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxnIGZpbGw9IiMwMDAiPjxwYXRoIGQ9Ik0xNyAxLjY3bC04LjMyOCA4LjM2Nkw4IDkuNSAxNi4zNTMgMUgxMlYwaDZ2NmgtMVYxLjY3eiIgb3BhY2l0eT0iLjgiLz48cGF0aCBkPSJNMCA1LjAxQzAgMy4zNDYgMS4zMzcgMiAzLjAxIDJIMTZ2MTIuOTljMCAxLjY2My0xLjMzNyAzLjAxLTMuMDEgMy4wMUgzLjAxQzEuMzQ2IDE4IDAgMTYuNjYzIDAgMTQuOTlWNS4wMXpNMTUgMTVDMTUgMTYuMTA1IDE0LjEwMyAxNyAxMi45OTQgMTdIMy4wMDZDMS44OTggMTcgMSAxNi4xMDMgMSAxNC45OTRWNS4wMDZDMSAzLjg5OCAxLjg4NyAzIDIuOTk4IDNIOVYyaDd2N2gtMXY2LjAwMnoiIG9wYWNpdHk9Ii40Ii8+PC9nPjwvZz48L3N2Zz4=); + width: 20px; + height: 20px; + color: transparent; + opacity: 0.6; + cursor: pointer; + text-decoration: none; + position: relative; + z-index: 2; +} +.tau-chart__export:hover { + opacity: 1; + text-decoration: none; +} +.tau-chart__export__list { + font-size: 11px; + margin: 0; + padding: 0; +} +.tau-chart__export__item { + overflow: hidden; + box-sizing: border-box; +} +.tau-chart__export__item > a { + display: block; + padding: 7px 15px; + color: inherit; + text-decoration: none; + cursor: pointer; +} +.tau-chart__export__item > a:hover, +.tau-chart__export__item > a:focus { + background: #EAF2FC; + outline: none; + box-shadow: none; +} +.tau-chart__legend { + padding: 20px 0 10px 10px; + position: relative; + margin-right: 30px; + width: 160px; + box-sizing: border-box; +} +.tau-chart__legend__wrap { + margin-bottom: 30px; + position: relative; +} +.tau-chart__legend__wrap:last-child { + margin-bottom: 0; +} +.tau-chart__legend__title { + margin: 0 0 10px 10px; + text-transform: capitalize; + font-weight: 600; + font-size: 13px; +} +.tau-chart__legend__reset { + margin-top: -4px; + position: absolute; + right: -25px; + top: 0; + z-index: 1; +} +.tau-chart__legend__reset.disabled { + display: none; +} +.tau-chart__legend__reset + .tau-chart__legend__title { + margin-right: 1.7em; +} +.tau-chart__legend__item { + padding: 10px 20px 8px 40px; + position: relative; + font-size: 13px; + line-height: 1.2em; + cursor: pointer; +} +.tau-chart__legend__item:hover { + background-color: rgba(189, 195, 205, 0.2); +} +.tau-chart__legend__item--size { + cursor: default; +} +.tau-chart__legend__item--size:hover { + background: none; +} +.tau-chart__legend__item .color-default { + background: #6FA1D9; + border-color: #6FA1D9; +} +.tau-chart__legend__item:disabled, +.tau-chart__legend__item.disabled { + color: #ccc; +} +.tau-chart__legend__item.disabled .tau-chart__legend__guide { + background: transparent; +} +.tau-chart__legend__guide { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + border: 1px solid transparent; + border-radius: 50%; +} +.tau-chart__legend__guide__wrap { + position: absolute; + top: calc((10px - 8px) + 0.6em); + left: 10px; + width: 16px; + height: 16px; +} +.tau-chart__legend__guide--size { + stroke: #6FA1D9; + fill: #6FA1D9; +} +.tau-chart__legend__guide--color__overlay { + background-color: transparent; + height: 36px; + left: -12px; + position: absolute; + top: -12px; + width: 36px; +} +.tau-chart__legend__guide--color::before { + content: ""; + display: none; + height: 2px; + left: 3px; + pointer-events: none; + position: absolute; + top: 6px; + width: 8px; +} +.tau-chart__legend__guide--color::after { + content: ""; + display: none; + height: 8px; + left: 6px; + pointer-events: none; + position: absolute; + top: 3px; + width: 2px; +} +.tau-chart__legend__item .tau-chart__legend__guide--color:hover::before, +.tau-chart__legend__item .tau-chart__legend__guide--color:hover::after { + background-color: #fff; + display: inline-block; + transform: rotate(45deg); +} +.tau-chart__legend__item.disabled .tau-chart__legend__guide--color:hover { + background: #fff; +} +.tau-chart__legend__item.disabled .tau-chart__legend__guide--color:hover::before, +.tau-chart__legend__item.disabled .tau-chart__legend__guide--color:hover::after { + background-color: #333; + transform: none; +} +.tau-chart__legend__size-wrapper, +.tau-chart__legend__gradient-wrapper { + box-sizing: border-box; + margin: 10px; + overflow: visible; + width: 100%; +} +.tau-chart__legend__size, +.tau-chart__legend__gradient { + overflow: visible; +} +.tau-chart__legend__size__item__circle.color-definite { + stroke: #cacaca; + fill: #cacaca; +} +.tau-chart__legend__size__item__circle.color-default-size { + stroke: #6FA1D9; + fill: #6FA1D9; +} +.tau-chart__legend__gradient__bar { + rx: 4px; + ry: 4px; +} +.tau-chart__legend__item .color20-1 { + background: #6FA1D9; + border: 1px solid #6FA1D9; +} +.tau-chart__legend__item.disabled .color20-1 { + background-color: transparent; +} +.tau-chart__legend__item .color20-2 { + background: #DF2B59; + border: 1px solid #DF2B59; +} +.tau-chart__legend__item.disabled .color20-2 { + background-color: transparent; +} +.tau-chart__legend__item .color20-3 { + background: #66DA26; + border: 1px solid #66DA26; +} +.tau-chart__legend__item.disabled .color20-3 { + background-color: transparent; +} +.tau-chart__legend__item .color20-4 { + background: #4C3862; + border: 1px solid #4C3862; +} +.tau-chart__legend__item.disabled .color20-4 { + background-color: transparent; +} +.tau-chart__legend__item .color20-5 { + background: #E5B011; + border: 1px solid #E5B011; +} +.tau-chart__legend__item.disabled .color20-5 { + background-color: transparent; +} +.tau-chart__legend__item .color20-6 { + background: #3A3226; + border: 1px solid #3A3226; +} +.tau-chart__legend__item.disabled .color20-6 { + background-color: transparent; +} +.tau-chart__legend__item .color20-7 { + background: #CB461A; + border: 1px solid #CB461A; +} +.tau-chart__legend__item.disabled .color20-7 { + background-color: transparent; +} +.tau-chart__legend__item .color20-8 { + background: #C7CE23; + border: 1px solid #C7CE23; +} +.tau-chart__legend__item.disabled .color20-8 { + background-color: transparent; +} +.tau-chart__legend__item .color20-9 { + background: #7FCDC2; + border: 1px solid #7FCDC2; +} +.tau-chart__legend__item.disabled .color20-9 { + background-color: transparent; +} +.tau-chart__legend__item .color20-10 { + background: #CCA1C8; + border: 1px solid #CCA1C8; +} +.tau-chart__legend__item.disabled .color20-10 { + background-color: transparent; +} +.tau-chart__legend__item .color20-11 { + background: #C84CCE; + border: 1px solid #C84CCE; +} +.tau-chart__legend__item.disabled .color20-11 { + background-color: transparent; +} +.tau-chart__legend__item .color20-12 { + background: #54762E; + border: 1px solid #54762E; +} +.tau-chart__legend__item.disabled .color20-12 { + background-color: transparent; +} +.tau-chart__legend__item .color20-13 { + background: #746BC9; + border: 1px solid #746BC9; +} +.tau-chart__legend__item.disabled .color20-13 { + background-color: transparent; +} +.tau-chart__legend__item .color20-14 { + background: #953441; + border: 1px solid #953441; +} +.tau-chart__legend__item.disabled .color20-14 { + background-color: transparent; +} +.tau-chart__legend__item .color20-15 { + background: #5C7A76; + border: 1px solid #5C7A76; +} +.tau-chart__legend__item.disabled .color20-15 { + background-color: transparent; +} +.tau-chart__legend__item .color20-16 { + background: #C8BF87; + border: 1px solid #C8BF87; +} +.tau-chart__legend__item.disabled .color20-16 { + background-color: transparent; +} +.tau-chart__legend__item .color20-17 { + background: #BFC1C3; + border: 1px solid #BFC1C3; +} +.tau-chart__legend__item.disabled .color20-17 { + background-color: transparent; +} +.tau-chart__legend__item .color20-18 { + background: #8E5C31; + border: 1px solid #8E5C31; +} +.tau-chart__legend__item.disabled .color20-18 { + background-color: transparent; +} +.tau-chart__legend__item .color20-19 { + background: #71CE7B; + border: 1px solid #71CE7B; +} +.tau-chart__legend__item.disabled .color20-19 { + background-color: transparent; +} +.tau-chart__legend__item .color20-20 { + background: #BE478B; + border: 1px solid #BE478B; +} +.tau-chart__legend__item.disabled .color20-20 { + background-color: transparent; +} +.tau-chart__filter__wrap { + padding: 20px 0 10px 10px; + margin-right: 30px; + width: 160px; + box-sizing: border-box; +} +.tau-chart__filter__wrap__title { + margin: 0 0 10px 10px; + text-transform: capitalize; + font-weight: 600; + font-size: 13px; +} +.tau-chart__filter__wrap rect { + fill: rgba(0, 0, 0, 0.2); +} +.tau-chart__filter__wrap .brush .overlay, +.tau-chart__filter__wrap .brush .handle { + opacity: 0; +} +.tau-chart__filter__wrap .brush .selection { + shape-rendering: crispEdges; + fill-opacity: 0.4; + fill: #0074FF; +} +.tau-chart__filter__wrap text.date-label { + text-anchor: middle; + font-size: 12px; +} +.tau-chart__filter__wrap text.date-label .common { + font-weight: 600; +} +.tau-chart__filter__wrap .resize line { + stroke: #000; + stroke-width: 1px; + shape-rendering: crispEdges; +} +.tau-chart__filter__wrap .resize.e text { + text-anchor: middle; + font-size: 12px; +} +.tau-chart__filter__wrap .resize.w text { + text-anchor: middle; + font-size: 12px; +} +.tau-chart__tooltip { + background: rgba(255, 255, 255, 0.9); + position: absolute; + top: 0; + left: 0; + max-width: none; + z-index: 900; + align-items: stretch; + display: flex; + flex-direction: column; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.005); + font-size: 11px; + font-family: Helvetica Neue, Segoe UI, Open Sans, Ubuntu, sans-serif; + /* Fade */ +} +.tau-chart__tooltip.fade { + opacity: 0; + transition: opacity 200ms ease-out; +} +.tau-chart__tooltip.fade.in { + opacity: 1; + transition-duration: 500ms; +} +.tau-chart__tooltip.top-right, +.tau-chart__tooltip.bottom-right { + margin-left: 8px; +} +.tau-chart__tooltip.top-left, +.tau-chart__tooltip.bottom-left { + margin-left: -8px; +} +.tau-chart__tooltip.top, +.tau-chart__tooltip.top-right, +.tau-chart__tooltip.top-left { + margin-top: 8px; +} +.tau-chart__tooltip__content { + box-sizing: border-box; + max-width: 500px; + min-width: 100px; + overflow: hidden; + padding: 15px 15px 10px 15px; +} +.tau-chart__tooltip__buttons { + background: #EBEEF1; + bottom: 100%; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.005); + display: flex; + flex-direction: row; + flex-wrap: wrap; + max-width: 500px; + min-width: 86px; + position: absolute; + width: 100%; + z-index: -1; +} +.tau-chart__tooltip__buttons::after { + background: linear-gradient(to bottom, #fff 50%, rgba(255, 255, 255, 0)); + content: ""; + display: block; + height: 8px; + left: 0; + pointer-events: none; + position: absolute; + top: 100%; + width: 100%; +} +.tau-chart__tooltip__button { + color: #65717F; + cursor: pointer; + display: inline-flex; + flex: 1 0 auto; + height: 0; + overflow: hidden; + transition: height 500ms; +} +.tau-chart__tooltip__button__wrap { + line-height: 26px; + padding: 0 15px; +} +.tau-chart__tooltip__button:hover { + background: #f5f7f8; + color: #333; +} +.tau-chart__tooltip__button .tau-icon-close-gray { + background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIzMHB4IiBoZWlnaHQ9IjMwcHgiIHZpZXdCb3g9IjAgMCAzMCAzMCI+PHBhdGggZmlsbD0iIzg0OTZBNyIgZD0iTTEwLDAuNzE1TDkuMjg1LDBMNSw0LjI4NUwwLjcxNSwwTDAsMC43MTVMNC4yODUsNUwwLDkuMjg1TDAuNzE1LDEwTDUsNS43MTVMOS4yODUsMTBMMTAsOS4yODVMNS43MTUsNUwxMCwwLjcxNXoiLz48L3N2Zz4=); + display: inline-block; + width: 12px; + height: 12px; + position: relative; + top: 3px; + margin-right: 5px; +} +.tau-chart__tooltip.stuck .tau-chart__tooltip__button { + height: 26px; +} +.tau-chart__tooltip.top .tau-chart__tooltip__buttons, +.tau-chart__tooltip.top-right .tau-chart__tooltip__buttons, +.tau-chart__tooltip.top-left .tau-chart__tooltip__buttons { + bottom: initial; + top: 100%; +} +.tau-chart__tooltip.top .tau-chart__tooltip__buttons__wrap, +.tau-chart__tooltip.top-right .tau-chart__tooltip__buttons__wrap, +.tau-chart__tooltip.top-left .tau-chart__tooltip__buttons__wrap { + position: relative; + top: calc(100% - 26px); +} +.tau-chart__tooltip.top .tau-chart__tooltip__buttons::after, +.tau-chart__tooltip.top-right .tau-chart__tooltip__buttons::after, +.tau-chart__tooltip.top-left .tau-chart__tooltip__buttons::after { + background: linear-gradient(to top, #fff 50%, rgba(255, 255, 255, 0)); + bottom: 100%; + top: initial; +} +.tau-chart__tooltip.top-right .tau-chart__tooltip__button__wrap, +.tau-chart__tooltip.top-left .tau-chart__tooltip__button__wrap { + position: relative; + top: calc(100% - 26px); +} +.tau-chart__tooltip__list { + display: table; +} +.tau-chart__tooltip__list__item { + display: table-row; +} +.tau-chart__tooltip__list__elem { + display: table-cell; + padding-bottom: 4px; + line-height: 1.3; + color: #000; +} +.tau-chart__tooltip__list__elem:not(:first-child) { + padding-left: 15px; +} +.tau-chart__tooltip__list__elem:first-child { + color: #8e8e8e; +} +.tau-chart__tooltip__gray-text { + color: #8e8e8e; +} +.tau-chart__tooltip-target { + cursor: pointer; +} +.tau-chart__tooltip-target .tau-chart__dot.tau-chart__highlighted, +.tau-chart__tooltip-target .tau-chart__bar.tau-chart__highlighted, +.tau-chart__tooltip-target .i-data-anchor.tau-chart__highlighted { + stroke: #333; + stroke-width: 1; +} +.tau-chart__tooltip-target .tau-chart__bar.tau-chart__highlighted { + shape-rendering: crispEdges; +} +.tau-chart__svg .tau-chart__trendline.color20-1 { + stroke: #357ac7; +} +.tau-chart__svg .tau-chart__trendline.color20-2 { + stroke: #a5193d; +} +.tau-chart__svg .tau-chart__trendline.color20-3 { + stroke: #47991a; +} +.tau-chart__svg .tau-chart__trendline.color20-4 { + stroke: #261c31; +} +.tau-chart__svg .tau-chart__trendline.color20-5 { + stroke: #9e790c; +} +.tau-chart__svg .tau-chart__trendline.color20-6 { + stroke: #0c0a08; +} +.tau-chart__svg .tau-chart__trendline.color20-7 { + stroke: #872f11; +} +.tau-chart__svg .tau-chart__trendline.color20-8 { + stroke: #888d18; +} +.tau-chart__svg .tau-chart__trendline.color20-9 { + stroke: #48b8a8; +} +.tau-chart__svg .tau-chart__trendline.color20-10 { + stroke: #b16fab; +} +.tau-chart__svg .tau-chart__trendline.color20-11 { + stroke: #9c2ca1; +} +.tau-chart__svg .tau-chart__trendline.color20-12 { + stroke: #2d3f19; +} +.tau-chart__svg .tau-chart__trendline.color20-13 { + stroke: #483eaa; +} +.tau-chart__svg .tau-chart__trendline.color20-14 { + stroke: #5c2028; +} +.tau-chart__svg .tau-chart__trendline.color20-15 { + stroke: #3b4e4c; +} +.tau-chart__svg .tau-chart__trendline.color20-16 { + stroke: #b0a353; +} +.tau-chart__svg .tau-chart__trendline.color20-17 { + stroke: #989b9e; +} +.tau-chart__svg .tau-chart__trendline.color20-18 { + stroke: #55371d; +} +.tau-chart__svg .tau-chart__trendline.color20-19 { + stroke: #3eb44b; +} +.tau-chart__svg .tau-chart__trendline.color20-20 { + stroke: #883063; +} +.tau-chart__svg .tau-chart__trendline.color-default { + stroke: #357ac7; +} +.tau-chart { + /* TrendLine */ +} +.tau-chart__trendlinepanel { + padding: 20px 0 20px 20px; + margin-right: 20px; + width: 160px; + box-sizing: border-box; +} +.tau-chart__trendlinepanel__title { + margin: 0 0 10px 0; + text-transform: capitalize; + font-weight: 600; + font-size: 13px; +} +.tau-chart__trendlinepanel__control { + width: 100%; +} +.tau-chart__trendlinepanel__error-message { + font-size: 11px; + line-height: 16px; + margin-left: 5px; +} +.tau-chart__trendlinepanel.applicable-false.hide-trendline-error, +.tau-chart__trendlinepanel.applicable-false .tau-chart__checkbox__input, +.tau-chart__trendlinepanel.applicable-false .tau-chart__trendlinepanel__control, +.tau-chart__trendlinepanel.applicable-false .tau-chart__checkbox__icon { + display: none; +} +.tau-chart__trendline { + stroke-dasharray: 4, 4; +} +/* This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/). */ +/* + generate from addons color-brewer.js + copy(_.flatten(_.map(res, function(value, hue){ + return _.map(value, function(value, number) { + return _.map(value,function(value,index) { + return ['.', hue, '.', 'q', index, '-', number, '{fill:', value, ';stroke:', value, ';}'].join(''); + }) + }) +})).join('')) +*/ +.YlGn.q0-3 { + fill: #f7fcb9; + background: #f7fcb9; + stroke: #f7fcb9; +} +.YlGn.q1-3 { + fill: #addd8e; + background: #addd8e; + stroke: #addd8e; +} +.YlGn.q2-3 { + fill: #31a354; + background: #31a354; + stroke: #31a354; +} +.YlGn.q0-4 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGn.q1-4 { + fill: #c2e699; + background: #c2e699; + stroke: #c2e699; +} +.YlGn.q2-4 { + fill: #78c679; + background: #78c679; + stroke: #78c679; +} +.YlGn.q3-4 { + fill: #238443; + background: #238443; + stroke: #238443; +} +.YlGn.q0-5 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGn.q1-5 { + fill: #c2e699; + background: #c2e699; + stroke: #c2e699; +} +.YlGn.q2-5 { + fill: #78c679; + background: #78c679; + stroke: #78c679; +} +.YlGn.q3-5 { + fill: #31a354; + background: #31a354; + stroke: #31a354; +} +.YlGn.q4-5 { + fill: #006837; + background: #006837; + stroke: #006837; +} +.YlGn.q0-6 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGn.q1-6 { + fill: #d9f0a3; + background: #d9f0a3; + stroke: #d9f0a3; +} +.YlGn.q2-6 { + fill: #addd8e; + background: #addd8e; + stroke: #addd8e; +} +.YlGn.q3-6 { + fill: #78c679; + background: #78c679; + stroke: #78c679; +} +.YlGn.q4-6 { + fill: #31a354; + background: #31a354; + stroke: #31a354; +} +.YlGn.q5-6 { + fill: #006837; + background: #006837; + stroke: #006837; +} +.YlGn.q0-7 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGn.q1-7 { + fill: #d9f0a3; + background: #d9f0a3; + stroke: #d9f0a3; +} +.YlGn.q2-7 { + fill: #addd8e; + background: #addd8e; + stroke: #addd8e; +} +.YlGn.q3-7 { + fill: #78c679; + background: #78c679; + stroke: #78c679; +} +.YlGn.q4-7 { + fill: #41ab5d; + background: #41ab5d; + stroke: #41ab5d; +} +.YlGn.q5-7 { + fill: #238443; + background: #238443; + stroke: #238443; +} +.YlGn.q6-7 { + fill: #005a32; + background: #005a32; + stroke: #005a32; +} +.YlGn.q0-8 { + fill: #ffffe5; + background: #ffffe5; + stroke: #ffffe5; +} +.YlGn.q1-8 { + fill: #f7fcb9; + background: #f7fcb9; + stroke: #f7fcb9; +} +.YlGn.q2-8 { + fill: #d9f0a3; + background: #d9f0a3; + stroke: #d9f0a3; +} +.YlGn.q3-8 { + fill: #addd8e; + background: #addd8e; + stroke: #addd8e; +} +.YlGn.q4-8 { + fill: #78c679; + background: #78c679; + stroke: #78c679; +} +.YlGn.q5-8 { + fill: #41ab5d; + background: #41ab5d; + stroke: #41ab5d; +} +.YlGn.q6-8 { + fill: #238443; + background: #238443; + stroke: #238443; +} +.YlGn.q7-8 { + fill: #005a32; + background: #005a32; + stroke: #005a32; +} +.YlGn.q0-9 { + fill: #ffffe5; + background: #ffffe5; + stroke: #ffffe5; +} +.YlGn.q1-9 { + fill: #f7fcb9; + background: #f7fcb9; + stroke: #f7fcb9; +} +.YlGn.q2-9 { + fill: #d9f0a3; + background: #d9f0a3; + stroke: #d9f0a3; +} +.YlGn.q3-9 { + fill: #addd8e; + background: #addd8e; + stroke: #addd8e; +} +.YlGn.q4-9 { + fill: #78c679; + background: #78c679; + stroke: #78c679; +} +.YlGn.q5-9 { + fill: #41ab5d; + background: #41ab5d; + stroke: #41ab5d; +} +.YlGn.q6-9 { + fill: #238443; + background: #238443; + stroke: #238443; +} +.YlGn.q7-9 { + fill: #006837; + background: #006837; + stroke: #006837; +} +.YlGn.q8-9 { + fill: #004529; + background: #004529; + stroke: #004529; +} +.YlGnBu.q0-3 { + fill: #edf8b1; + background: #edf8b1; + stroke: #edf8b1; +} +.YlGnBu.q1-3 { + fill: #7fcdbb; + background: #7fcdbb; + stroke: #7fcdbb; +} +.YlGnBu.q2-3 { + fill: #2c7fb8; + background: #2c7fb8; + stroke: #2c7fb8; +} +.YlGnBu.q0-4 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGnBu.q1-4 { + fill: #a1dab4; + background: #a1dab4; + stroke: #a1dab4; +} +.YlGnBu.q2-4 { + fill: #41b6c4; + background: #41b6c4; + stroke: #41b6c4; +} +.YlGnBu.q3-4 { + fill: #225ea8; + background: #225ea8; + stroke: #225ea8; +} +.YlGnBu.q0-5 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGnBu.q1-5 { + fill: #a1dab4; + background: #a1dab4; + stroke: #a1dab4; +} +.YlGnBu.q2-5 { + fill: #41b6c4; + background: #41b6c4; + stroke: #41b6c4; +} +.YlGnBu.q3-5 { + fill: #2c7fb8; + background: #2c7fb8; + stroke: #2c7fb8; +} +.YlGnBu.q4-5 { + fill: #253494; + background: #253494; + stroke: #253494; +} +.YlGnBu.q0-6 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGnBu.q1-6 { + fill: #c7e9b4; + background: #c7e9b4; + stroke: #c7e9b4; +} +.YlGnBu.q2-6 { + fill: #7fcdbb; + background: #7fcdbb; + stroke: #7fcdbb; +} +.YlGnBu.q3-6 { + fill: #41b6c4; + background: #41b6c4; + stroke: #41b6c4; +} +.YlGnBu.q4-6 { + fill: #2c7fb8; + background: #2c7fb8; + stroke: #2c7fb8; +} +.YlGnBu.q5-6 { + fill: #253494; + background: #253494; + stroke: #253494; +} +.YlGnBu.q0-7 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlGnBu.q1-7 { + fill: #c7e9b4; + background: #c7e9b4; + stroke: #c7e9b4; +} +.YlGnBu.q2-7 { + fill: #7fcdbb; + background: #7fcdbb; + stroke: #7fcdbb; +} +.YlGnBu.q3-7 { + fill: #41b6c4; + background: #41b6c4; + stroke: #41b6c4; +} +.YlGnBu.q4-7 { + fill: #1d91c0; + background: #1d91c0; + stroke: #1d91c0; +} +.YlGnBu.q5-7 { + fill: #225ea8; + background: #225ea8; + stroke: #225ea8; +} +.YlGnBu.q6-7 { + fill: #0c2c84; + background: #0c2c84; + stroke: #0c2c84; +} +.YlGnBu.q0-8 { + fill: #ffffd9; + background: #ffffd9; + stroke: #ffffd9; +} +.YlGnBu.q1-8 { + fill: #edf8b1; + background: #edf8b1; + stroke: #edf8b1; +} +.YlGnBu.q2-8 { + fill: #c7e9b4; + background: #c7e9b4; + stroke: #c7e9b4; +} +.YlGnBu.q3-8 { + fill: #7fcdbb; + background: #7fcdbb; + stroke: #7fcdbb; +} +.YlGnBu.q4-8 { + fill: #41b6c4; + background: #41b6c4; + stroke: #41b6c4; +} +.YlGnBu.q5-8 { + fill: #1d91c0; + background: #1d91c0; + stroke: #1d91c0; +} +.YlGnBu.q6-8 { + fill: #225ea8; + background: #225ea8; + stroke: #225ea8; +} +.YlGnBu.q7-8 { + fill: #0c2c84; + background: #0c2c84; + stroke: #0c2c84; +} +.YlGnBu.q0-9 { + fill: #ffffd9; + background: #ffffd9; + stroke: #ffffd9; +} +.YlGnBu.q1-9 { + fill: #edf8b1; + background: #edf8b1; + stroke: #edf8b1; +} +.YlGnBu.q2-9 { + fill: #c7e9b4; + background: #c7e9b4; + stroke: #c7e9b4; +} +.YlGnBu.q3-9 { + fill: #7fcdbb; + background: #7fcdbb; + stroke: #7fcdbb; +} +.YlGnBu.q4-9 { + fill: #41b6c4; + background: #41b6c4; + stroke: #41b6c4; +} +.YlGnBu.q5-9 { + fill: #1d91c0; + background: #1d91c0; + stroke: #1d91c0; +} +.YlGnBu.q6-9 { + fill: #225ea8; + background: #225ea8; + stroke: #225ea8; +} +.YlGnBu.q7-9 { + fill: #253494; + background: #253494; + stroke: #253494; +} +.YlGnBu.q8-9 { + fill: #081d58; + background: #081d58; + stroke: #081d58; +} +.GnBu.q0-3 { + fill: #e0f3db; + background: #e0f3db; + stroke: #e0f3db; +} +.GnBu.q1-3 { + fill: #a8ddb5; + background: #a8ddb5; + stroke: #a8ddb5; +} +.GnBu.q2-3 { + fill: #43a2ca; + background: #43a2ca; + stroke: #43a2ca; +} +.GnBu.q0-4 { + fill: #f0f9e8; + background: #f0f9e8; + stroke: #f0f9e8; +} +.GnBu.q1-4 { + fill: #bae4bc; + background: #bae4bc; + stroke: #bae4bc; +} +.GnBu.q2-4 { + fill: #7bccc4; + background: #7bccc4; + stroke: #7bccc4; +} +.GnBu.q3-4 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.GnBu.q0-5 { + fill: #f0f9e8; + background: #f0f9e8; + stroke: #f0f9e8; +} +.GnBu.q1-5 { + fill: #bae4bc; + background: #bae4bc; + stroke: #bae4bc; +} +.GnBu.q2-5 { + fill: #7bccc4; + background: #7bccc4; + stroke: #7bccc4; +} +.GnBu.q3-5 { + fill: #43a2ca; + background: #43a2ca; + stroke: #43a2ca; +} +.GnBu.q4-5 { + fill: #0868ac; + background: #0868ac; + stroke: #0868ac; +} +.GnBu.q0-6 { + fill: #f0f9e8; + background: #f0f9e8; + stroke: #f0f9e8; +} +.GnBu.q1-6 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.GnBu.q2-6 { + fill: #a8ddb5; + background: #a8ddb5; + stroke: #a8ddb5; +} +.GnBu.q3-6 { + fill: #7bccc4; + background: #7bccc4; + stroke: #7bccc4; +} +.GnBu.q4-6 { + fill: #43a2ca; + background: #43a2ca; + stroke: #43a2ca; +} +.GnBu.q5-6 { + fill: #0868ac; + background: #0868ac; + stroke: #0868ac; +} +.GnBu.q0-7 { + fill: #f0f9e8; + background: #f0f9e8; + stroke: #f0f9e8; +} +.GnBu.q1-7 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.GnBu.q2-7 { + fill: #a8ddb5; + background: #a8ddb5; + stroke: #a8ddb5; +} +.GnBu.q3-7 { + fill: #7bccc4; + background: #7bccc4; + stroke: #7bccc4; +} +.GnBu.q4-7 { + fill: #4eb3d3; + background: #4eb3d3; + stroke: #4eb3d3; +} +.GnBu.q5-7 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.GnBu.q6-7 { + fill: #08589e; + background: #08589e; + stroke: #08589e; +} +.GnBu.q0-8 { + fill: #f7fcf0; + background: #f7fcf0; + stroke: #f7fcf0; +} +.GnBu.q1-8 { + fill: #e0f3db; + background: #e0f3db; + stroke: #e0f3db; +} +.GnBu.q2-8 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.GnBu.q3-8 { + fill: #a8ddb5; + background: #a8ddb5; + stroke: #a8ddb5; +} +.GnBu.q4-8 { + fill: #7bccc4; + background: #7bccc4; + stroke: #7bccc4; +} +.GnBu.q5-8 { + fill: #4eb3d3; + background: #4eb3d3; + stroke: #4eb3d3; +} +.GnBu.q6-8 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.GnBu.q7-8 { + fill: #08589e; + background: #08589e; + stroke: #08589e; +} +.GnBu.q0-9 { + fill: #f7fcf0; + background: #f7fcf0; + stroke: #f7fcf0; +} +.GnBu.q1-9 { + fill: #e0f3db; + background: #e0f3db; + stroke: #e0f3db; +} +.GnBu.q2-9 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.GnBu.q3-9 { + fill: #a8ddb5; + background: #a8ddb5; + stroke: #a8ddb5; +} +.GnBu.q4-9 { + fill: #7bccc4; + background: #7bccc4; + stroke: #7bccc4; +} +.GnBu.q5-9 { + fill: #4eb3d3; + background: #4eb3d3; + stroke: #4eb3d3; +} +.GnBu.q6-9 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.GnBu.q7-9 { + fill: #0868ac; + background: #0868ac; + stroke: #0868ac; +} +.GnBu.q8-9 { + fill: #084081; + background: #084081; + stroke: #084081; +} +.BuGn.q0-3 { + fill: #e5f5f9; + background: #e5f5f9; + stroke: #e5f5f9; +} +.BuGn.q1-3 { + fill: #99d8c9; + background: #99d8c9; + stroke: #99d8c9; +} +.BuGn.q2-3 { + fill: #2ca25f; + background: #2ca25f; + stroke: #2ca25f; +} +.BuGn.q0-4 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuGn.q1-4 { + fill: #b2e2e2; + background: #b2e2e2; + stroke: #b2e2e2; +} +.BuGn.q2-4 { + fill: #66c2a4; + background: #66c2a4; + stroke: #66c2a4; +} +.BuGn.q3-4 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.BuGn.q0-5 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuGn.q1-5 { + fill: #b2e2e2; + background: #b2e2e2; + stroke: #b2e2e2; +} +.BuGn.q2-5 { + fill: #66c2a4; + background: #66c2a4; + stroke: #66c2a4; +} +.BuGn.q3-5 { + fill: #2ca25f; + background: #2ca25f; + stroke: #2ca25f; +} +.BuGn.q4-5 { + fill: #006d2c; + background: #006d2c; + stroke: #006d2c; +} +.BuGn.q0-6 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuGn.q1-6 { + fill: #ccece6; + background: #ccece6; + stroke: #ccece6; +} +.BuGn.q2-6 { + fill: #99d8c9; + background: #99d8c9; + stroke: #99d8c9; +} +.BuGn.q3-6 { + fill: #66c2a4; + background: #66c2a4; + stroke: #66c2a4; +} +.BuGn.q4-6 { + fill: #2ca25f; + background: #2ca25f; + stroke: #2ca25f; +} +.BuGn.q5-6 { + fill: #006d2c; + background: #006d2c; + stroke: #006d2c; +} +.BuGn.q0-7 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuGn.q1-7 { + fill: #ccece6; + background: #ccece6; + stroke: #ccece6; +} +.BuGn.q2-7 { + fill: #99d8c9; + background: #99d8c9; + stroke: #99d8c9; +} +.BuGn.q3-7 { + fill: #66c2a4; + background: #66c2a4; + stroke: #66c2a4; +} +.BuGn.q4-7 { + fill: #41ae76; + background: #41ae76; + stroke: #41ae76; +} +.BuGn.q5-7 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.BuGn.q6-7 { + fill: #005824; + background: #005824; + stroke: #005824; +} +.BuGn.q0-8 { + fill: #f7fcfd; + background: #f7fcfd; + stroke: #f7fcfd; +} +.BuGn.q1-8 { + fill: #e5f5f9; + background: #e5f5f9; + stroke: #e5f5f9; +} +.BuGn.q2-8 { + fill: #ccece6; + background: #ccece6; + stroke: #ccece6; +} +.BuGn.q3-8 { + fill: #99d8c9; + background: #99d8c9; + stroke: #99d8c9; +} +.BuGn.q4-8 { + fill: #66c2a4; + background: #66c2a4; + stroke: #66c2a4; +} +.BuGn.q5-8 { + fill: #41ae76; + background: #41ae76; + stroke: #41ae76; +} +.BuGn.q6-8 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.BuGn.q7-8 { + fill: #005824; + background: #005824; + stroke: #005824; +} +.BuGn.q0-9 { + fill: #f7fcfd; + background: #f7fcfd; + stroke: #f7fcfd; +} +.BuGn.q1-9 { + fill: #e5f5f9; + background: #e5f5f9; + stroke: #e5f5f9; +} +.BuGn.q2-9 { + fill: #ccece6; + background: #ccece6; + stroke: #ccece6; +} +.BuGn.q3-9 { + fill: #99d8c9; + background: #99d8c9; + stroke: #99d8c9; +} +.BuGn.q4-9 { + fill: #66c2a4; + background: #66c2a4; + stroke: #66c2a4; +} +.BuGn.q5-9 { + fill: #41ae76; + background: #41ae76; + stroke: #41ae76; +} +.BuGn.q6-9 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.BuGn.q7-9 { + fill: #006d2c; + background: #006d2c; + stroke: #006d2c; +} +.BuGn.q8-9 { + fill: #00441b; + background: #00441b; + stroke: #00441b; +} +.PuBuGn.q0-3 { + fill: #ece2f0; + background: #ece2f0; + stroke: #ece2f0; +} +.PuBuGn.q1-3 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBuGn.q2-3 { + fill: #1c9099; + background: #1c9099; + stroke: #1c9099; +} +.PuBuGn.q0-4 { + fill: #f6eff7; + background: #f6eff7; + stroke: #f6eff7; +} +.PuBuGn.q1-4 { + fill: #bdc9e1; + background: #bdc9e1; + stroke: #bdc9e1; +} +.PuBuGn.q2-4 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.PuBuGn.q3-4 { + fill: #02818a; + background: #02818a; + stroke: #02818a; +} +.PuBuGn.q0-5 { + fill: #f6eff7; + background: #f6eff7; + stroke: #f6eff7; +} +.PuBuGn.q1-5 { + fill: #bdc9e1; + background: #bdc9e1; + stroke: #bdc9e1; +} +.PuBuGn.q2-5 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.PuBuGn.q3-5 { + fill: #1c9099; + background: #1c9099; + stroke: #1c9099; +} +.PuBuGn.q4-5 { + fill: #016c59; + background: #016c59; + stroke: #016c59; +} +.PuBuGn.q0-6 { + fill: #f6eff7; + background: #f6eff7; + stroke: #f6eff7; +} +.PuBuGn.q1-6 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBuGn.q2-6 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBuGn.q3-6 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.PuBuGn.q4-6 { + fill: #1c9099; + background: #1c9099; + stroke: #1c9099; +} +.PuBuGn.q5-6 { + fill: #016c59; + background: #016c59; + stroke: #016c59; +} +.PuBuGn.q0-7 { + fill: #f6eff7; + background: #f6eff7; + stroke: #f6eff7; +} +.PuBuGn.q1-7 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBuGn.q2-7 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBuGn.q3-7 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.PuBuGn.q4-7 { + fill: #3690c0; + background: #3690c0; + stroke: #3690c0; +} +.PuBuGn.q5-7 { + fill: #02818a; + background: #02818a; + stroke: #02818a; +} +.PuBuGn.q6-7 { + fill: #016450; + background: #016450; + stroke: #016450; +} +.PuBuGn.q0-8 { + fill: #fff7fb; + background: #fff7fb; + stroke: #fff7fb; +} +.PuBuGn.q1-8 { + fill: #ece2f0; + background: #ece2f0; + stroke: #ece2f0; +} +.PuBuGn.q2-8 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBuGn.q3-8 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBuGn.q4-8 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.PuBuGn.q5-8 { + fill: #3690c0; + background: #3690c0; + stroke: #3690c0; +} +.PuBuGn.q6-8 { + fill: #02818a; + background: #02818a; + stroke: #02818a; +} +.PuBuGn.q7-8 { + fill: #016450; + background: #016450; + stroke: #016450; +} +.PuBuGn.q0-9 { + fill: #fff7fb; + background: #fff7fb; + stroke: #fff7fb; +} +.PuBuGn.q1-9 { + fill: #ece2f0; + background: #ece2f0; + stroke: #ece2f0; +} +.PuBuGn.q2-9 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBuGn.q3-9 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBuGn.q4-9 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.PuBuGn.q5-9 { + fill: #3690c0; + background: #3690c0; + stroke: #3690c0; +} +.PuBuGn.q6-9 { + fill: #02818a; + background: #02818a; + stroke: #02818a; +} +.PuBuGn.q7-9 { + fill: #016c59; + background: #016c59; + stroke: #016c59; +} +.PuBuGn.q8-9 { + fill: #014636; + background: #014636; + stroke: #014636; +} +.PuBu.q0-3 { + fill: #ece7f2; + background: #ece7f2; + stroke: #ece7f2; +} +.PuBu.q1-3 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBu.q2-3 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.PuBu.q0-4 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuBu.q1-4 { + fill: #bdc9e1; + background: #bdc9e1; + stroke: #bdc9e1; +} +.PuBu.q2-4 { + fill: #74a9cf; + background: #74a9cf; + stroke: #74a9cf; +} +.PuBu.q3-4 { + fill: #0570b0; + background: #0570b0; + stroke: #0570b0; +} +.PuBu.q0-5 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuBu.q1-5 { + fill: #bdc9e1; + background: #bdc9e1; + stroke: #bdc9e1; +} +.PuBu.q2-5 { + fill: #74a9cf; + background: #74a9cf; + stroke: #74a9cf; +} +.PuBu.q3-5 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.PuBu.q4-5 { + fill: #045a8d; + background: #045a8d; + stroke: #045a8d; +} +.PuBu.q0-6 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuBu.q1-6 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBu.q2-6 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBu.q3-6 { + fill: #74a9cf; + background: #74a9cf; + stroke: #74a9cf; +} +.PuBu.q4-6 { + fill: #2b8cbe; + background: #2b8cbe; + stroke: #2b8cbe; +} +.PuBu.q5-6 { + fill: #045a8d; + background: #045a8d; + stroke: #045a8d; +} +.PuBu.q0-7 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuBu.q1-7 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBu.q2-7 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBu.q3-7 { + fill: #74a9cf; + background: #74a9cf; + stroke: #74a9cf; +} +.PuBu.q4-7 { + fill: #3690c0; + background: #3690c0; + stroke: #3690c0; +} +.PuBu.q5-7 { + fill: #0570b0; + background: #0570b0; + stroke: #0570b0; +} +.PuBu.q6-7 { + fill: #034e7b; + background: #034e7b; + stroke: #034e7b; +} +.PuBu.q0-8 { + fill: #fff7fb; + background: #fff7fb; + stroke: #fff7fb; +} +.PuBu.q1-8 { + fill: #ece7f2; + background: #ece7f2; + stroke: #ece7f2; +} +.PuBu.q2-8 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBu.q3-8 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBu.q4-8 { + fill: #74a9cf; + background: #74a9cf; + stroke: #74a9cf; +} +.PuBu.q5-8 { + fill: #3690c0; + background: #3690c0; + stroke: #3690c0; +} +.PuBu.q6-8 { + fill: #0570b0; + background: #0570b0; + stroke: #0570b0; +} +.PuBu.q7-8 { + fill: #034e7b; + background: #034e7b; + stroke: #034e7b; +} +.PuBu.q0-9 { + fill: #fff7fb; + background: #fff7fb; + stroke: #fff7fb; +} +.PuBu.q1-9 { + fill: #ece7f2; + background: #ece7f2; + stroke: #ece7f2; +} +.PuBu.q2-9 { + fill: #d0d1e6; + background: #d0d1e6; + stroke: #d0d1e6; +} +.PuBu.q3-9 { + fill: #a6bddb; + background: #a6bddb; + stroke: #a6bddb; +} +.PuBu.q4-9 { + fill: #74a9cf; + background: #74a9cf; + stroke: #74a9cf; +} +.PuBu.q5-9 { + fill: #3690c0; + background: #3690c0; + stroke: #3690c0; +} +.PuBu.q6-9 { + fill: #0570b0; + background: #0570b0; + stroke: #0570b0; +} +.PuBu.q7-9 { + fill: #045a8d; + background: #045a8d; + stroke: #045a8d; +} +.PuBu.q8-9 { + fill: #023858; + background: #023858; + stroke: #023858; +} +.BuPu.q0-3 { + fill: #e0ecf4; + background: #e0ecf4; + stroke: #e0ecf4; +} +.BuPu.q1-3 { + fill: #9ebcda; + background: #9ebcda; + stroke: #9ebcda; +} +.BuPu.q2-3 { + fill: #8856a7; + background: #8856a7; + stroke: #8856a7; +} +.BuPu.q0-4 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuPu.q1-4 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.BuPu.q2-4 { + fill: #8c96c6; + background: #8c96c6; + stroke: #8c96c6; +} +.BuPu.q3-4 { + fill: #88419d; + background: #88419d; + stroke: #88419d; +} +.BuPu.q0-5 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuPu.q1-5 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.BuPu.q2-5 { + fill: #8c96c6; + background: #8c96c6; + stroke: #8c96c6; +} +.BuPu.q3-5 { + fill: #8856a7; + background: #8856a7; + stroke: #8856a7; +} +.BuPu.q4-5 { + fill: #810f7c; + background: #810f7c; + stroke: #810f7c; +} +.BuPu.q0-6 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuPu.q1-6 { + fill: #bfd3e6; + background: #bfd3e6; + stroke: #bfd3e6; +} +.BuPu.q2-6 { + fill: #9ebcda; + background: #9ebcda; + stroke: #9ebcda; +} +.BuPu.q3-6 { + fill: #8c96c6; + background: #8c96c6; + stroke: #8c96c6; +} +.BuPu.q4-6 { + fill: #8856a7; + background: #8856a7; + stroke: #8856a7; +} +.BuPu.q5-6 { + fill: #810f7c; + background: #810f7c; + stroke: #810f7c; +} +.BuPu.q0-7 { + fill: #edf8fb; + background: #edf8fb; + stroke: #edf8fb; +} +.BuPu.q1-7 { + fill: #bfd3e6; + background: #bfd3e6; + stroke: #bfd3e6; +} +.BuPu.q2-7 { + fill: #9ebcda; + background: #9ebcda; + stroke: #9ebcda; +} +.BuPu.q3-7 { + fill: #8c96c6; + background: #8c96c6; + stroke: #8c96c6; +} +.BuPu.q4-7 { + fill: #8c6bb1; + background: #8c6bb1; + stroke: #8c6bb1; +} +.BuPu.q5-7 { + fill: #88419d; + background: #88419d; + stroke: #88419d; +} +.BuPu.q6-7 { + fill: #6e016b; + background: #6e016b; + stroke: #6e016b; +} +.BuPu.q0-8 { + fill: #f7fcfd; + background: #f7fcfd; + stroke: #f7fcfd; +} +.BuPu.q1-8 { + fill: #e0ecf4; + background: #e0ecf4; + stroke: #e0ecf4; +} +.BuPu.q2-8 { + fill: #bfd3e6; + background: #bfd3e6; + stroke: #bfd3e6; +} +.BuPu.q3-8 { + fill: #9ebcda; + background: #9ebcda; + stroke: #9ebcda; +} +.BuPu.q4-8 { + fill: #8c96c6; + background: #8c96c6; + stroke: #8c96c6; +} +.BuPu.q5-8 { + fill: #8c6bb1; + background: #8c6bb1; + stroke: #8c6bb1; +} +.BuPu.q6-8 { + fill: #88419d; + background: #88419d; + stroke: #88419d; +} +.BuPu.q7-8 { + fill: #6e016b; + background: #6e016b; + stroke: #6e016b; +} +.BuPu.q0-9 { + fill: #f7fcfd; + background: #f7fcfd; + stroke: #f7fcfd; +} +.BuPu.q1-9 { + fill: #e0ecf4; + background: #e0ecf4; + stroke: #e0ecf4; +} +.BuPu.q2-9 { + fill: #bfd3e6; + background: #bfd3e6; + stroke: #bfd3e6; +} +.BuPu.q3-9 { + fill: #9ebcda; + background: #9ebcda; + stroke: #9ebcda; +} +.BuPu.q4-9 { + fill: #8c96c6; + background: #8c96c6; + stroke: #8c96c6; +} +.BuPu.q5-9 { + fill: #8c6bb1; + background: #8c6bb1; + stroke: #8c6bb1; +} +.BuPu.q6-9 { + fill: #88419d; + background: #88419d; + stroke: #88419d; +} +.BuPu.q7-9 { + fill: #810f7c; + background: #810f7c; + stroke: #810f7c; +} +.BuPu.q8-9 { + fill: #4d004b; + background: #4d004b; + stroke: #4d004b; +} +.RdPu.q0-3 { + fill: #fde0dd; + background: #fde0dd; + stroke: #fde0dd; +} +.RdPu.q1-3 { + fill: #fa9fb5; + background: #fa9fb5; + stroke: #fa9fb5; +} +.RdPu.q2-3 { + fill: #c51b8a; + background: #c51b8a; + stroke: #c51b8a; +} +.RdPu.q0-4 { + fill: #feebe2; + background: #feebe2; + stroke: #feebe2; +} +.RdPu.q1-4 { + fill: #fbb4b9; + background: #fbb4b9; + stroke: #fbb4b9; +} +.RdPu.q2-4 { + fill: #f768a1; + background: #f768a1; + stroke: #f768a1; +} +.RdPu.q3-4 { + fill: #ae017e; + background: #ae017e; + stroke: #ae017e; +} +.RdPu.q0-5 { + fill: #feebe2; + background: #feebe2; + stroke: #feebe2; +} +.RdPu.q1-5 { + fill: #fbb4b9; + background: #fbb4b9; + stroke: #fbb4b9; +} +.RdPu.q2-5 { + fill: #f768a1; + background: #f768a1; + stroke: #f768a1; +} +.RdPu.q3-5 { + fill: #c51b8a; + background: #c51b8a; + stroke: #c51b8a; +} +.RdPu.q4-5 { + fill: #7a0177; + background: #7a0177; + stroke: #7a0177; +} +.RdPu.q0-6 { + fill: #feebe2; + background: #feebe2; + stroke: #feebe2; +} +.RdPu.q1-6 { + fill: #fcc5c0; + background: #fcc5c0; + stroke: #fcc5c0; +} +.RdPu.q2-6 { + fill: #fa9fb5; + background: #fa9fb5; + stroke: #fa9fb5; +} +.RdPu.q3-6 { + fill: #f768a1; + background: #f768a1; + stroke: #f768a1; +} +.RdPu.q4-6 { + fill: #c51b8a; + background: #c51b8a; + stroke: #c51b8a; +} +.RdPu.q5-6 { + fill: #7a0177; + background: #7a0177; + stroke: #7a0177; +} +.RdPu.q0-7 { + fill: #feebe2; + background: #feebe2; + stroke: #feebe2; +} +.RdPu.q1-7 { + fill: #fcc5c0; + background: #fcc5c0; + stroke: #fcc5c0; +} +.RdPu.q2-7 { + fill: #fa9fb5; + background: #fa9fb5; + stroke: #fa9fb5; +} +.RdPu.q3-7 { + fill: #f768a1; + background: #f768a1; + stroke: #f768a1; +} +.RdPu.q4-7 { + fill: #dd3497; + background: #dd3497; + stroke: #dd3497; +} +.RdPu.q5-7 { + fill: #ae017e; + background: #ae017e; + stroke: #ae017e; +} +.RdPu.q6-7 { + fill: #7a0177; + background: #7a0177; + stroke: #7a0177; +} +.RdPu.q0-8 { + fill: #fff7f3; + background: #fff7f3; + stroke: #fff7f3; +} +.RdPu.q1-8 { + fill: #fde0dd; + background: #fde0dd; + stroke: #fde0dd; +} +.RdPu.q2-8 { + fill: #fcc5c0; + background: #fcc5c0; + stroke: #fcc5c0; +} +.RdPu.q3-8 { + fill: #fa9fb5; + background: #fa9fb5; + stroke: #fa9fb5; +} +.RdPu.q4-8 { + fill: #f768a1; + background: #f768a1; + stroke: #f768a1; +} +.RdPu.q5-8 { + fill: #dd3497; + background: #dd3497; + stroke: #dd3497; +} +.RdPu.q6-8 { + fill: #ae017e; + background: #ae017e; + stroke: #ae017e; +} +.RdPu.q7-8 { + fill: #7a0177; + background: #7a0177; + stroke: #7a0177; +} +.RdPu.q0-9 { + fill: #fff7f3; + background: #fff7f3; + stroke: #fff7f3; +} +.RdPu.q1-9 { + fill: #fde0dd; + background: #fde0dd; + stroke: #fde0dd; +} +.RdPu.q2-9 { + fill: #fcc5c0; + background: #fcc5c0; + stroke: #fcc5c0; +} +.RdPu.q3-9 { + fill: #fa9fb5; + background: #fa9fb5; + stroke: #fa9fb5; +} +.RdPu.q4-9 { + fill: #f768a1; + background: #f768a1; + stroke: #f768a1; +} +.RdPu.q5-9 { + fill: #dd3497; + background: #dd3497; + stroke: #dd3497; +} +.RdPu.q6-9 { + fill: #ae017e; + background: #ae017e; + stroke: #ae017e; +} +.RdPu.q7-9 { + fill: #7a0177; + background: #7a0177; + stroke: #7a0177; +} +.RdPu.q8-9 { + fill: #49006a; + background: #49006a; + stroke: #49006a; +} +.PuRd.q0-3 { + fill: #e7e1ef; + background: #e7e1ef; + stroke: #e7e1ef; +} +.PuRd.q1-3 { + fill: #c994c7; + background: #c994c7; + stroke: #c994c7; +} +.PuRd.q2-3 { + fill: #dd1c77; + background: #dd1c77; + stroke: #dd1c77; +} +.PuRd.q0-4 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuRd.q1-4 { + fill: #d7b5d8; + background: #d7b5d8; + stroke: #d7b5d8; +} +.PuRd.q2-4 { + fill: #df65b0; + background: #df65b0; + stroke: #df65b0; +} +.PuRd.q3-4 { + fill: #ce1256; + background: #ce1256; + stroke: #ce1256; +} +.PuRd.q0-5 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuRd.q1-5 { + fill: #d7b5d8; + background: #d7b5d8; + stroke: #d7b5d8; +} +.PuRd.q2-5 { + fill: #df65b0; + background: #df65b0; + stroke: #df65b0; +} +.PuRd.q3-5 { + fill: #dd1c77; + background: #dd1c77; + stroke: #dd1c77; +} +.PuRd.q4-5 { + fill: #980043; + background: #980043; + stroke: #980043; +} +.PuRd.q0-6 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuRd.q1-6 { + fill: #d4b9da; + background: #d4b9da; + stroke: #d4b9da; +} +.PuRd.q2-6 { + fill: #c994c7; + background: #c994c7; + stroke: #c994c7; +} +.PuRd.q3-6 { + fill: #df65b0; + background: #df65b0; + stroke: #df65b0; +} +.PuRd.q4-6 { + fill: #dd1c77; + background: #dd1c77; + stroke: #dd1c77; +} +.PuRd.q5-6 { + fill: #980043; + background: #980043; + stroke: #980043; +} +.PuRd.q0-7 { + fill: #f1eef6; + background: #f1eef6; + stroke: #f1eef6; +} +.PuRd.q1-7 { + fill: #d4b9da; + background: #d4b9da; + stroke: #d4b9da; +} +.PuRd.q2-7 { + fill: #c994c7; + background: #c994c7; + stroke: #c994c7; +} +.PuRd.q3-7 { + fill: #df65b0; + background: #df65b0; + stroke: #df65b0; +} +.PuRd.q4-7 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.PuRd.q5-7 { + fill: #ce1256; + background: #ce1256; + stroke: #ce1256; +} +.PuRd.q6-7 { + fill: #91003f; + background: #91003f; + stroke: #91003f; +} +.PuRd.q0-8 { + fill: #f7f4f9; + background: #f7f4f9; + stroke: #f7f4f9; +} +.PuRd.q1-8 { + fill: #e7e1ef; + background: #e7e1ef; + stroke: #e7e1ef; +} +.PuRd.q2-8 { + fill: #d4b9da; + background: #d4b9da; + stroke: #d4b9da; +} +.PuRd.q3-8 { + fill: #c994c7; + background: #c994c7; + stroke: #c994c7; +} +.PuRd.q4-8 { + fill: #df65b0; + background: #df65b0; + stroke: #df65b0; +} +.PuRd.q5-8 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.PuRd.q6-8 { + fill: #ce1256; + background: #ce1256; + stroke: #ce1256; +} +.PuRd.q7-8 { + fill: #91003f; + background: #91003f; + stroke: #91003f; +} +.PuRd.q0-9 { + fill: #f7f4f9; + background: #f7f4f9; + stroke: #f7f4f9; +} +.PuRd.q1-9 { + fill: #e7e1ef; + background: #e7e1ef; + stroke: #e7e1ef; +} +.PuRd.q2-9 { + fill: #d4b9da; + background: #d4b9da; + stroke: #d4b9da; +} +.PuRd.q3-9 { + fill: #c994c7; + background: #c994c7; + stroke: #c994c7; +} +.PuRd.q4-9 { + fill: #df65b0; + background: #df65b0; + stroke: #df65b0; +} +.PuRd.q5-9 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.PuRd.q6-9 { + fill: #ce1256; + background: #ce1256; + stroke: #ce1256; +} +.PuRd.q7-9 { + fill: #980043; + background: #980043; + stroke: #980043; +} +.PuRd.q8-9 { + fill: #67001f; + background: #67001f; + stroke: #67001f; +} +.OrRd.q0-3 { + fill: #fee8c8; + background: #fee8c8; + stroke: #fee8c8; +} +.OrRd.q1-3 { + fill: #fdbb84; + background: #fdbb84; + stroke: #fdbb84; +} +.OrRd.q2-3 { + fill: #e34a33; + background: #e34a33; + stroke: #e34a33; +} +.OrRd.q0-4 { + fill: #fef0d9; + background: #fef0d9; + stroke: #fef0d9; +} +.OrRd.q1-4 { + fill: #fdcc8a; + background: #fdcc8a; + stroke: #fdcc8a; +} +.OrRd.q2-4 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.OrRd.q3-4 { + fill: #d7301f; + background: #d7301f; + stroke: #d7301f; +} +.OrRd.q0-5 { + fill: #fef0d9; + background: #fef0d9; + stroke: #fef0d9; +} +.OrRd.q1-5 { + fill: #fdcc8a; + background: #fdcc8a; + stroke: #fdcc8a; +} +.OrRd.q2-5 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.OrRd.q3-5 { + fill: #e34a33; + background: #e34a33; + stroke: #e34a33; +} +.OrRd.q4-5 { + fill: #b30000; + background: #b30000; + stroke: #b30000; +} +.OrRd.q0-6 { + fill: #fef0d9; + background: #fef0d9; + stroke: #fef0d9; +} +.OrRd.q1-6 { + fill: #fdd49e; + background: #fdd49e; + stroke: #fdd49e; +} +.OrRd.q2-6 { + fill: #fdbb84; + background: #fdbb84; + stroke: #fdbb84; +} +.OrRd.q3-6 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.OrRd.q4-6 { + fill: #e34a33; + background: #e34a33; + stroke: #e34a33; +} +.OrRd.q5-6 { + fill: #b30000; + background: #b30000; + stroke: #b30000; +} +.OrRd.q0-7 { + fill: #fef0d9; + background: #fef0d9; + stroke: #fef0d9; +} +.OrRd.q1-7 { + fill: #fdd49e; + background: #fdd49e; + stroke: #fdd49e; +} +.OrRd.q2-7 { + fill: #fdbb84; + background: #fdbb84; + stroke: #fdbb84; +} +.OrRd.q3-7 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.OrRd.q4-7 { + fill: #ef6548; + background: #ef6548; + stroke: #ef6548; +} +.OrRd.q5-7 { + fill: #d7301f; + background: #d7301f; + stroke: #d7301f; +} +.OrRd.q6-7 { + fill: #990000; + background: #990000; + stroke: #990000; +} +.OrRd.q0-8 { + fill: #fff7ec; + background: #fff7ec; + stroke: #fff7ec; +} +.OrRd.q1-8 { + fill: #fee8c8; + background: #fee8c8; + stroke: #fee8c8; +} +.OrRd.q2-8 { + fill: #fdd49e; + background: #fdd49e; + stroke: #fdd49e; +} +.OrRd.q3-8 { + fill: #fdbb84; + background: #fdbb84; + stroke: #fdbb84; +} +.OrRd.q4-8 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.OrRd.q5-8 { + fill: #ef6548; + background: #ef6548; + stroke: #ef6548; +} +.OrRd.q6-8 { + fill: #d7301f; + background: #d7301f; + stroke: #d7301f; +} +.OrRd.q7-8 { + fill: #990000; + background: #990000; + stroke: #990000; +} +.OrRd.q0-9 { + fill: #fff7ec; + background: #fff7ec; + stroke: #fff7ec; +} +.OrRd.q1-9 { + fill: #fee8c8; + background: #fee8c8; + stroke: #fee8c8; +} +.OrRd.q2-9 { + fill: #fdd49e; + background: #fdd49e; + stroke: #fdd49e; +} +.OrRd.q3-9 { + fill: #fdbb84; + background: #fdbb84; + stroke: #fdbb84; +} +.OrRd.q4-9 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.OrRd.q5-9 { + fill: #ef6548; + background: #ef6548; + stroke: #ef6548; +} +.OrRd.q6-9 { + fill: #d7301f; + background: #d7301f; + stroke: #d7301f; +} +.OrRd.q7-9 { + fill: #b30000; + background: #b30000; + stroke: #b30000; +} +.OrRd.q8-9 { + fill: #7f0000; + background: #7f0000; + stroke: #7f0000; +} +.YlOrRd.q0-3 { + fill: #ffeda0; + background: #ffeda0; + stroke: #ffeda0; +} +.YlOrRd.q1-3 { + fill: #feb24c; + background: #feb24c; + stroke: #feb24c; +} +.YlOrRd.q2-3 { + fill: #f03b20; + background: #f03b20; + stroke: #f03b20; +} +.YlOrRd.q0-4 { + fill: #ffffb2; + background: #ffffb2; + stroke: #ffffb2; +} +.YlOrRd.q1-4 { + fill: #fecc5c; + background: #fecc5c; + stroke: #fecc5c; +} +.YlOrRd.q2-4 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.YlOrRd.q3-4 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.YlOrRd.q0-5 { + fill: #ffffb2; + background: #ffffb2; + stroke: #ffffb2; +} +.YlOrRd.q1-5 { + fill: #fecc5c; + background: #fecc5c; + stroke: #fecc5c; +} +.YlOrRd.q2-5 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.YlOrRd.q3-5 { + fill: #f03b20; + background: #f03b20; + stroke: #f03b20; +} +.YlOrRd.q4-5 { + fill: #bd0026; + background: #bd0026; + stroke: #bd0026; +} +.YlOrRd.q0-6 { + fill: #ffffb2; + background: #ffffb2; + stroke: #ffffb2; +} +.YlOrRd.q1-6 { + fill: #fed976; + background: #fed976; + stroke: #fed976; +} +.YlOrRd.q2-6 { + fill: #feb24c; + background: #feb24c; + stroke: #feb24c; +} +.YlOrRd.q3-6 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.YlOrRd.q4-6 { + fill: #f03b20; + background: #f03b20; + stroke: #f03b20; +} +.YlOrRd.q5-6 { + fill: #bd0026; + background: #bd0026; + stroke: #bd0026; +} +.YlOrRd.q0-7 { + fill: #ffffb2; + background: #ffffb2; + stroke: #ffffb2; +} +.YlOrRd.q1-7 { + fill: #fed976; + background: #fed976; + stroke: #fed976; +} +.YlOrRd.q2-7 { + fill: #feb24c; + background: #feb24c; + stroke: #feb24c; +} +.YlOrRd.q3-7 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.YlOrRd.q4-7 { + fill: #fc4e2a; + background: #fc4e2a; + stroke: #fc4e2a; +} +.YlOrRd.q5-7 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.YlOrRd.q6-7 { + fill: #b10026; + background: #b10026; + stroke: #b10026; +} +.YlOrRd.q0-8 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlOrRd.q1-8 { + fill: #ffeda0; + background: #ffeda0; + stroke: #ffeda0; +} +.YlOrRd.q2-8 { + fill: #fed976; + background: #fed976; + stroke: #fed976; +} +.YlOrRd.q3-8 { + fill: #feb24c; + background: #feb24c; + stroke: #feb24c; +} +.YlOrRd.q4-8 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.YlOrRd.q5-8 { + fill: #fc4e2a; + background: #fc4e2a; + stroke: #fc4e2a; +} +.YlOrRd.q6-8 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.YlOrRd.q7-8 { + fill: #b10026; + background: #b10026; + stroke: #b10026; +} +.YlOrRd.q0-9 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.YlOrRd.q1-9 { + fill: #ffeda0; + background: #ffeda0; + stroke: #ffeda0; +} +.YlOrRd.q2-9 { + fill: #fed976; + background: #fed976; + stroke: #fed976; +} +.YlOrRd.q3-9 { + fill: #feb24c; + background: #feb24c; + stroke: #feb24c; +} +.YlOrRd.q4-9 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.YlOrRd.q5-9 { + fill: #fc4e2a; + background: #fc4e2a; + stroke: #fc4e2a; +} +.YlOrRd.q6-9 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.YlOrRd.q7-9 { + fill: #bd0026; + background: #bd0026; + stroke: #bd0026; +} +.YlOrRd.q8-9 { + fill: #800026; + background: #800026; + stroke: #800026; +} +.YlOrBr.q0-3 { + fill: #fff7bc; + background: #fff7bc; + stroke: #fff7bc; +} +.YlOrBr.q1-3 { + fill: #fec44f; + background: #fec44f; + stroke: #fec44f; +} +.YlOrBr.q2-3 { + fill: #d95f0e; + background: #d95f0e; + stroke: #d95f0e; +} +.YlOrBr.q0-4 { + fill: #ffffd4; + background: #ffffd4; + stroke: #ffffd4; +} +.YlOrBr.q1-4 { + fill: #fed98e; + background: #fed98e; + stroke: #fed98e; +} +.YlOrBr.q2-4 { + fill: #fe9929; + background: #fe9929; + stroke: #fe9929; +} +.YlOrBr.q3-4 { + fill: #cc4c02; + background: #cc4c02; + stroke: #cc4c02; +} +.YlOrBr.q0-5 { + fill: #ffffd4; + background: #ffffd4; + stroke: #ffffd4; +} +.YlOrBr.q1-5 { + fill: #fed98e; + background: #fed98e; + stroke: #fed98e; +} +.YlOrBr.q2-5 { + fill: #fe9929; + background: #fe9929; + stroke: #fe9929; +} +.YlOrBr.q3-5 { + fill: #d95f0e; + background: #d95f0e; + stroke: #d95f0e; +} +.YlOrBr.q4-5 { + fill: #993404; + background: #993404; + stroke: #993404; +} +.YlOrBr.q0-6 { + fill: #ffffd4; + background: #ffffd4; + stroke: #ffffd4; +} +.YlOrBr.q1-6 { + fill: #fee391; + background: #fee391; + stroke: #fee391; +} +.YlOrBr.q2-6 { + fill: #fec44f; + background: #fec44f; + stroke: #fec44f; +} +.YlOrBr.q3-6 { + fill: #fe9929; + background: #fe9929; + stroke: #fe9929; +} +.YlOrBr.q4-6 { + fill: #d95f0e; + background: #d95f0e; + stroke: #d95f0e; +} +.YlOrBr.q5-6 { + fill: #993404; + background: #993404; + stroke: #993404; +} +.YlOrBr.q0-7 { + fill: #ffffd4; + background: #ffffd4; + stroke: #ffffd4; +} +.YlOrBr.q1-7 { + fill: #fee391; + background: #fee391; + stroke: #fee391; +} +.YlOrBr.q2-7 { + fill: #fec44f; + background: #fec44f; + stroke: #fec44f; +} +.YlOrBr.q3-7 { + fill: #fe9929; + background: #fe9929; + stroke: #fe9929; +} +.YlOrBr.q4-7 { + fill: #ec7014; + background: #ec7014; + stroke: #ec7014; +} +.YlOrBr.q5-7 { + fill: #cc4c02; + background: #cc4c02; + stroke: #cc4c02; +} +.YlOrBr.q6-7 { + fill: #8c2d04; + background: #8c2d04; + stroke: #8c2d04; +} +.YlOrBr.q0-8 { + fill: #ffffe5; + background: #ffffe5; + stroke: #ffffe5; +} +.YlOrBr.q1-8 { + fill: #fff7bc; + background: #fff7bc; + stroke: #fff7bc; +} +.YlOrBr.q2-8 { + fill: #fee391; + background: #fee391; + stroke: #fee391; +} +.YlOrBr.q3-8 { + fill: #fec44f; + background: #fec44f; + stroke: #fec44f; +} +.YlOrBr.q4-8 { + fill: #fe9929; + background: #fe9929; + stroke: #fe9929; +} +.YlOrBr.q5-8 { + fill: #ec7014; + background: #ec7014; + stroke: #ec7014; +} +.YlOrBr.q6-8 { + fill: #cc4c02; + background: #cc4c02; + stroke: #cc4c02; +} +.YlOrBr.q7-8 { + fill: #8c2d04; + background: #8c2d04; + stroke: #8c2d04; +} +.YlOrBr.q0-9 { + fill: #ffffe5; + background: #ffffe5; + stroke: #ffffe5; +} +.YlOrBr.q1-9 { + fill: #fff7bc; + background: #fff7bc; + stroke: #fff7bc; +} +.YlOrBr.q2-9 { + fill: #fee391; + background: #fee391; + stroke: #fee391; +} +.YlOrBr.q3-9 { + fill: #fec44f; + background: #fec44f; + stroke: #fec44f; +} +.YlOrBr.q4-9 { + fill: #fe9929; + background: #fe9929; + stroke: #fe9929; +} +.YlOrBr.q5-9 { + fill: #ec7014; + background: #ec7014; + stroke: #ec7014; +} +.YlOrBr.q6-9 { + fill: #cc4c02; + background: #cc4c02; + stroke: #cc4c02; +} +.YlOrBr.q7-9 { + fill: #993404; + background: #993404; + stroke: #993404; +} +.YlOrBr.q8-9 { + fill: #662506; + background: #662506; + stroke: #662506; +} +.Purples.q0-3 { + fill: #efedf5; + background: #efedf5; + stroke: #efedf5; +} +.Purples.q1-3 { + fill: #bcbddc; + background: #bcbddc; + stroke: #bcbddc; +} +.Purples.q2-3 { + fill: #756bb1; + background: #756bb1; + stroke: #756bb1; +} +.Purples.q0-4 { + fill: #f2f0f7; + background: #f2f0f7; + stroke: #f2f0f7; +} +.Purples.q1-4 { + fill: #cbc9e2; + background: #cbc9e2; + stroke: #cbc9e2; +} +.Purples.q2-4 { + fill: #9e9ac8; + background: #9e9ac8; + stroke: #9e9ac8; +} +.Purples.q3-4 { + fill: #6a51a3; + background: #6a51a3; + stroke: #6a51a3; +} +.Purples.q0-5 { + fill: #f2f0f7; + background: #f2f0f7; + stroke: #f2f0f7; +} +.Purples.q1-5 { + fill: #cbc9e2; + background: #cbc9e2; + stroke: #cbc9e2; +} +.Purples.q2-5 { + fill: #9e9ac8; + background: #9e9ac8; + stroke: #9e9ac8; +} +.Purples.q3-5 { + fill: #756bb1; + background: #756bb1; + stroke: #756bb1; +} +.Purples.q4-5 { + fill: #54278f; + background: #54278f; + stroke: #54278f; +} +.Purples.q0-6 { + fill: #f2f0f7; + background: #f2f0f7; + stroke: #f2f0f7; +} +.Purples.q1-6 { + fill: #dadaeb; + background: #dadaeb; + stroke: #dadaeb; +} +.Purples.q2-6 { + fill: #bcbddc; + background: #bcbddc; + stroke: #bcbddc; +} +.Purples.q3-6 { + fill: #9e9ac8; + background: #9e9ac8; + stroke: #9e9ac8; +} +.Purples.q4-6 { + fill: #756bb1; + background: #756bb1; + stroke: #756bb1; +} +.Purples.q5-6 { + fill: #54278f; + background: #54278f; + stroke: #54278f; +} +.Purples.q0-7 { + fill: #f2f0f7; + background: #f2f0f7; + stroke: #f2f0f7; +} +.Purples.q1-7 { + fill: #dadaeb; + background: #dadaeb; + stroke: #dadaeb; +} +.Purples.q2-7 { + fill: #bcbddc; + background: #bcbddc; + stroke: #bcbddc; +} +.Purples.q3-7 { + fill: #9e9ac8; + background: #9e9ac8; + stroke: #9e9ac8; +} +.Purples.q4-7 { + fill: #807dba; + background: #807dba; + stroke: #807dba; +} +.Purples.q5-7 { + fill: #6a51a3; + background: #6a51a3; + stroke: #6a51a3; +} +.Purples.q6-7 { + fill: #4a1486; + background: #4a1486; + stroke: #4a1486; +} +.Purples.q0-8 { + fill: #fcfbfd; + background: #fcfbfd; + stroke: #fcfbfd; +} +.Purples.q1-8 { + fill: #efedf5; + background: #efedf5; + stroke: #efedf5; +} +.Purples.q2-8 { + fill: #dadaeb; + background: #dadaeb; + stroke: #dadaeb; +} +.Purples.q3-8 { + fill: #bcbddc; + background: #bcbddc; + stroke: #bcbddc; +} +.Purples.q4-8 { + fill: #9e9ac8; + background: #9e9ac8; + stroke: #9e9ac8; +} +.Purples.q5-8 { + fill: #807dba; + background: #807dba; + stroke: #807dba; +} +.Purples.q6-8 { + fill: #6a51a3; + background: #6a51a3; + stroke: #6a51a3; +} +.Purples.q7-8 { + fill: #4a1486; + background: #4a1486; + stroke: #4a1486; +} +.Purples.q0-9 { + fill: #fcfbfd; + background: #fcfbfd; + stroke: #fcfbfd; +} +.Purples.q1-9 { + fill: #efedf5; + background: #efedf5; + stroke: #efedf5; +} +.Purples.q2-9 { + fill: #dadaeb; + background: #dadaeb; + stroke: #dadaeb; +} +.Purples.q3-9 { + fill: #bcbddc; + background: #bcbddc; + stroke: #bcbddc; +} +.Purples.q4-9 { + fill: #9e9ac8; + background: #9e9ac8; + stroke: #9e9ac8; +} +.Purples.q5-9 { + fill: #807dba; + background: #807dba; + stroke: #807dba; +} +.Purples.q6-9 { + fill: #6a51a3; + background: #6a51a3; + stroke: #6a51a3; +} +.Purples.q7-9 { + fill: #54278f; + background: #54278f; + stroke: #54278f; +} +.Purples.q8-9 { + fill: #3f007d; + background: #3f007d; + stroke: #3f007d; +} +.Blues.q0-3 { + fill: #deebf7; + background: #deebf7; + stroke: #deebf7; +} +.Blues.q1-3 { + fill: #9ecae1; + background: #9ecae1; + stroke: #9ecae1; +} +.Blues.q2-3 { + fill: #3182bd; + background: #3182bd; + stroke: #3182bd; +} +.Blues.q0-4 { + fill: #eff3ff; + background: #eff3ff; + stroke: #eff3ff; +} +.Blues.q1-4 { + fill: #bdd7e7; + background: #bdd7e7; + stroke: #bdd7e7; +} +.Blues.q2-4 { + fill: #6baed6; + background: #6baed6; + stroke: #6baed6; +} +.Blues.q3-4 { + fill: #2171b5; + background: #2171b5; + stroke: #2171b5; +} +.Blues.q0-5 { + fill: #eff3ff; + background: #eff3ff; + stroke: #eff3ff; +} +.Blues.q1-5 { + fill: #bdd7e7; + background: #bdd7e7; + stroke: #bdd7e7; +} +.Blues.q2-5 { + fill: #6baed6; + background: #6baed6; + stroke: #6baed6; +} +.Blues.q3-5 { + fill: #3182bd; + background: #3182bd; + stroke: #3182bd; +} +.Blues.q4-5 { + fill: #08519c; + background: #08519c; + stroke: #08519c; +} +.Blues.q0-6 { + fill: #eff3ff; + background: #eff3ff; + stroke: #eff3ff; +} +.Blues.q1-6 { + fill: #c6dbef; + background: #c6dbef; + stroke: #c6dbef; +} +.Blues.q2-6 { + fill: #9ecae1; + background: #9ecae1; + stroke: #9ecae1; +} +.Blues.q3-6 { + fill: #6baed6; + background: #6baed6; + stroke: #6baed6; +} +.Blues.q4-6 { + fill: #3182bd; + background: #3182bd; + stroke: #3182bd; +} +.Blues.q5-6 { + fill: #08519c; + background: #08519c; + stroke: #08519c; +} +.Blues.q0-7 { + fill: #eff3ff; + background: #eff3ff; + stroke: #eff3ff; +} +.Blues.q1-7 { + fill: #c6dbef; + background: #c6dbef; + stroke: #c6dbef; +} +.Blues.q2-7 { + fill: #9ecae1; + background: #9ecae1; + stroke: #9ecae1; +} +.Blues.q3-7 { + fill: #6baed6; + background: #6baed6; + stroke: #6baed6; +} +.Blues.q4-7 { + fill: #4292c6; + background: #4292c6; + stroke: #4292c6; +} +.Blues.q5-7 { + fill: #2171b5; + background: #2171b5; + stroke: #2171b5; +} +.Blues.q6-7 { + fill: #084594; + background: #084594; + stroke: #084594; +} +.Blues.q0-8 { + fill: #f7fbff; + background: #f7fbff; + stroke: #f7fbff; +} +.Blues.q1-8 { + fill: #deebf7; + background: #deebf7; + stroke: #deebf7; +} +.Blues.q2-8 { + fill: #c6dbef; + background: #c6dbef; + stroke: #c6dbef; +} +.Blues.q3-8 { + fill: #9ecae1; + background: #9ecae1; + stroke: #9ecae1; +} +.Blues.q4-8 { + fill: #6baed6; + background: #6baed6; + stroke: #6baed6; +} +.Blues.q5-8 { + fill: #4292c6; + background: #4292c6; + stroke: #4292c6; +} +.Blues.q6-8 { + fill: #2171b5; + background: #2171b5; + stroke: #2171b5; +} +.Blues.q7-8 { + fill: #084594; + background: #084594; + stroke: #084594; +} +.Blues.q0-9 { + fill: #f7fbff; + background: #f7fbff; + stroke: #f7fbff; +} +.Blues.q1-9 { + fill: #deebf7; + background: #deebf7; + stroke: #deebf7; +} +.Blues.q2-9 { + fill: #c6dbef; + background: #c6dbef; + stroke: #c6dbef; +} +.Blues.q3-9 { + fill: #9ecae1; + background: #9ecae1; + stroke: #9ecae1; +} +.Blues.q4-9 { + fill: #6baed6; + background: #6baed6; + stroke: #6baed6; +} +.Blues.q5-9 { + fill: #4292c6; + background: #4292c6; + stroke: #4292c6; +} +.Blues.q6-9 { + fill: #2171b5; + background: #2171b5; + stroke: #2171b5; +} +.Blues.q7-9 { + fill: #08519c; + background: #08519c; + stroke: #08519c; +} +.Blues.q8-9 { + fill: #08306b; + background: #08306b; + stroke: #08306b; +} +.Greens.q0-3 { + fill: #e5f5e0; + background: #e5f5e0; + stroke: #e5f5e0; +} +.Greens.q1-3 { + fill: #a1d99b; + background: #a1d99b; + stroke: #a1d99b; +} +.Greens.q2-3 { + fill: #31a354; + background: #31a354; + stroke: #31a354; +} +.Greens.q0-4 { + fill: #edf8e9; + background: #edf8e9; + stroke: #edf8e9; +} +.Greens.q1-4 { + fill: #bae4b3; + background: #bae4b3; + stroke: #bae4b3; +} +.Greens.q2-4 { + fill: #74c476; + background: #74c476; + stroke: #74c476; +} +.Greens.q3-4 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.Greens.q0-5 { + fill: #edf8e9; + background: #edf8e9; + stroke: #edf8e9; +} +.Greens.q1-5 { + fill: #bae4b3; + background: #bae4b3; + stroke: #bae4b3; +} +.Greens.q2-5 { + fill: #74c476; + background: #74c476; + stroke: #74c476; +} +.Greens.q3-5 { + fill: #31a354; + background: #31a354; + stroke: #31a354; +} +.Greens.q4-5 { + fill: #006d2c; + background: #006d2c; + stroke: #006d2c; +} +.Greens.q0-6 { + fill: #edf8e9; + background: #edf8e9; + stroke: #edf8e9; +} +.Greens.q1-6 { + fill: #c7e9c0; + background: #c7e9c0; + stroke: #c7e9c0; +} +.Greens.q2-6 { + fill: #a1d99b; + background: #a1d99b; + stroke: #a1d99b; +} +.Greens.q3-6 { + fill: #74c476; + background: #74c476; + stroke: #74c476; +} +.Greens.q4-6 { + fill: #31a354; + background: #31a354; + stroke: #31a354; +} +.Greens.q5-6 { + fill: #006d2c; + background: #006d2c; + stroke: #006d2c; +} +.Greens.q0-7 { + fill: #edf8e9; + background: #edf8e9; + stroke: #edf8e9; +} +.Greens.q1-7 { + fill: #c7e9c0; + background: #c7e9c0; + stroke: #c7e9c0; +} +.Greens.q2-7 { + fill: #a1d99b; + background: #a1d99b; + stroke: #a1d99b; +} +.Greens.q3-7 { + fill: #74c476; + background: #74c476; + stroke: #74c476; +} +.Greens.q4-7 { + fill: #41ab5d; + background: #41ab5d; + stroke: #41ab5d; +} +.Greens.q5-7 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.Greens.q6-7 { + fill: #005a32; + background: #005a32; + stroke: #005a32; +} +.Greens.q0-8 { + fill: #f7fcf5; + background: #f7fcf5; + stroke: #f7fcf5; +} +.Greens.q1-8 { + fill: #e5f5e0; + background: #e5f5e0; + stroke: #e5f5e0; +} +.Greens.q2-8 { + fill: #c7e9c0; + background: #c7e9c0; + stroke: #c7e9c0; +} +.Greens.q3-8 { + fill: #a1d99b; + background: #a1d99b; + stroke: #a1d99b; +} +.Greens.q4-8 { + fill: #74c476; + background: #74c476; + stroke: #74c476; +} +.Greens.q5-8 { + fill: #41ab5d; + background: #41ab5d; + stroke: #41ab5d; +} +.Greens.q6-8 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.Greens.q7-8 { + fill: #005a32; + background: #005a32; + stroke: #005a32; +} +.Greens.q0-9 { + fill: #f7fcf5; + background: #f7fcf5; + stroke: #f7fcf5; +} +.Greens.q1-9 { + fill: #e5f5e0; + background: #e5f5e0; + stroke: #e5f5e0; +} +.Greens.q2-9 { + fill: #c7e9c0; + background: #c7e9c0; + stroke: #c7e9c0; +} +.Greens.q3-9 { + fill: #a1d99b; + background: #a1d99b; + stroke: #a1d99b; +} +.Greens.q4-9 { + fill: #74c476; + background: #74c476; + stroke: #74c476; +} +.Greens.q5-9 { + fill: #41ab5d; + background: #41ab5d; + stroke: #41ab5d; +} +.Greens.q6-9 { + fill: #238b45; + background: #238b45; + stroke: #238b45; +} +.Greens.q7-9 { + fill: #006d2c; + background: #006d2c; + stroke: #006d2c; +} +.Greens.q8-9 { + fill: #00441b; + background: #00441b; + stroke: #00441b; +} +.Oranges.q0-3 { + fill: #fee6ce; + background: #fee6ce; + stroke: #fee6ce; +} +.Oranges.q1-3 { + fill: #fdae6b; + background: #fdae6b; + stroke: #fdae6b; +} +.Oranges.q2-3 { + fill: #e6550d; + background: #e6550d; + stroke: #e6550d; +} +.Oranges.q0-4 { + fill: #feedde; + background: #feedde; + stroke: #feedde; +} +.Oranges.q1-4 { + fill: #fdbe85; + background: #fdbe85; + stroke: #fdbe85; +} +.Oranges.q2-4 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.Oranges.q3-4 { + fill: #d94701; + background: #d94701; + stroke: #d94701; +} +.Oranges.q0-5 { + fill: #feedde; + background: #feedde; + stroke: #feedde; +} +.Oranges.q1-5 { + fill: #fdbe85; + background: #fdbe85; + stroke: #fdbe85; +} +.Oranges.q2-5 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.Oranges.q3-5 { + fill: #e6550d; + background: #e6550d; + stroke: #e6550d; +} +.Oranges.q4-5 { + fill: #a63603; + background: #a63603; + stroke: #a63603; +} +.Oranges.q0-6 { + fill: #feedde; + background: #feedde; + stroke: #feedde; +} +.Oranges.q1-6 { + fill: #fdd0a2; + background: #fdd0a2; + stroke: #fdd0a2; +} +.Oranges.q2-6 { + fill: #fdae6b; + background: #fdae6b; + stroke: #fdae6b; +} +.Oranges.q3-6 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.Oranges.q4-6 { + fill: #e6550d; + background: #e6550d; + stroke: #e6550d; +} +.Oranges.q5-6 { + fill: #a63603; + background: #a63603; + stroke: #a63603; +} +.Oranges.q0-7 { + fill: #feedde; + background: #feedde; + stroke: #feedde; +} +.Oranges.q1-7 { + fill: #fdd0a2; + background: #fdd0a2; + stroke: #fdd0a2; +} +.Oranges.q2-7 { + fill: #fdae6b; + background: #fdae6b; + stroke: #fdae6b; +} +.Oranges.q3-7 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.Oranges.q4-7 { + fill: #f16913; + background: #f16913; + stroke: #f16913; +} +.Oranges.q5-7 { + fill: #d94801; + background: #d94801; + stroke: #d94801; +} +.Oranges.q6-7 { + fill: #8c2d04; + background: #8c2d04; + stroke: #8c2d04; +} +.Oranges.q0-8 { + fill: #fff5eb; + background: #fff5eb; + stroke: #fff5eb; +} +.Oranges.q1-8 { + fill: #fee6ce; + background: #fee6ce; + stroke: #fee6ce; +} +.Oranges.q2-8 { + fill: #fdd0a2; + background: #fdd0a2; + stroke: #fdd0a2; +} +.Oranges.q3-8 { + fill: #fdae6b; + background: #fdae6b; + stroke: #fdae6b; +} +.Oranges.q4-8 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.Oranges.q5-8 { + fill: #f16913; + background: #f16913; + stroke: #f16913; +} +.Oranges.q6-8 { + fill: #d94801; + background: #d94801; + stroke: #d94801; +} +.Oranges.q7-8 { + fill: #8c2d04; + background: #8c2d04; + stroke: #8c2d04; +} +.Oranges.q0-9 { + fill: #fff5eb; + background: #fff5eb; + stroke: #fff5eb; +} +.Oranges.q1-9 { + fill: #fee6ce; + background: #fee6ce; + stroke: #fee6ce; +} +.Oranges.q2-9 { + fill: #fdd0a2; + background: #fdd0a2; + stroke: #fdd0a2; +} +.Oranges.q3-9 { + fill: #fdae6b; + background: #fdae6b; + stroke: #fdae6b; +} +.Oranges.q4-9 { + fill: #fd8d3c; + background: #fd8d3c; + stroke: #fd8d3c; +} +.Oranges.q5-9 { + fill: #f16913; + background: #f16913; + stroke: #f16913; +} +.Oranges.q6-9 { + fill: #d94801; + background: #d94801; + stroke: #d94801; +} +.Oranges.q7-9 { + fill: #a63603; + background: #a63603; + stroke: #a63603; +} +.Oranges.q8-9 { + fill: #7f2704; + background: #7f2704; + stroke: #7f2704; +} +.Reds.q0-3 { + fill: #fee0d2; + background: #fee0d2; + stroke: #fee0d2; +} +.Reds.q1-3 { + fill: #fc9272; + background: #fc9272; + stroke: #fc9272; +} +.Reds.q2-3 { + fill: #de2d26; + background: #de2d26; + stroke: #de2d26; +} +.Reds.q0-4 { + fill: #fee5d9; + background: #fee5d9; + stroke: #fee5d9; +} +.Reds.q1-4 { + fill: #fcae91; + background: #fcae91; + stroke: #fcae91; +} +.Reds.q2-4 { + fill: #fb6a4a; + background: #fb6a4a; + stroke: #fb6a4a; +} +.Reds.q3-4 { + fill: #cb181d; + background: #cb181d; + stroke: #cb181d; +} +.Reds.q0-5 { + fill: #fee5d9; + background: #fee5d9; + stroke: #fee5d9; +} +.Reds.q1-5 { + fill: #fcae91; + background: #fcae91; + stroke: #fcae91; +} +.Reds.q2-5 { + fill: #fb6a4a; + background: #fb6a4a; + stroke: #fb6a4a; +} +.Reds.q3-5 { + fill: #de2d26; + background: #de2d26; + stroke: #de2d26; +} +.Reds.q4-5 { + fill: #a50f15; + background: #a50f15; + stroke: #a50f15; +} +.Reds.q0-6 { + fill: #fee5d9; + background: #fee5d9; + stroke: #fee5d9; +} +.Reds.q1-6 { + fill: #fcbba1; + background: #fcbba1; + stroke: #fcbba1; +} +.Reds.q2-6 { + fill: #fc9272; + background: #fc9272; + stroke: #fc9272; +} +.Reds.q3-6 { + fill: #fb6a4a; + background: #fb6a4a; + stroke: #fb6a4a; +} +.Reds.q4-6 { + fill: #de2d26; + background: #de2d26; + stroke: #de2d26; +} +.Reds.q5-6 { + fill: #a50f15; + background: #a50f15; + stroke: #a50f15; +} +.Reds.q0-7 { + fill: #fee5d9; + background: #fee5d9; + stroke: #fee5d9; +} +.Reds.q1-7 { + fill: #fcbba1; + background: #fcbba1; + stroke: #fcbba1; +} +.Reds.q2-7 { + fill: #fc9272; + background: #fc9272; + stroke: #fc9272; +} +.Reds.q3-7 { + fill: #fb6a4a; + background: #fb6a4a; + stroke: #fb6a4a; +} +.Reds.q4-7 { + fill: #ef3b2c; + background: #ef3b2c; + stroke: #ef3b2c; +} +.Reds.q5-7 { + fill: #cb181d; + background: #cb181d; + stroke: #cb181d; +} +.Reds.q6-7 { + fill: #99000d; + background: #99000d; + stroke: #99000d; +} +.Reds.q0-8 { + fill: #fff5f0; + background: #fff5f0; + stroke: #fff5f0; +} +.Reds.q1-8 { + fill: #fee0d2; + background: #fee0d2; + stroke: #fee0d2; +} +.Reds.q2-8 { + fill: #fcbba1; + background: #fcbba1; + stroke: #fcbba1; +} +.Reds.q3-8 { + fill: #fc9272; + background: #fc9272; + stroke: #fc9272; +} +.Reds.q4-8 { + fill: #fb6a4a; + background: #fb6a4a; + stroke: #fb6a4a; +} +.Reds.q5-8 { + fill: #ef3b2c; + background: #ef3b2c; + stroke: #ef3b2c; +} +.Reds.q6-8 { + fill: #cb181d; + background: #cb181d; + stroke: #cb181d; +} +.Reds.q7-8 { + fill: #99000d; + background: #99000d; + stroke: #99000d; +} +.Reds.q0-9 { + fill: #fff5f0; + background: #fff5f0; + stroke: #fff5f0; +} +.Reds.q1-9 { + fill: #fee0d2; + background: #fee0d2; + stroke: #fee0d2; +} +.Reds.q2-9 { + fill: #fcbba1; + background: #fcbba1; + stroke: #fcbba1; +} +.Reds.q3-9 { + fill: #fc9272; + background: #fc9272; + stroke: #fc9272; +} +.Reds.q4-9 { + fill: #fb6a4a; + background: #fb6a4a; + stroke: #fb6a4a; +} +.Reds.q5-9 { + fill: #ef3b2c; + background: #ef3b2c; + stroke: #ef3b2c; +} +.Reds.q6-9 { + fill: #cb181d; + background: #cb181d; + stroke: #cb181d; +} +.Reds.q7-9 { + fill: #a50f15; + background: #a50f15; + stroke: #a50f15; +} +.Reds.q8-9 { + fill: #67000d; + background: #67000d; + stroke: #67000d; +} +.Greys.q0-3 { + fill: #f0f0f0; + background: #f0f0f0; + stroke: #f0f0f0; +} +.Greys.q1-3 { + fill: #bdbdbd; + background: #bdbdbd; + stroke: #bdbdbd; +} +.Greys.q2-3 { + fill: #636363; + background: #636363; + stroke: #636363; +} +.Greys.q0-4 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.Greys.q1-4 { + fill: #cccccc; + background: #cccccc; + stroke: #cccccc; +} +.Greys.q2-4 { + fill: #969696; + background: #969696; + stroke: #969696; +} +.Greys.q3-4 { + fill: #525252; + background: #525252; + stroke: #525252; +} +.Greys.q0-5 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.Greys.q1-5 { + fill: #cccccc; + background: #cccccc; + stroke: #cccccc; +} +.Greys.q2-5 { + fill: #969696; + background: #969696; + stroke: #969696; +} +.Greys.q3-5 { + fill: #636363; + background: #636363; + stroke: #636363; +} +.Greys.q4-5 { + fill: #252525; + background: #252525; + stroke: #252525; +} +.Greys.q0-6 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.Greys.q1-6 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Greys.q2-6 { + fill: #bdbdbd; + background: #bdbdbd; + stroke: #bdbdbd; +} +.Greys.q3-6 { + fill: #969696; + background: #969696; + stroke: #969696; +} +.Greys.q4-6 { + fill: #636363; + background: #636363; + stroke: #636363; +} +.Greys.q5-6 { + fill: #252525; + background: #252525; + stroke: #252525; +} +.Greys.q0-7 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.Greys.q1-7 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Greys.q2-7 { + fill: #bdbdbd; + background: #bdbdbd; + stroke: #bdbdbd; +} +.Greys.q3-7 { + fill: #969696; + background: #969696; + stroke: #969696; +} +.Greys.q4-7 { + fill: #737373; + background: #737373; + stroke: #737373; +} +.Greys.q5-7 { + fill: #525252; + background: #525252; + stroke: #525252; +} +.Greys.q6-7 { + fill: #252525; + background: #252525; + stroke: #252525; +} +.Greys.q0-8 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.Greys.q1-8 { + fill: #f0f0f0; + background: #f0f0f0; + stroke: #f0f0f0; +} +.Greys.q2-8 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Greys.q3-8 { + fill: #bdbdbd; + background: #bdbdbd; + stroke: #bdbdbd; +} +.Greys.q4-8 { + fill: #969696; + background: #969696; + stroke: #969696; +} +.Greys.q5-8 { + fill: #737373; + background: #737373; + stroke: #737373; +} +.Greys.q6-8 { + fill: #525252; + background: #525252; + stroke: #525252; +} +.Greys.q7-8 { + fill: #252525; + background: #252525; + stroke: #252525; +} +.Greys.q0-9 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.Greys.q1-9 { + fill: #f0f0f0; + background: #f0f0f0; + stroke: #f0f0f0; +} +.Greys.q2-9 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Greys.q3-9 { + fill: #bdbdbd; + background: #bdbdbd; + stroke: #bdbdbd; +} +.Greys.q4-9 { + fill: #969696; + background: #969696; + stroke: #969696; +} +.Greys.q5-9 { + fill: #737373; + background: #737373; + stroke: #737373; +} +.Greys.q6-9 { + fill: #525252; + background: #525252; + stroke: #525252; +} +.Greys.q7-9 { + fill: #252525; + background: #252525; + stroke: #252525; +} +.Greys.q8-9 { + fill: #000000; + background: #000000; + stroke: #000000; +} +.PuOr.q0-3 { + fill: #f1a340; + background: #f1a340; + stroke: #f1a340; +} +.PuOr.q1-3 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PuOr.q2-3 { + fill: #998ec3; + background: #998ec3; + stroke: #998ec3; +} +.PuOr.q0-4 { + fill: #e66101; + background: #e66101; + stroke: #e66101; +} +.PuOr.q1-4 { + fill: #fdb863; + background: #fdb863; + stroke: #fdb863; +} +.PuOr.q2-4 { + fill: #b2abd2; + background: #b2abd2; + stroke: #b2abd2; +} +.PuOr.q3-4 { + fill: #5e3c99; + background: #5e3c99; + stroke: #5e3c99; +} +.PuOr.q0-5 { + fill: #e66101; + background: #e66101; + stroke: #e66101; +} +.PuOr.q1-5 { + fill: #fdb863; + background: #fdb863; + stroke: #fdb863; +} +.PuOr.q2-5 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PuOr.q3-5 { + fill: #b2abd2; + background: #b2abd2; + stroke: #b2abd2; +} +.PuOr.q4-5 { + fill: #5e3c99; + background: #5e3c99; + stroke: #5e3c99; +} +.PuOr.q0-6 { + fill: #b35806; + background: #b35806; + stroke: #b35806; +} +.PuOr.q1-6 { + fill: #f1a340; + background: #f1a340; + stroke: #f1a340; +} +.PuOr.q2-6 { + fill: #fee0b6; + background: #fee0b6; + stroke: #fee0b6; +} +.PuOr.q3-6 { + fill: #d8daeb; + background: #d8daeb; + stroke: #d8daeb; +} +.PuOr.q4-6 { + fill: #998ec3; + background: #998ec3; + stroke: #998ec3; +} +.PuOr.q5-6 { + fill: #542788; + background: #542788; + stroke: #542788; +} +.PuOr.q0-7 { + fill: #b35806; + background: #b35806; + stroke: #b35806; +} +.PuOr.q1-7 { + fill: #f1a340; + background: #f1a340; + stroke: #f1a340; +} +.PuOr.q2-7 { + fill: #fee0b6; + background: #fee0b6; + stroke: #fee0b6; +} +.PuOr.q3-7 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PuOr.q4-7 { + fill: #d8daeb; + background: #d8daeb; + stroke: #d8daeb; +} +.PuOr.q5-7 { + fill: #998ec3; + background: #998ec3; + stroke: #998ec3; +} +.PuOr.q6-7 { + fill: #542788; + background: #542788; + stroke: #542788; +} +.PuOr.q0-8 { + fill: #b35806; + background: #b35806; + stroke: #b35806; +} +.PuOr.q1-8 { + fill: #e08214; + background: #e08214; + stroke: #e08214; +} +.PuOr.q2-8 { + fill: #fdb863; + background: #fdb863; + stroke: #fdb863; +} +.PuOr.q3-8 { + fill: #fee0b6; + background: #fee0b6; + stroke: #fee0b6; +} +.PuOr.q4-8 { + fill: #d8daeb; + background: #d8daeb; + stroke: #d8daeb; +} +.PuOr.q5-8 { + fill: #b2abd2; + background: #b2abd2; + stroke: #b2abd2; +} +.PuOr.q6-8 { + fill: #8073ac; + background: #8073ac; + stroke: #8073ac; +} +.PuOr.q7-8 { + fill: #542788; + background: #542788; + stroke: #542788; +} +.PuOr.q0-9 { + fill: #b35806; + background: #b35806; + stroke: #b35806; +} +.PuOr.q1-9 { + fill: #e08214; + background: #e08214; + stroke: #e08214; +} +.PuOr.q2-9 { + fill: #fdb863; + background: #fdb863; + stroke: #fdb863; +} +.PuOr.q3-9 { + fill: #fee0b6; + background: #fee0b6; + stroke: #fee0b6; +} +.PuOr.q4-9 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PuOr.q5-9 { + fill: #d8daeb; + background: #d8daeb; + stroke: #d8daeb; +} +.PuOr.q6-9 { + fill: #b2abd2; + background: #b2abd2; + stroke: #b2abd2; +} +.PuOr.q7-9 { + fill: #8073ac; + background: #8073ac; + stroke: #8073ac; +} +.PuOr.q8-9 { + fill: #542788; + background: #542788; + stroke: #542788; +} +.PuOr.q0-10 { + fill: #7f3b08; + background: #7f3b08; + stroke: #7f3b08; +} +.PuOr.q1-10 { + fill: #b35806; + background: #b35806; + stroke: #b35806; +} +.PuOr.q2-10 { + fill: #e08214; + background: #e08214; + stroke: #e08214; +} +.PuOr.q3-10 { + fill: #fdb863; + background: #fdb863; + stroke: #fdb863; +} +.PuOr.q4-10 { + fill: #fee0b6; + background: #fee0b6; + stroke: #fee0b6; +} +.PuOr.q5-10 { + fill: #d8daeb; + background: #d8daeb; + stroke: #d8daeb; +} +.PuOr.q6-10 { + fill: #b2abd2; + background: #b2abd2; + stroke: #b2abd2; +} +.PuOr.q7-10 { + fill: #8073ac; + background: #8073ac; + stroke: #8073ac; +} +.PuOr.q8-10 { + fill: #542788; + background: #542788; + stroke: #542788; +} +.PuOr.q9-10 { + fill: #2d004b; + background: #2d004b; + stroke: #2d004b; +} +.PuOr.q0-11 { + fill: #7f3b08; + background: #7f3b08; + stroke: #7f3b08; +} +.PuOr.q1-11 { + fill: #b35806; + background: #b35806; + stroke: #b35806; +} +.PuOr.q2-11 { + fill: #e08214; + background: #e08214; + stroke: #e08214; +} +.PuOr.q3-11 { + fill: #fdb863; + background: #fdb863; + stroke: #fdb863; +} +.PuOr.q4-11 { + fill: #fee0b6; + background: #fee0b6; + stroke: #fee0b6; +} +.PuOr.q5-11 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PuOr.q6-11 { + fill: #d8daeb; + background: #d8daeb; + stroke: #d8daeb; +} +.PuOr.q7-11 { + fill: #b2abd2; + background: #b2abd2; + stroke: #b2abd2; +} +.PuOr.q8-11 { + fill: #8073ac; + background: #8073ac; + stroke: #8073ac; +} +.PuOr.q9-11 { + fill: #542788; + background: #542788; + stroke: #542788; +} +.PuOr.q10-11 { + fill: #2d004b; + background: #2d004b; + stroke: #2d004b; +} +.BrBG.q0-3 { + fill: #d8b365; + background: #d8b365; + stroke: #d8b365; +} +.BrBG.q1-3 { + fill: #f5f5f5; + background: #f5f5f5; + stroke: #f5f5f5; +} +.BrBG.q2-3 { + fill: #5ab4ac; + background: #5ab4ac; + stroke: #5ab4ac; +} +.BrBG.q0-4 { + fill: #a6611a; + background: #a6611a; + stroke: #a6611a; +} +.BrBG.q1-4 { + fill: #dfc27d; + background: #dfc27d; + stroke: #dfc27d; +} +.BrBG.q2-4 { + fill: #80cdc1; + background: #80cdc1; + stroke: #80cdc1; +} +.BrBG.q3-4 { + fill: #018571; + background: #018571; + stroke: #018571; +} +.BrBG.q0-5 { + fill: #a6611a; + background: #a6611a; + stroke: #a6611a; +} +.BrBG.q1-5 { + fill: #dfc27d; + background: #dfc27d; + stroke: #dfc27d; +} +.BrBG.q2-5 { + fill: #f5f5f5; + background: #f5f5f5; + stroke: #f5f5f5; +} +.BrBG.q3-5 { + fill: #80cdc1; + background: #80cdc1; + stroke: #80cdc1; +} +.BrBG.q4-5 { + fill: #018571; + background: #018571; + stroke: #018571; +} +.BrBG.q0-6 { + fill: #8c510a; + background: #8c510a; + stroke: #8c510a; +} +.BrBG.q1-6 { + fill: #d8b365; + background: #d8b365; + stroke: #d8b365; +} +.BrBG.q2-6 { + fill: #f6e8c3; + background: #f6e8c3; + stroke: #f6e8c3; +} +.BrBG.q3-6 { + fill: #c7eae5; + background: #c7eae5; + stroke: #c7eae5; +} +.BrBG.q4-6 { + fill: #5ab4ac; + background: #5ab4ac; + stroke: #5ab4ac; +} +.BrBG.q5-6 { + fill: #01665e; + background: #01665e; + stroke: #01665e; +} +.BrBG.q0-7 { + fill: #8c510a; + background: #8c510a; + stroke: #8c510a; +} +.BrBG.q1-7 { + fill: #d8b365; + background: #d8b365; + stroke: #d8b365; +} +.BrBG.q2-7 { + fill: #f6e8c3; + background: #f6e8c3; + stroke: #f6e8c3; +} +.BrBG.q3-7 { + fill: #f5f5f5; + background: #f5f5f5; + stroke: #f5f5f5; +} +.BrBG.q4-7 { + fill: #c7eae5; + background: #c7eae5; + stroke: #c7eae5; +} +.BrBG.q5-7 { + fill: #5ab4ac; + background: #5ab4ac; + stroke: #5ab4ac; +} +.BrBG.q6-7 { + fill: #01665e; + background: #01665e; + stroke: #01665e; +} +.BrBG.q0-8 { + fill: #8c510a; + background: #8c510a; + stroke: #8c510a; +} +.BrBG.q1-8 { + fill: #bf812d; + background: #bf812d; + stroke: #bf812d; +} +.BrBG.q2-8 { + fill: #dfc27d; + background: #dfc27d; + stroke: #dfc27d; +} +.BrBG.q3-8 { + fill: #f6e8c3; + background: #f6e8c3; + stroke: #f6e8c3; +} +.BrBG.q4-8 { + fill: #c7eae5; + background: #c7eae5; + stroke: #c7eae5; +} +.BrBG.q5-8 { + fill: #80cdc1; + background: #80cdc1; + stroke: #80cdc1; +} +.BrBG.q6-8 { + fill: #35978f; + background: #35978f; + stroke: #35978f; +} +.BrBG.q7-8 { + fill: #01665e; + background: #01665e; + stroke: #01665e; +} +.BrBG.q0-9 { + fill: #8c510a; + background: #8c510a; + stroke: #8c510a; +} +.BrBG.q1-9 { + fill: #bf812d; + background: #bf812d; + stroke: #bf812d; +} +.BrBG.q2-9 { + fill: #dfc27d; + background: #dfc27d; + stroke: #dfc27d; +} +.BrBG.q3-9 { + fill: #f6e8c3; + background: #f6e8c3; + stroke: #f6e8c3; +} +.BrBG.q4-9 { + fill: #f5f5f5; + background: #f5f5f5; + stroke: #f5f5f5; +} +.BrBG.q5-9 { + fill: #c7eae5; + background: #c7eae5; + stroke: #c7eae5; +} +.BrBG.q6-9 { + fill: #80cdc1; + background: #80cdc1; + stroke: #80cdc1; +} +.BrBG.q7-9 { + fill: #35978f; + background: #35978f; + stroke: #35978f; +} +.BrBG.q8-9 { + fill: #01665e; + background: #01665e; + stroke: #01665e; +} +.BrBG.q0-10 { + fill: #543005; + background: #543005; + stroke: #543005; +} +.BrBG.q1-10 { + fill: #8c510a; + background: #8c510a; + stroke: #8c510a; +} +.BrBG.q2-10 { + fill: #bf812d; + background: #bf812d; + stroke: #bf812d; +} +.BrBG.q3-10 { + fill: #dfc27d; + background: #dfc27d; + stroke: #dfc27d; +} +.BrBG.q4-10 { + fill: #f6e8c3; + background: #f6e8c3; + stroke: #f6e8c3; +} +.BrBG.q5-10 { + fill: #c7eae5; + background: #c7eae5; + stroke: #c7eae5; +} +.BrBG.q6-10 { + fill: #80cdc1; + background: #80cdc1; + stroke: #80cdc1; +} +.BrBG.q7-10 { + fill: #35978f; + background: #35978f; + stroke: #35978f; +} +.BrBG.q8-10 { + fill: #01665e; + background: #01665e; + stroke: #01665e; +} +.BrBG.q9-10 { + fill: #003c30; + background: #003c30; + stroke: #003c30; +} +.BrBG.q0-11 { + fill: #543005; + background: #543005; + stroke: #543005; +} +.BrBG.q1-11 { + fill: #8c510a; + background: #8c510a; + stroke: #8c510a; +} +.BrBG.q2-11 { + fill: #bf812d; + background: #bf812d; + stroke: #bf812d; +} +.BrBG.q3-11 { + fill: #dfc27d; + background: #dfc27d; + stroke: #dfc27d; +} +.BrBG.q4-11 { + fill: #f6e8c3; + background: #f6e8c3; + stroke: #f6e8c3; +} +.BrBG.q5-11 { + fill: #f5f5f5; + background: #f5f5f5; + stroke: #f5f5f5; +} +.BrBG.q6-11 { + fill: #c7eae5; + background: #c7eae5; + stroke: #c7eae5; +} +.BrBG.q7-11 { + fill: #80cdc1; + background: #80cdc1; + stroke: #80cdc1; +} +.BrBG.q8-11 { + fill: #35978f; + background: #35978f; + stroke: #35978f; +} +.BrBG.q9-11 { + fill: #01665e; + background: #01665e; + stroke: #01665e; +} +.BrBG.q10-11 { + fill: #003c30; + background: #003c30; + stroke: #003c30; +} +.PRGn.q0-3 { + fill: #af8dc3; + background: #af8dc3; + stroke: #af8dc3; +} +.PRGn.q1-3 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PRGn.q2-3 { + fill: #7fbf7b; + background: #7fbf7b; + stroke: #7fbf7b; +} +.PRGn.q0-4 { + fill: #7b3294; + background: #7b3294; + stroke: #7b3294; +} +.PRGn.q1-4 { + fill: #c2a5cf; + background: #c2a5cf; + stroke: #c2a5cf; +} +.PRGn.q2-4 { + fill: #a6dba0; + background: #a6dba0; + stroke: #a6dba0; +} +.PRGn.q3-4 { + fill: #008837; + background: #008837; + stroke: #008837; +} +.PRGn.q0-5 { + fill: #7b3294; + background: #7b3294; + stroke: #7b3294; +} +.PRGn.q1-5 { + fill: #c2a5cf; + background: #c2a5cf; + stroke: #c2a5cf; +} +.PRGn.q2-5 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PRGn.q3-5 { + fill: #a6dba0; + background: #a6dba0; + stroke: #a6dba0; +} +.PRGn.q4-5 { + fill: #008837; + background: #008837; + stroke: #008837; +} +.PRGn.q0-6 { + fill: #762a83; + background: #762a83; + stroke: #762a83; +} +.PRGn.q1-6 { + fill: #af8dc3; + background: #af8dc3; + stroke: #af8dc3; +} +.PRGn.q2-6 { + fill: #e7d4e8; + background: #e7d4e8; + stroke: #e7d4e8; +} +.PRGn.q3-6 { + fill: #d9f0d3; + background: #d9f0d3; + stroke: #d9f0d3; +} +.PRGn.q4-6 { + fill: #7fbf7b; + background: #7fbf7b; + stroke: #7fbf7b; +} +.PRGn.q5-6 { + fill: #1b7837; + background: #1b7837; + stroke: #1b7837; +} +.PRGn.q0-7 { + fill: #762a83; + background: #762a83; + stroke: #762a83; +} +.PRGn.q1-7 { + fill: #af8dc3; + background: #af8dc3; + stroke: #af8dc3; +} +.PRGn.q2-7 { + fill: #e7d4e8; + background: #e7d4e8; + stroke: #e7d4e8; +} +.PRGn.q3-7 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PRGn.q4-7 { + fill: #d9f0d3; + background: #d9f0d3; + stroke: #d9f0d3; +} +.PRGn.q5-7 { + fill: #7fbf7b; + background: #7fbf7b; + stroke: #7fbf7b; +} +.PRGn.q6-7 { + fill: #1b7837; + background: #1b7837; + stroke: #1b7837; +} +.PRGn.q0-8 { + fill: #762a83; + background: #762a83; + stroke: #762a83; +} +.PRGn.q1-8 { + fill: #9970ab; + background: #9970ab; + stroke: #9970ab; +} +.PRGn.q2-8 { + fill: #c2a5cf; + background: #c2a5cf; + stroke: #c2a5cf; +} +.PRGn.q3-8 { + fill: #e7d4e8; + background: #e7d4e8; + stroke: #e7d4e8; +} +.PRGn.q4-8 { + fill: #d9f0d3; + background: #d9f0d3; + stroke: #d9f0d3; +} +.PRGn.q5-8 { + fill: #a6dba0; + background: #a6dba0; + stroke: #a6dba0; +} +.PRGn.q6-8 { + fill: #5aae61; + background: #5aae61; + stroke: #5aae61; +} +.PRGn.q7-8 { + fill: #1b7837; + background: #1b7837; + stroke: #1b7837; +} +.PRGn.q0-9 { + fill: #762a83; + background: #762a83; + stroke: #762a83; +} +.PRGn.q1-9 { + fill: #9970ab; + background: #9970ab; + stroke: #9970ab; +} +.PRGn.q2-9 { + fill: #c2a5cf; + background: #c2a5cf; + stroke: #c2a5cf; +} +.PRGn.q3-9 { + fill: #e7d4e8; + background: #e7d4e8; + stroke: #e7d4e8; +} +.PRGn.q4-9 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PRGn.q5-9 { + fill: #d9f0d3; + background: #d9f0d3; + stroke: #d9f0d3; +} +.PRGn.q6-9 { + fill: #a6dba0; + background: #a6dba0; + stroke: #a6dba0; +} +.PRGn.q7-9 { + fill: #5aae61; + background: #5aae61; + stroke: #5aae61; +} +.PRGn.q8-9 { + fill: #1b7837; + background: #1b7837; + stroke: #1b7837; +} +.PRGn.q0-10 { + fill: #40004b; + background: #40004b; + stroke: #40004b; +} +.PRGn.q1-10 { + fill: #762a83; + background: #762a83; + stroke: #762a83; +} +.PRGn.q2-10 { + fill: #9970ab; + background: #9970ab; + stroke: #9970ab; +} +.PRGn.q3-10 { + fill: #c2a5cf; + background: #c2a5cf; + stroke: #c2a5cf; +} +.PRGn.q4-10 { + fill: #e7d4e8; + background: #e7d4e8; + stroke: #e7d4e8; +} +.PRGn.q5-10 { + fill: #d9f0d3; + background: #d9f0d3; + stroke: #d9f0d3; +} +.PRGn.q6-10 { + fill: #a6dba0; + background: #a6dba0; + stroke: #a6dba0; +} +.PRGn.q7-10 { + fill: #5aae61; + background: #5aae61; + stroke: #5aae61; +} +.PRGn.q8-10 { + fill: #1b7837; + background: #1b7837; + stroke: #1b7837; +} +.PRGn.q9-10 { + fill: #00441b; + background: #00441b; + stroke: #00441b; +} +.PRGn.q0-11 { + fill: #40004b; + background: #40004b; + stroke: #40004b; +} +.PRGn.q1-11 { + fill: #762a83; + background: #762a83; + stroke: #762a83; +} +.PRGn.q2-11 { + fill: #9970ab; + background: #9970ab; + stroke: #9970ab; +} +.PRGn.q3-11 { + fill: #c2a5cf; + background: #c2a5cf; + stroke: #c2a5cf; +} +.PRGn.q4-11 { + fill: #e7d4e8; + background: #e7d4e8; + stroke: #e7d4e8; +} +.PRGn.q5-11 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PRGn.q6-11 { + fill: #d9f0d3; + background: #d9f0d3; + stroke: #d9f0d3; +} +.PRGn.q7-11 { + fill: #a6dba0; + background: #a6dba0; + stroke: #a6dba0; +} +.PRGn.q8-11 { + fill: #5aae61; + background: #5aae61; + stroke: #5aae61; +} +.PRGn.q9-11 { + fill: #1b7837; + background: #1b7837; + stroke: #1b7837; +} +.PRGn.q10-11 { + fill: #00441b; + background: #00441b; + stroke: #00441b; +} +.PiYG.q0-3 { + fill: #e9a3c9; + background: #e9a3c9; + stroke: #e9a3c9; +} +.PiYG.q1-3 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PiYG.q2-3 { + fill: #a1d76a; + background: #a1d76a; + stroke: #a1d76a; +} +.PiYG.q0-4 { + fill: #d01c8b; + background: #d01c8b; + stroke: #d01c8b; +} +.PiYG.q1-4 { + fill: #f1b6da; + background: #f1b6da; + stroke: #f1b6da; +} +.PiYG.q2-4 { + fill: #b8e186; + background: #b8e186; + stroke: #b8e186; +} +.PiYG.q3-4 { + fill: #4dac26; + background: #4dac26; + stroke: #4dac26; +} +.PiYG.q0-5 { + fill: #d01c8b; + background: #d01c8b; + stroke: #d01c8b; +} +.PiYG.q1-5 { + fill: #f1b6da; + background: #f1b6da; + stroke: #f1b6da; +} +.PiYG.q2-5 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PiYG.q3-5 { + fill: #b8e186; + background: #b8e186; + stroke: #b8e186; +} +.PiYG.q4-5 { + fill: #4dac26; + background: #4dac26; + stroke: #4dac26; +} +.PiYG.q0-6 { + fill: #c51b7d; + background: #c51b7d; + stroke: #c51b7d; +} +.PiYG.q1-6 { + fill: #e9a3c9; + background: #e9a3c9; + stroke: #e9a3c9; +} +.PiYG.q2-6 { + fill: #fde0ef; + background: #fde0ef; + stroke: #fde0ef; +} +.PiYG.q3-6 { + fill: #e6f5d0; + background: #e6f5d0; + stroke: #e6f5d0; +} +.PiYG.q4-6 { + fill: #a1d76a; + background: #a1d76a; + stroke: #a1d76a; +} +.PiYG.q5-6 { + fill: #4d9221; + background: #4d9221; + stroke: #4d9221; +} +.PiYG.q0-7 { + fill: #c51b7d; + background: #c51b7d; + stroke: #c51b7d; +} +.PiYG.q1-7 { + fill: #e9a3c9; + background: #e9a3c9; + stroke: #e9a3c9; +} +.PiYG.q2-7 { + fill: #fde0ef; + background: #fde0ef; + stroke: #fde0ef; +} +.PiYG.q3-7 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PiYG.q4-7 { + fill: #e6f5d0; + background: #e6f5d0; + stroke: #e6f5d0; +} +.PiYG.q5-7 { + fill: #a1d76a; + background: #a1d76a; + stroke: #a1d76a; +} +.PiYG.q6-7 { + fill: #4d9221; + background: #4d9221; + stroke: #4d9221; +} +.PiYG.q0-8 { + fill: #c51b7d; + background: #c51b7d; + stroke: #c51b7d; +} +.PiYG.q1-8 { + fill: #de77ae; + background: #de77ae; + stroke: #de77ae; +} +.PiYG.q2-8 { + fill: #f1b6da; + background: #f1b6da; + stroke: #f1b6da; +} +.PiYG.q3-8 { + fill: #fde0ef; + background: #fde0ef; + stroke: #fde0ef; +} +.PiYG.q4-8 { + fill: #e6f5d0; + background: #e6f5d0; + stroke: #e6f5d0; +} +.PiYG.q5-8 { + fill: #b8e186; + background: #b8e186; + stroke: #b8e186; +} +.PiYG.q6-8 { + fill: #7fbc41; + background: #7fbc41; + stroke: #7fbc41; +} +.PiYG.q7-8 { + fill: #4d9221; + background: #4d9221; + stroke: #4d9221; +} +.PiYG.q0-9 { + fill: #c51b7d; + background: #c51b7d; + stroke: #c51b7d; +} +.PiYG.q1-9 { + fill: #de77ae; + background: #de77ae; + stroke: #de77ae; +} +.PiYG.q2-9 { + fill: #f1b6da; + background: #f1b6da; + stroke: #f1b6da; +} +.PiYG.q3-9 { + fill: #fde0ef; + background: #fde0ef; + stroke: #fde0ef; +} +.PiYG.q4-9 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PiYG.q5-9 { + fill: #e6f5d0; + background: #e6f5d0; + stroke: #e6f5d0; +} +.PiYG.q6-9 { + fill: #b8e186; + background: #b8e186; + stroke: #b8e186; +} +.PiYG.q7-9 { + fill: #7fbc41; + background: #7fbc41; + stroke: #7fbc41; +} +.PiYG.q8-9 { + fill: #4d9221; + background: #4d9221; + stroke: #4d9221; +} +.PiYG.q0-10 { + fill: #8e0152; + background: #8e0152; + stroke: #8e0152; +} +.PiYG.q1-10 { + fill: #c51b7d; + background: #c51b7d; + stroke: #c51b7d; +} +.PiYG.q2-10 { + fill: #de77ae; + background: #de77ae; + stroke: #de77ae; +} +.PiYG.q3-10 { + fill: #f1b6da; + background: #f1b6da; + stroke: #f1b6da; +} +.PiYG.q4-10 { + fill: #fde0ef; + background: #fde0ef; + stroke: #fde0ef; +} +.PiYG.q5-10 { + fill: #e6f5d0; + background: #e6f5d0; + stroke: #e6f5d0; +} +.PiYG.q6-10 { + fill: #b8e186; + background: #b8e186; + stroke: #b8e186; +} +.PiYG.q7-10 { + fill: #7fbc41; + background: #7fbc41; + stroke: #7fbc41; +} +.PiYG.q8-10 { + fill: #4d9221; + background: #4d9221; + stroke: #4d9221; +} +.PiYG.q9-10 { + fill: #276419; + background: #276419; + stroke: #276419; +} +.PiYG.q0-11 { + fill: #8e0152; + background: #8e0152; + stroke: #8e0152; +} +.PiYG.q1-11 { + fill: #c51b7d; + background: #c51b7d; + stroke: #c51b7d; +} +.PiYG.q2-11 { + fill: #de77ae; + background: #de77ae; + stroke: #de77ae; +} +.PiYG.q3-11 { + fill: #f1b6da; + background: #f1b6da; + stroke: #f1b6da; +} +.PiYG.q4-11 { + fill: #fde0ef; + background: #fde0ef; + stroke: #fde0ef; +} +.PiYG.q5-11 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.PiYG.q6-11 { + fill: #e6f5d0; + background: #e6f5d0; + stroke: #e6f5d0; +} +.PiYG.q7-11 { + fill: #b8e186; + background: #b8e186; + stroke: #b8e186; +} +.PiYG.q8-11 { + fill: #7fbc41; + background: #7fbc41; + stroke: #7fbc41; +} +.PiYG.q9-11 { + fill: #4d9221; + background: #4d9221; + stroke: #4d9221; +} +.PiYG.q10-11 { + fill: #276419; + background: #276419; + stroke: #276419; +} +.RdBu.q0-3 { + fill: #ef8a62; + background: #ef8a62; + stroke: #ef8a62; +} +.RdBu.q1-3 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.RdBu.q2-3 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.RdBu.q0-4 { + fill: #ca0020; + background: #ca0020; + stroke: #ca0020; +} +.RdBu.q1-4 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdBu.q2-4 { + fill: #92c5de; + background: #92c5de; + stroke: #92c5de; +} +.RdBu.q3-4 { + fill: #0571b0; + background: #0571b0; + stroke: #0571b0; +} +.RdBu.q0-5 { + fill: #ca0020; + background: #ca0020; + stroke: #ca0020; +} +.RdBu.q1-5 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdBu.q2-5 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.RdBu.q3-5 { + fill: #92c5de; + background: #92c5de; + stroke: #92c5de; +} +.RdBu.q4-5 { + fill: #0571b0; + background: #0571b0; + stroke: #0571b0; +} +.RdBu.q0-6 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdBu.q1-6 { + fill: #ef8a62; + background: #ef8a62; + stroke: #ef8a62; +} +.RdBu.q2-6 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdBu.q3-6 { + fill: #d1e5f0; + background: #d1e5f0; + stroke: #d1e5f0; +} +.RdBu.q4-6 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.RdBu.q5-6 { + fill: #2166ac; + background: #2166ac; + stroke: #2166ac; +} +.RdBu.q0-7 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdBu.q1-7 { + fill: #ef8a62; + background: #ef8a62; + stroke: #ef8a62; +} +.RdBu.q2-7 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdBu.q3-7 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.RdBu.q4-7 { + fill: #d1e5f0; + background: #d1e5f0; + stroke: #d1e5f0; +} +.RdBu.q5-7 { + fill: #67a9cf; + background: #67a9cf; + stroke: #67a9cf; +} +.RdBu.q6-7 { + fill: #2166ac; + background: #2166ac; + stroke: #2166ac; +} +.RdBu.q0-8 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdBu.q1-8 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdBu.q2-8 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdBu.q3-8 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdBu.q4-8 { + fill: #d1e5f0; + background: #d1e5f0; + stroke: #d1e5f0; +} +.RdBu.q5-8 { + fill: #92c5de; + background: #92c5de; + stroke: #92c5de; +} +.RdBu.q6-8 { + fill: #4393c3; + background: #4393c3; + stroke: #4393c3; +} +.RdBu.q7-8 { + fill: #2166ac; + background: #2166ac; + stroke: #2166ac; +} +.RdBu.q0-9 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdBu.q1-9 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdBu.q2-9 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdBu.q3-9 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdBu.q4-9 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.RdBu.q5-9 { + fill: #d1e5f0; + background: #d1e5f0; + stroke: #d1e5f0; +} +.RdBu.q6-9 { + fill: #92c5de; + background: #92c5de; + stroke: #92c5de; +} +.RdBu.q7-9 { + fill: #4393c3; + background: #4393c3; + stroke: #4393c3; +} +.RdBu.q8-9 { + fill: #2166ac; + background: #2166ac; + stroke: #2166ac; +} +.RdBu.q0-10 { + fill: #67001f; + background: #67001f; + stroke: #67001f; +} +.RdBu.q1-10 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdBu.q2-10 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdBu.q3-10 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdBu.q4-10 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdBu.q5-10 { + fill: #d1e5f0; + background: #d1e5f0; + stroke: #d1e5f0; +} +.RdBu.q6-10 { + fill: #92c5de; + background: #92c5de; + stroke: #92c5de; +} +.RdBu.q7-10 { + fill: #4393c3; + background: #4393c3; + stroke: #4393c3; +} +.RdBu.q8-10 { + fill: #2166ac; + background: #2166ac; + stroke: #2166ac; +} +.RdBu.q9-10 { + fill: #053061; + background: #053061; + stroke: #053061; +} +.RdBu.q0-11 { + fill: #67001f; + background: #67001f; + stroke: #67001f; +} +.RdBu.q1-11 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdBu.q2-11 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdBu.q3-11 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdBu.q4-11 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdBu.q5-11 { + fill: #f7f7f7; + background: #f7f7f7; + stroke: #f7f7f7; +} +.RdBu.q6-11 { + fill: #d1e5f0; + background: #d1e5f0; + stroke: #d1e5f0; +} +.RdBu.q7-11 { + fill: #92c5de; + background: #92c5de; + stroke: #92c5de; +} +.RdBu.q8-11 { + fill: #4393c3; + background: #4393c3; + stroke: #4393c3; +} +.RdBu.q9-11 { + fill: #2166ac; + background: #2166ac; + stroke: #2166ac; +} +.RdBu.q10-11 { + fill: #053061; + background: #053061; + stroke: #053061; +} +.RdGy.q0-3 { + fill: #ef8a62; + background: #ef8a62; + stroke: #ef8a62; +} +.RdGy.q1-3 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.RdGy.q2-3 { + fill: #999999; + background: #999999; + stroke: #999999; +} +.RdGy.q0-4 { + fill: #ca0020; + background: #ca0020; + stroke: #ca0020; +} +.RdGy.q1-4 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdGy.q2-4 { + fill: #bababa; + background: #bababa; + stroke: #bababa; +} +.RdGy.q3-4 { + fill: #404040; + background: #404040; + stroke: #404040; +} +.RdGy.q0-5 { + fill: #ca0020; + background: #ca0020; + stroke: #ca0020; +} +.RdGy.q1-5 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdGy.q2-5 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.RdGy.q3-5 { + fill: #bababa; + background: #bababa; + stroke: #bababa; +} +.RdGy.q4-5 { + fill: #404040; + background: #404040; + stroke: #404040; +} +.RdGy.q0-6 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdGy.q1-6 { + fill: #ef8a62; + background: #ef8a62; + stroke: #ef8a62; +} +.RdGy.q2-6 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdGy.q3-6 { + fill: #e0e0e0; + background: #e0e0e0; + stroke: #e0e0e0; +} +.RdGy.q4-6 { + fill: #999999; + background: #999999; + stroke: #999999; +} +.RdGy.q5-6 { + fill: #4d4d4d; + background: #4d4d4d; + stroke: #4d4d4d; +} +.RdGy.q0-7 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdGy.q1-7 { + fill: #ef8a62; + background: #ef8a62; + stroke: #ef8a62; +} +.RdGy.q2-7 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdGy.q3-7 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.RdGy.q4-7 { + fill: #e0e0e0; + background: #e0e0e0; + stroke: #e0e0e0; +} +.RdGy.q5-7 { + fill: #999999; + background: #999999; + stroke: #999999; +} +.RdGy.q6-7 { + fill: #4d4d4d; + background: #4d4d4d; + stroke: #4d4d4d; +} +.RdGy.q0-8 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdGy.q1-8 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdGy.q2-8 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdGy.q3-8 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdGy.q4-8 { + fill: #e0e0e0; + background: #e0e0e0; + stroke: #e0e0e0; +} +.RdGy.q5-8 { + fill: #bababa; + background: #bababa; + stroke: #bababa; +} +.RdGy.q6-8 { + fill: #878787; + background: #878787; + stroke: #878787; +} +.RdGy.q7-8 { + fill: #4d4d4d; + background: #4d4d4d; + stroke: #4d4d4d; +} +.RdGy.q0-9 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdGy.q1-9 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdGy.q2-9 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdGy.q3-9 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdGy.q4-9 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.RdGy.q5-9 { + fill: #e0e0e0; + background: #e0e0e0; + stroke: #e0e0e0; +} +.RdGy.q6-9 { + fill: #bababa; + background: #bababa; + stroke: #bababa; +} +.RdGy.q7-9 { + fill: #878787; + background: #878787; + stroke: #878787; +} +.RdGy.q8-9 { + fill: #4d4d4d; + background: #4d4d4d; + stroke: #4d4d4d; +} +.RdGy.q0-10 { + fill: #67001f; + background: #67001f; + stroke: #67001f; +} +.RdGy.q1-10 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdGy.q2-10 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdGy.q3-10 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdGy.q4-10 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdGy.q5-10 { + fill: #e0e0e0; + background: #e0e0e0; + stroke: #e0e0e0; +} +.RdGy.q6-10 { + fill: #bababa; + background: #bababa; + stroke: #bababa; +} +.RdGy.q7-10 { + fill: #878787; + background: #878787; + stroke: #878787; +} +.RdGy.q8-10 { + fill: #4d4d4d; + background: #4d4d4d; + stroke: #4d4d4d; +} +.RdGy.q9-10 { + fill: #1a1a1a; + background: #1a1a1a; + stroke: #1a1a1a; +} +.RdGy.q0-11 { + fill: #67001f; + background: #67001f; + stroke: #67001f; +} +.RdGy.q1-11 { + fill: #b2182b; + background: #b2182b; + stroke: #b2182b; +} +.RdGy.q2-11 { + fill: #d6604d; + background: #d6604d; + stroke: #d6604d; +} +.RdGy.q3-11 { + fill: #f4a582; + background: #f4a582; + stroke: #f4a582; +} +.RdGy.q4-11 { + fill: #fddbc7; + background: #fddbc7; + stroke: #fddbc7; +} +.RdGy.q5-11 { + fill: #ffffff; + background: #ffffff; + stroke: #ffffff; +} +.RdGy.q6-11 { + fill: #e0e0e0; + background: #e0e0e0; + stroke: #e0e0e0; +} +.RdGy.q7-11 { + fill: #bababa; + background: #bababa; + stroke: #bababa; +} +.RdGy.q8-11 { + fill: #878787; + background: #878787; + stroke: #878787; +} +.RdGy.q9-11 { + fill: #4d4d4d; + background: #4d4d4d; + stroke: #4d4d4d; +} +.RdGy.q10-11 { + fill: #1a1a1a; + background: #1a1a1a; + stroke: #1a1a1a; +} +.RdYlBu.q0-3 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.RdYlBu.q1-3 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlBu.q2-3 { + fill: #91bfdb; + background: #91bfdb; + stroke: #91bfdb; +} +.RdYlBu.q0-4 { + fill: #d7191c; + background: #d7191c; + stroke: #d7191c; +} +.RdYlBu.q1-4 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlBu.q2-4 { + fill: #abd9e9; + background: #abd9e9; + stroke: #abd9e9; +} +.RdYlBu.q3-4 { + fill: #2c7bb6; + background: #2c7bb6; + stroke: #2c7bb6; +} +.RdYlBu.q0-5 { + fill: #d7191c; + background: #d7191c; + stroke: #d7191c; +} +.RdYlBu.q1-5 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlBu.q2-5 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlBu.q3-5 { + fill: #abd9e9; + background: #abd9e9; + stroke: #abd9e9; +} +.RdYlBu.q4-5 { + fill: #2c7bb6; + background: #2c7bb6; + stroke: #2c7bb6; +} +.RdYlBu.q0-6 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlBu.q1-6 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.RdYlBu.q2-6 { + fill: #fee090; + background: #fee090; + stroke: #fee090; +} +.RdYlBu.q3-6 { + fill: #e0f3f8; + background: #e0f3f8; + stroke: #e0f3f8; +} +.RdYlBu.q4-6 { + fill: #91bfdb; + background: #91bfdb; + stroke: #91bfdb; +} +.RdYlBu.q5-6 { + fill: #4575b4; + background: #4575b4; + stroke: #4575b4; +} +.RdYlBu.q0-7 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlBu.q1-7 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.RdYlBu.q2-7 { + fill: #fee090; + background: #fee090; + stroke: #fee090; +} +.RdYlBu.q3-7 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlBu.q4-7 { + fill: #e0f3f8; + background: #e0f3f8; + stroke: #e0f3f8; +} +.RdYlBu.q5-7 { + fill: #91bfdb; + background: #91bfdb; + stroke: #91bfdb; +} +.RdYlBu.q6-7 { + fill: #4575b4; + background: #4575b4; + stroke: #4575b4; +} +.RdYlBu.q0-8 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlBu.q1-8 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlBu.q2-8 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlBu.q3-8 { + fill: #fee090; + background: #fee090; + stroke: #fee090; +} +.RdYlBu.q4-8 { + fill: #e0f3f8; + background: #e0f3f8; + stroke: #e0f3f8; +} +.RdYlBu.q5-8 { + fill: #abd9e9; + background: #abd9e9; + stroke: #abd9e9; +} +.RdYlBu.q6-8 { + fill: #74add1; + background: #74add1; + stroke: #74add1; +} +.RdYlBu.q7-8 { + fill: #4575b4; + background: #4575b4; + stroke: #4575b4; +} +.RdYlBu.q0-9 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlBu.q1-9 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlBu.q2-9 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlBu.q3-9 { + fill: #fee090; + background: #fee090; + stroke: #fee090; +} +.RdYlBu.q4-9 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlBu.q5-9 { + fill: #e0f3f8; + background: #e0f3f8; + stroke: #e0f3f8; +} +.RdYlBu.q6-9 { + fill: #abd9e9; + background: #abd9e9; + stroke: #abd9e9; +} +.RdYlBu.q7-9 { + fill: #74add1; + background: #74add1; + stroke: #74add1; +} +.RdYlBu.q8-9 { + fill: #4575b4; + background: #4575b4; + stroke: #4575b4; +} +.RdYlBu.q0-10 { + fill: #a50026; + background: #a50026; + stroke: #a50026; +} +.RdYlBu.q1-10 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlBu.q2-10 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlBu.q3-10 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlBu.q4-10 { + fill: #fee090; + background: #fee090; + stroke: #fee090; +} +.RdYlBu.q5-10 { + fill: #e0f3f8; + background: #e0f3f8; + stroke: #e0f3f8; +} +.RdYlBu.q6-10 { + fill: #abd9e9; + background: #abd9e9; + stroke: #abd9e9; +} +.RdYlBu.q7-10 { + fill: #74add1; + background: #74add1; + stroke: #74add1; +} +.RdYlBu.q8-10 { + fill: #4575b4; + background: #4575b4; + stroke: #4575b4; +} +.RdYlBu.q9-10 { + fill: #313695; + background: #313695; + stroke: #313695; +} +.RdYlBu.q0-11 { + fill: #a50026; + background: #a50026; + stroke: #a50026; +} +.RdYlBu.q1-11 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlBu.q2-11 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlBu.q3-11 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlBu.q4-11 { + fill: #fee090; + background: #fee090; + stroke: #fee090; +} +.RdYlBu.q5-11 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlBu.q6-11 { + fill: #e0f3f8; + background: #e0f3f8; + stroke: #e0f3f8; +} +.RdYlBu.q7-11 { + fill: #abd9e9; + background: #abd9e9; + stroke: #abd9e9; +} +.RdYlBu.q8-11 { + fill: #74add1; + background: #74add1; + stroke: #74add1; +} +.RdYlBu.q9-11 { + fill: #4575b4; + background: #4575b4; + stroke: #4575b4; +} +.RdYlBu.q10-11 { + fill: #313695; + background: #313695; + stroke: #313695; +} +.Spectral.q0-3 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.Spectral.q1-3 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.Spectral.q2-3 { + fill: #99d594; + background: #99d594; + stroke: #99d594; +} +.Spectral.q0-4 { + fill: #d7191c; + background: #d7191c; + stroke: #d7191c; +} +.Spectral.q1-4 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.Spectral.q2-4 { + fill: #abdda4; + background: #abdda4; + stroke: #abdda4; +} +.Spectral.q3-4 { + fill: #2b83ba; + background: #2b83ba; + stroke: #2b83ba; +} +.Spectral.q0-5 { + fill: #d7191c; + background: #d7191c; + stroke: #d7191c; +} +.Spectral.q1-5 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.Spectral.q2-5 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.Spectral.q3-5 { + fill: #abdda4; + background: #abdda4; + stroke: #abdda4; +} +.Spectral.q4-5 { + fill: #2b83ba; + background: #2b83ba; + stroke: #2b83ba; +} +.Spectral.q0-6 { + fill: #d53e4f; + background: #d53e4f; + stroke: #d53e4f; +} +.Spectral.q1-6 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.Spectral.q2-6 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.Spectral.q3-6 { + fill: #e6f598; + background: #e6f598; + stroke: #e6f598; +} +.Spectral.q4-6 { + fill: #99d594; + background: #99d594; + stroke: #99d594; +} +.Spectral.q5-6 { + fill: #3288bd; + background: #3288bd; + stroke: #3288bd; +} +.Spectral.q0-7 { + fill: #d53e4f; + background: #d53e4f; + stroke: #d53e4f; +} +.Spectral.q1-7 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.Spectral.q2-7 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.Spectral.q3-7 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.Spectral.q4-7 { + fill: #e6f598; + background: #e6f598; + stroke: #e6f598; +} +.Spectral.q5-7 { + fill: #99d594; + background: #99d594; + stroke: #99d594; +} +.Spectral.q6-7 { + fill: #3288bd; + background: #3288bd; + stroke: #3288bd; +} +.Spectral.q0-8 { + fill: #d53e4f; + background: #d53e4f; + stroke: #d53e4f; +} +.Spectral.q1-8 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.Spectral.q2-8 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.Spectral.q3-8 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.Spectral.q4-8 { + fill: #e6f598; + background: #e6f598; + stroke: #e6f598; +} +.Spectral.q5-8 { + fill: #abdda4; + background: #abdda4; + stroke: #abdda4; +} +.Spectral.q6-8 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Spectral.q7-8 { + fill: #3288bd; + background: #3288bd; + stroke: #3288bd; +} +.Spectral.q0-9 { + fill: #d53e4f; + background: #d53e4f; + stroke: #d53e4f; +} +.Spectral.q1-9 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.Spectral.q2-9 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.Spectral.q3-9 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.Spectral.q4-9 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.Spectral.q5-9 { + fill: #e6f598; + background: #e6f598; + stroke: #e6f598; +} +.Spectral.q6-9 { + fill: #abdda4; + background: #abdda4; + stroke: #abdda4; +} +.Spectral.q7-9 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Spectral.q8-9 { + fill: #3288bd; + background: #3288bd; + stroke: #3288bd; +} +.Spectral.q0-10 { + fill: #9e0142; + background: #9e0142; + stroke: #9e0142; +} +.Spectral.q1-10 { + fill: #d53e4f; + background: #d53e4f; + stroke: #d53e4f; +} +.Spectral.q2-10 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.Spectral.q3-10 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.Spectral.q4-10 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.Spectral.q5-10 { + fill: #e6f598; + background: #e6f598; + stroke: #e6f598; +} +.Spectral.q6-10 { + fill: #abdda4; + background: #abdda4; + stroke: #abdda4; +} +.Spectral.q7-10 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Spectral.q8-10 { + fill: #3288bd; + background: #3288bd; + stroke: #3288bd; +} +.Spectral.q9-10 { + fill: #5e4fa2; + background: #5e4fa2; + stroke: #5e4fa2; +} +.Spectral.q0-11 { + fill: #9e0142; + background: #9e0142; + stroke: #9e0142; +} +.Spectral.q1-11 { + fill: #d53e4f; + background: #d53e4f; + stroke: #d53e4f; +} +.Spectral.q2-11 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.Spectral.q3-11 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.Spectral.q4-11 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.Spectral.q5-11 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.Spectral.q6-11 { + fill: #e6f598; + background: #e6f598; + stroke: #e6f598; +} +.Spectral.q7-11 { + fill: #abdda4; + background: #abdda4; + stroke: #abdda4; +} +.Spectral.q8-11 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Spectral.q9-11 { + fill: #3288bd; + background: #3288bd; + stroke: #3288bd; +} +.Spectral.q10-11 { + fill: #5e4fa2; + background: #5e4fa2; + stroke: #5e4fa2; +} +.RdYlGn.q0-3 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.RdYlGn.q1-3 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlGn.q2-3 { + fill: #91cf60; + background: #91cf60; + stroke: #91cf60; +} +.RdYlGn.q0-4 { + fill: #d7191c; + background: #d7191c; + stroke: #d7191c; +} +.RdYlGn.q1-4 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlGn.q2-4 { + fill: #a6d96a; + background: #a6d96a; + stroke: #a6d96a; +} +.RdYlGn.q3-4 { + fill: #1a9641; + background: #1a9641; + stroke: #1a9641; +} +.RdYlGn.q0-5 { + fill: #d7191c; + background: #d7191c; + stroke: #d7191c; +} +.RdYlGn.q1-5 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlGn.q2-5 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlGn.q3-5 { + fill: #a6d96a; + background: #a6d96a; + stroke: #a6d96a; +} +.RdYlGn.q4-5 { + fill: #1a9641; + background: #1a9641; + stroke: #1a9641; +} +.RdYlGn.q0-6 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlGn.q1-6 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.RdYlGn.q2-6 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.RdYlGn.q3-6 { + fill: #d9ef8b; + background: #d9ef8b; + stroke: #d9ef8b; +} +.RdYlGn.q4-6 { + fill: #91cf60; + background: #91cf60; + stroke: #91cf60; +} +.RdYlGn.q5-6 { + fill: #1a9850; + background: #1a9850; + stroke: #1a9850; +} +.RdYlGn.q0-7 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlGn.q1-7 { + fill: #fc8d59; + background: #fc8d59; + stroke: #fc8d59; +} +.RdYlGn.q2-7 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.RdYlGn.q3-7 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlGn.q4-7 { + fill: #d9ef8b; + background: #d9ef8b; + stroke: #d9ef8b; +} +.RdYlGn.q5-7 { + fill: #91cf60; + background: #91cf60; + stroke: #91cf60; +} +.RdYlGn.q6-7 { + fill: #1a9850; + background: #1a9850; + stroke: #1a9850; +} +.RdYlGn.q0-8 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlGn.q1-8 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlGn.q2-8 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlGn.q3-8 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.RdYlGn.q4-8 { + fill: #d9ef8b; + background: #d9ef8b; + stroke: #d9ef8b; +} +.RdYlGn.q5-8 { + fill: #a6d96a; + background: #a6d96a; + stroke: #a6d96a; +} +.RdYlGn.q6-8 { + fill: #66bd63; + background: #66bd63; + stroke: #66bd63; +} +.RdYlGn.q7-8 { + fill: #1a9850; + background: #1a9850; + stroke: #1a9850; +} +.RdYlGn.q0-9 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlGn.q1-9 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlGn.q2-9 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlGn.q3-9 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.RdYlGn.q4-9 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlGn.q5-9 { + fill: #d9ef8b; + background: #d9ef8b; + stroke: #d9ef8b; +} +.RdYlGn.q6-9 { + fill: #a6d96a; + background: #a6d96a; + stroke: #a6d96a; +} +.RdYlGn.q7-9 { + fill: #66bd63; + background: #66bd63; + stroke: #66bd63; +} +.RdYlGn.q8-9 { + fill: #1a9850; + background: #1a9850; + stroke: #1a9850; +} +.RdYlGn.q0-10 { + fill: #a50026; + background: #a50026; + stroke: #a50026; +} +.RdYlGn.q1-10 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlGn.q2-10 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlGn.q3-10 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlGn.q4-10 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.RdYlGn.q5-10 { + fill: #d9ef8b; + background: #d9ef8b; + stroke: #d9ef8b; +} +.RdYlGn.q6-10 { + fill: #a6d96a; + background: #a6d96a; + stroke: #a6d96a; +} +.RdYlGn.q7-10 { + fill: #66bd63; + background: #66bd63; + stroke: #66bd63; +} +.RdYlGn.q8-10 { + fill: #1a9850; + background: #1a9850; + stroke: #1a9850; +} +.RdYlGn.q9-10 { + fill: #006837; + background: #006837; + stroke: #006837; +} +.RdYlGn.q0-11 { + fill: #a50026; + background: #a50026; + stroke: #a50026; +} +.RdYlGn.q1-11 { + fill: #d73027; + background: #d73027; + stroke: #d73027; +} +.RdYlGn.q2-11 { + fill: #f46d43; + background: #f46d43; + stroke: #f46d43; +} +.RdYlGn.q3-11 { + fill: #fdae61; + background: #fdae61; + stroke: #fdae61; +} +.RdYlGn.q4-11 { + fill: #fee08b; + background: #fee08b; + stroke: #fee08b; +} +.RdYlGn.q5-11 { + fill: #ffffbf; + background: #ffffbf; + stroke: #ffffbf; +} +.RdYlGn.q6-11 { + fill: #d9ef8b; + background: #d9ef8b; + stroke: #d9ef8b; +} +.RdYlGn.q7-11 { + fill: #a6d96a; + background: #a6d96a; + stroke: #a6d96a; +} +.RdYlGn.q8-11 { + fill: #66bd63; + background: #66bd63; + stroke: #66bd63; +} +.RdYlGn.q9-11 { + fill: #1a9850; + background: #1a9850; + stroke: #1a9850; +} +.RdYlGn.q10-11 { + fill: #006837; + background: #006837; + stroke: #006837; +} +.Accent.q0-3 { + fill: #7fc97f; + background: #7fc97f; + stroke: #7fc97f; +} +.Accent.q1-3 { + fill: #beaed4; + background: #beaed4; + stroke: #beaed4; +} +.Accent.q2-3 { + fill: #fdc086; + background: #fdc086; + stroke: #fdc086; +} +.Accent.q0-4 { + fill: #7fc97f; + background: #7fc97f; + stroke: #7fc97f; +} +.Accent.q1-4 { + fill: #beaed4; + background: #beaed4; + stroke: #beaed4; +} +.Accent.q2-4 { + fill: #fdc086; + background: #fdc086; + stroke: #fdc086; +} +.Accent.q3-4 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Accent.q0-5 { + fill: #7fc97f; + background: #7fc97f; + stroke: #7fc97f; +} +.Accent.q1-5 { + fill: #beaed4; + background: #beaed4; + stroke: #beaed4; +} +.Accent.q2-5 { + fill: #fdc086; + background: #fdc086; + stroke: #fdc086; +} +.Accent.q3-5 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Accent.q4-5 { + fill: #386cb0; + background: #386cb0; + stroke: #386cb0; +} +.Accent.q0-6 { + fill: #7fc97f; + background: #7fc97f; + stroke: #7fc97f; +} +.Accent.q1-6 { + fill: #beaed4; + background: #beaed4; + stroke: #beaed4; +} +.Accent.q2-6 { + fill: #fdc086; + background: #fdc086; + stroke: #fdc086; +} +.Accent.q3-6 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Accent.q4-6 { + fill: #386cb0; + background: #386cb0; + stroke: #386cb0; +} +.Accent.q5-6 { + fill: #f0027f; + background: #f0027f; + stroke: #f0027f; +} +.Accent.q0-7 { + fill: #7fc97f; + background: #7fc97f; + stroke: #7fc97f; +} +.Accent.q1-7 { + fill: #beaed4; + background: #beaed4; + stroke: #beaed4; +} +.Accent.q2-7 { + fill: #fdc086; + background: #fdc086; + stroke: #fdc086; +} +.Accent.q3-7 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Accent.q4-7 { + fill: #386cb0; + background: #386cb0; + stroke: #386cb0; +} +.Accent.q5-7 { + fill: #f0027f; + background: #f0027f; + stroke: #f0027f; +} +.Accent.q6-7 { + fill: #bf5b17; + background: #bf5b17; + stroke: #bf5b17; +} +.Accent.q0-8 { + fill: #7fc97f; + background: #7fc97f; + stroke: #7fc97f; +} +.Accent.q1-8 { + fill: #beaed4; + background: #beaed4; + stroke: #beaed4; +} +.Accent.q2-8 { + fill: #fdc086; + background: #fdc086; + stroke: #fdc086; +} +.Accent.q3-8 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Accent.q4-8 { + fill: #386cb0; + background: #386cb0; + stroke: #386cb0; +} +.Accent.q5-8 { + fill: #f0027f; + background: #f0027f; + stroke: #f0027f; +} +.Accent.q6-8 { + fill: #bf5b17; + background: #bf5b17; + stroke: #bf5b17; +} +.Accent.q7-8 { + fill: #666666; + background: #666666; + stroke: #666666; +} +.Dark2.q0-3 { + fill: #1b9e77; + background: #1b9e77; + stroke: #1b9e77; +} +.Dark2.q1-3 { + fill: #d95f02; + background: #d95f02; + stroke: #d95f02; +} +.Dark2.q2-3 { + fill: #7570b3; + background: #7570b3; + stroke: #7570b3; +} +.Dark2.q0-4 { + fill: #1b9e77; + background: #1b9e77; + stroke: #1b9e77; +} +.Dark2.q1-4 { + fill: #d95f02; + background: #d95f02; + stroke: #d95f02; +} +.Dark2.q2-4 { + fill: #7570b3; + background: #7570b3; + stroke: #7570b3; +} +.Dark2.q3-4 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.Dark2.q0-5 { + fill: #1b9e77; + background: #1b9e77; + stroke: #1b9e77; +} +.Dark2.q1-5 { + fill: #d95f02; + background: #d95f02; + stroke: #d95f02; +} +.Dark2.q2-5 { + fill: #7570b3; + background: #7570b3; + stroke: #7570b3; +} +.Dark2.q3-5 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.Dark2.q4-5 { + fill: #66a61e; + background: #66a61e; + stroke: #66a61e; +} +.Dark2.q0-6 { + fill: #1b9e77; + background: #1b9e77; + stroke: #1b9e77; +} +.Dark2.q1-6 { + fill: #d95f02; + background: #d95f02; + stroke: #d95f02; +} +.Dark2.q2-6 { + fill: #7570b3; + background: #7570b3; + stroke: #7570b3; +} +.Dark2.q3-6 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.Dark2.q4-6 { + fill: #66a61e; + background: #66a61e; + stroke: #66a61e; +} +.Dark2.q5-6 { + fill: #e6ab02; + background: #e6ab02; + stroke: #e6ab02; +} +.Dark2.q0-7 { + fill: #1b9e77; + background: #1b9e77; + stroke: #1b9e77; +} +.Dark2.q1-7 { + fill: #d95f02; + background: #d95f02; + stroke: #d95f02; +} +.Dark2.q2-7 { + fill: #7570b3; + background: #7570b3; + stroke: #7570b3; +} +.Dark2.q3-7 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.Dark2.q4-7 { + fill: #66a61e; + background: #66a61e; + stroke: #66a61e; +} +.Dark2.q5-7 { + fill: #e6ab02; + background: #e6ab02; + stroke: #e6ab02; +} +.Dark2.q6-7 { + fill: #a6761d; + background: #a6761d; + stroke: #a6761d; +} +.Dark2.q0-8 { + fill: #1b9e77; + background: #1b9e77; + stroke: #1b9e77; +} +.Dark2.q1-8 { + fill: #d95f02; + background: #d95f02; + stroke: #d95f02; +} +.Dark2.q2-8 { + fill: #7570b3; + background: #7570b3; + stroke: #7570b3; +} +.Dark2.q3-8 { + fill: #e7298a; + background: #e7298a; + stroke: #e7298a; +} +.Dark2.q4-8 { + fill: #66a61e; + background: #66a61e; + stroke: #66a61e; +} +.Dark2.q5-8 { + fill: #e6ab02; + background: #e6ab02; + stroke: #e6ab02; +} +.Dark2.q6-8 { + fill: #a6761d; + background: #a6761d; + stroke: #a6761d; +} +.Dark2.q7-8 { + fill: #666666; + background: #666666; + stroke: #666666; +} +.Paired.q0-3 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-3 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-3 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q0-4 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-4 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-4 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-4 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q0-5 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-5 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-5 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-5 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-5 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q0-6 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-6 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-6 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-6 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-6 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-6 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q0-7 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-7 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-7 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-7 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-7 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-7 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q6-7 { + fill: #fdbf6f; + background: #fdbf6f; + stroke: #fdbf6f; +} +.Paired.q0-8 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-8 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-8 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-8 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-8 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-8 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q6-8 { + fill: #fdbf6f; + background: #fdbf6f; + stroke: #fdbf6f; +} +.Paired.q7-8 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Paired.q0-9 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-9 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-9 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-9 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-9 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-9 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q6-9 { + fill: #fdbf6f; + background: #fdbf6f; + stroke: #fdbf6f; +} +.Paired.q7-9 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Paired.q8-9 { + fill: #cab2d6; + background: #cab2d6; + stroke: #cab2d6; +} +.Paired.q0-10 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-10 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-10 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-10 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-10 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-10 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q6-10 { + fill: #fdbf6f; + background: #fdbf6f; + stroke: #fdbf6f; +} +.Paired.q7-10 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Paired.q8-10 { + fill: #cab2d6; + background: #cab2d6; + stroke: #cab2d6; +} +.Paired.q9-10 { + fill: #6a3d9a; + background: #6a3d9a; + stroke: #6a3d9a; +} +.Paired.q0-11 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-11 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-11 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-11 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-11 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-11 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q6-11 { + fill: #fdbf6f; + background: #fdbf6f; + stroke: #fdbf6f; +} +.Paired.q7-11 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Paired.q8-11 { + fill: #cab2d6; + background: #cab2d6; + stroke: #cab2d6; +} +.Paired.q9-11 { + fill: #6a3d9a; + background: #6a3d9a; + stroke: #6a3d9a; +} +.Paired.q10-11 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Paired.q0-12 { + fill: #a6cee3; + background: #a6cee3; + stroke: #a6cee3; +} +.Paired.q1-12 { + fill: #1f78b4; + background: #1f78b4; + stroke: #1f78b4; +} +.Paired.q2-12 { + fill: #b2df8a; + background: #b2df8a; + stroke: #b2df8a; +} +.Paired.q3-12 { + fill: #33a02c; + background: #33a02c; + stroke: #33a02c; +} +.Paired.q4-12 { + fill: #fb9a99; + background: #fb9a99; + stroke: #fb9a99; +} +.Paired.q5-12 { + fill: #e31a1c; + background: #e31a1c; + stroke: #e31a1c; +} +.Paired.q6-12 { + fill: #fdbf6f; + background: #fdbf6f; + stroke: #fdbf6f; +} +.Paired.q7-12 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Paired.q8-12 { + fill: #cab2d6; + background: #cab2d6; + stroke: #cab2d6; +} +.Paired.q9-12 { + fill: #6a3d9a; + background: #6a3d9a; + stroke: #6a3d9a; +} +.Paired.q10-12 { + fill: #ffff99; + background: #ffff99; + stroke: #ffff99; +} +.Paired.q11-12 { + fill: #b15928; + background: #b15928; + stroke: #b15928; +} +.Pastel1.q0-3 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-3 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-3 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q0-4 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-4 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-4 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q3-4 { + fill: #decbe4; + background: #decbe4; + stroke: #decbe4; +} +.Pastel1.q0-5 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-5 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-5 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q3-5 { + fill: #decbe4; + background: #decbe4; + stroke: #decbe4; +} +.Pastel1.q4-5 { + fill: #fed9a6; + background: #fed9a6; + stroke: #fed9a6; +} +.Pastel1.q0-6 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-6 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-6 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q3-6 { + fill: #decbe4; + background: #decbe4; + stroke: #decbe4; +} +.Pastel1.q4-6 { + fill: #fed9a6; + background: #fed9a6; + stroke: #fed9a6; +} +.Pastel1.q5-6 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.Pastel1.q0-7 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-7 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-7 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q3-7 { + fill: #decbe4; + background: #decbe4; + stroke: #decbe4; +} +.Pastel1.q4-7 { + fill: #fed9a6; + background: #fed9a6; + stroke: #fed9a6; +} +.Pastel1.q5-7 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.Pastel1.q6-7 { + fill: #e5d8bd; + background: #e5d8bd; + stroke: #e5d8bd; +} +.Pastel1.q0-8 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-8 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-8 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q3-8 { + fill: #decbe4; + background: #decbe4; + stroke: #decbe4; +} +.Pastel1.q4-8 { + fill: #fed9a6; + background: #fed9a6; + stroke: #fed9a6; +} +.Pastel1.q5-8 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.Pastel1.q6-8 { + fill: #e5d8bd; + background: #e5d8bd; + stroke: #e5d8bd; +} +.Pastel1.q7-8 { + fill: #fddaec; + background: #fddaec; + stroke: #fddaec; +} +.Pastel1.q0-9 { + fill: #fbb4ae; + background: #fbb4ae; + stroke: #fbb4ae; +} +.Pastel1.q1-9 { + fill: #b3cde3; + background: #b3cde3; + stroke: #b3cde3; +} +.Pastel1.q2-9 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Pastel1.q3-9 { + fill: #decbe4; + background: #decbe4; + stroke: #decbe4; +} +.Pastel1.q4-9 { + fill: #fed9a6; + background: #fed9a6; + stroke: #fed9a6; +} +.Pastel1.q5-9 { + fill: #ffffcc; + background: #ffffcc; + stroke: #ffffcc; +} +.Pastel1.q6-9 { + fill: #e5d8bd; + background: #e5d8bd; + stroke: #e5d8bd; +} +.Pastel1.q7-9 { + fill: #fddaec; + background: #fddaec; + stroke: #fddaec; +} +.Pastel1.q8-9 { + fill: #f2f2f2; + background: #f2f2f2; + stroke: #f2f2f2; +} +.Pastel2.q0-3 { + fill: #b3e2cd; + background: #b3e2cd; + stroke: #b3e2cd; +} +.Pastel2.q1-3 { + fill: #fdcdac; + background: #fdcdac; + stroke: #fdcdac; +} +.Pastel2.q2-3 { + fill: #cbd5e8; + background: #cbd5e8; + stroke: #cbd5e8; +} +.Pastel2.q0-4 { + fill: #b3e2cd; + background: #b3e2cd; + stroke: #b3e2cd; +} +.Pastel2.q1-4 { + fill: #fdcdac; + background: #fdcdac; + stroke: #fdcdac; +} +.Pastel2.q2-4 { + fill: #cbd5e8; + background: #cbd5e8; + stroke: #cbd5e8; +} +.Pastel2.q3-4 { + fill: #f4cae4; + background: #f4cae4; + stroke: #f4cae4; +} +.Pastel2.q0-5 { + fill: #b3e2cd; + background: #b3e2cd; + stroke: #b3e2cd; +} +.Pastel2.q1-5 { + fill: #fdcdac; + background: #fdcdac; + stroke: #fdcdac; +} +.Pastel2.q2-5 { + fill: #cbd5e8; + background: #cbd5e8; + stroke: #cbd5e8; +} +.Pastel2.q3-5 { + fill: #f4cae4; + background: #f4cae4; + stroke: #f4cae4; +} +.Pastel2.q4-5 { + fill: #e6f5c9; + background: #e6f5c9; + stroke: #e6f5c9; +} +.Pastel2.q0-6 { + fill: #b3e2cd; + background: #b3e2cd; + stroke: #b3e2cd; +} +.Pastel2.q1-6 { + fill: #fdcdac; + background: #fdcdac; + stroke: #fdcdac; +} +.Pastel2.q2-6 { + fill: #cbd5e8; + background: #cbd5e8; + stroke: #cbd5e8; +} +.Pastel2.q3-6 { + fill: #f4cae4; + background: #f4cae4; + stroke: #f4cae4; +} +.Pastel2.q4-6 { + fill: #e6f5c9; + background: #e6f5c9; + stroke: #e6f5c9; +} +.Pastel2.q5-6 { + fill: #fff2ae; + background: #fff2ae; + stroke: #fff2ae; +} +.Pastel2.q0-7 { + fill: #b3e2cd; + background: #b3e2cd; + stroke: #b3e2cd; +} +.Pastel2.q1-7 { + fill: #fdcdac; + background: #fdcdac; + stroke: #fdcdac; +} +.Pastel2.q2-7 { + fill: #cbd5e8; + background: #cbd5e8; + stroke: #cbd5e8; +} +.Pastel2.q3-7 { + fill: #f4cae4; + background: #f4cae4; + stroke: #f4cae4; +} +.Pastel2.q4-7 { + fill: #e6f5c9; + background: #e6f5c9; + stroke: #e6f5c9; +} +.Pastel2.q5-7 { + fill: #fff2ae; + background: #fff2ae; + stroke: #fff2ae; +} +.Pastel2.q6-7 { + fill: #f1e2cc; + background: #f1e2cc; + stroke: #f1e2cc; +} +.Pastel2.q0-8 { + fill: #b3e2cd; + background: #b3e2cd; + stroke: #b3e2cd; +} +.Pastel2.q1-8 { + fill: #fdcdac; + background: #fdcdac; + stroke: #fdcdac; +} +.Pastel2.q2-8 { + fill: #cbd5e8; + background: #cbd5e8; + stroke: #cbd5e8; +} +.Pastel2.q3-8 { + fill: #f4cae4; + background: #f4cae4; + stroke: #f4cae4; +} +.Pastel2.q4-8 { + fill: #e6f5c9; + background: #e6f5c9; + stroke: #e6f5c9; +} +.Pastel2.q5-8 { + fill: #fff2ae; + background: #fff2ae; + stroke: #fff2ae; +} +.Pastel2.q6-8 { + fill: #f1e2cc; + background: #f1e2cc; + stroke: #f1e2cc; +} +.Pastel2.q7-8 { + fill: #cccccc; + background: #cccccc; + stroke: #cccccc; +} +.Set1.q0-3 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-3 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-3 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q0-4 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-4 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-4 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q3-4 { + fill: #984ea3; + background: #984ea3; + stroke: #984ea3; +} +.Set1.q0-5 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-5 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-5 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q3-5 { + fill: #984ea3; + background: #984ea3; + stroke: #984ea3; +} +.Set1.q4-5 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Set1.q0-6 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-6 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-6 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q3-6 { + fill: #984ea3; + background: #984ea3; + stroke: #984ea3; +} +.Set1.q4-6 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Set1.q5-6 { + fill: #ffff33; + background: #ffff33; + stroke: #ffff33; +} +.Set1.q0-7 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-7 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-7 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q3-7 { + fill: #984ea3; + background: #984ea3; + stroke: #984ea3; +} +.Set1.q4-7 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Set1.q5-7 { + fill: #ffff33; + background: #ffff33; + stroke: #ffff33; +} +.Set1.q6-7 { + fill: #a65628; + background: #a65628; + stroke: #a65628; +} +.Set1.q0-8 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-8 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-8 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q3-8 { + fill: #984ea3; + background: #984ea3; + stroke: #984ea3; +} +.Set1.q4-8 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Set1.q5-8 { + fill: #ffff33; + background: #ffff33; + stroke: #ffff33; +} +.Set1.q6-8 { + fill: #a65628; + background: #a65628; + stroke: #a65628; +} +.Set1.q7-8 { + fill: #f781bf; + background: #f781bf; + stroke: #f781bf; +} +.Set1.q0-9 { + fill: #e41a1c; + background: #e41a1c; + stroke: #e41a1c; +} +.Set1.q1-9 { + fill: #377eb8; + background: #377eb8; + stroke: #377eb8; +} +.Set1.q2-9 { + fill: #4daf4a; + background: #4daf4a; + stroke: #4daf4a; +} +.Set1.q3-9 { + fill: #984ea3; + background: #984ea3; + stroke: #984ea3; +} +.Set1.q4-9 { + fill: #ff7f00; + background: #ff7f00; + stroke: #ff7f00; +} +.Set1.q5-9 { + fill: #ffff33; + background: #ffff33; + stroke: #ffff33; +} +.Set1.q6-9 { + fill: #a65628; + background: #a65628; + stroke: #a65628; +} +.Set1.q7-9 { + fill: #f781bf; + background: #f781bf; + stroke: #f781bf; +} +.Set1.q8-9 { + fill: #999999; + background: #999999; + stroke: #999999; +} +.Set2.q0-3 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Set2.q1-3 { + fill: #fc8d62; + background: #fc8d62; + stroke: #fc8d62; +} +.Set2.q2-3 { + fill: #8da0cb; + background: #8da0cb; + stroke: #8da0cb; +} +.Set2.q0-4 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Set2.q1-4 { + fill: #fc8d62; + background: #fc8d62; + stroke: #fc8d62; +} +.Set2.q2-4 { + fill: #8da0cb; + background: #8da0cb; + stroke: #8da0cb; +} +.Set2.q3-4 { + fill: #e78ac3; + background: #e78ac3; + stroke: #e78ac3; +} +.Set2.q0-5 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Set2.q1-5 { + fill: #fc8d62; + background: #fc8d62; + stroke: #fc8d62; +} +.Set2.q2-5 { + fill: #8da0cb; + background: #8da0cb; + stroke: #8da0cb; +} +.Set2.q3-5 { + fill: #e78ac3; + background: #e78ac3; + stroke: #e78ac3; +} +.Set2.q4-5 { + fill: #a6d854; + background: #a6d854; + stroke: #a6d854; +} +.Set2.q0-6 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Set2.q1-6 { + fill: #fc8d62; + background: #fc8d62; + stroke: #fc8d62; +} +.Set2.q2-6 { + fill: #8da0cb; + background: #8da0cb; + stroke: #8da0cb; +} +.Set2.q3-6 { + fill: #e78ac3; + background: #e78ac3; + stroke: #e78ac3; +} +.Set2.q4-6 { + fill: #a6d854; + background: #a6d854; + stroke: #a6d854; +} +.Set2.q5-6 { + fill: #ffd92f; + background: #ffd92f; + stroke: #ffd92f; +} +.Set2.q0-7 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Set2.q1-7 { + fill: #fc8d62; + background: #fc8d62; + stroke: #fc8d62; +} +.Set2.q2-7 { + fill: #8da0cb; + background: #8da0cb; + stroke: #8da0cb; +} +.Set2.q3-7 { + fill: #e78ac3; + background: #e78ac3; + stroke: #e78ac3; +} +.Set2.q4-7 { + fill: #a6d854; + background: #a6d854; + stroke: #a6d854; +} +.Set2.q5-7 { + fill: #ffd92f; + background: #ffd92f; + stroke: #ffd92f; +} +.Set2.q6-7 { + fill: #e5c494; + background: #e5c494; + stroke: #e5c494; +} +.Set2.q0-8 { + fill: #66c2a5; + background: #66c2a5; + stroke: #66c2a5; +} +.Set2.q1-8 { + fill: #fc8d62; + background: #fc8d62; + stroke: #fc8d62; +} +.Set2.q2-8 { + fill: #8da0cb; + background: #8da0cb; + stroke: #8da0cb; +} +.Set2.q3-8 { + fill: #e78ac3; + background: #e78ac3; + stroke: #e78ac3; +} +.Set2.q4-8 { + fill: #a6d854; + background: #a6d854; + stroke: #a6d854; +} +.Set2.q5-8 { + fill: #ffd92f; + background: #ffd92f; + stroke: #ffd92f; +} +.Set2.q6-8 { + fill: #e5c494; + background: #e5c494; + stroke: #e5c494; +} +.Set2.q7-8 { + fill: #b3b3b3; + background: #b3b3b3; + stroke: #b3b3b3; +} +.Set3.q0-3 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-3 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-3 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q0-4 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-4 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-4 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-4 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q0-5 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-5 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-5 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-5 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-5 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q0-6 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-6 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-6 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-6 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-6 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-6 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q0-7 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-7 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-7 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-7 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-7 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-7 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q6-7 { + fill: #b3de69; + background: #b3de69; + stroke: #b3de69; +} +.Set3.q0-8 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-8 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-8 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-8 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-8 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-8 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q6-8 { + fill: #b3de69; + background: #b3de69; + stroke: #b3de69; +} +.Set3.q7-8 { + fill: #fccde5; + background: #fccde5; + stroke: #fccde5; +} +.Set3.q0-9 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-9 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-9 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-9 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-9 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-9 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q6-9 { + fill: #b3de69; + background: #b3de69; + stroke: #b3de69; +} +.Set3.q7-9 { + fill: #fccde5; + background: #fccde5; + stroke: #fccde5; +} +.Set3.q8-9 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Set3.q0-10 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-10 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-10 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-10 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-10 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-10 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q6-10 { + fill: #b3de69; + background: #b3de69; + stroke: #b3de69; +} +.Set3.q7-10 { + fill: #fccde5; + background: #fccde5; + stroke: #fccde5; +} +.Set3.q8-10 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Set3.q9-10 { + fill: #bc80bd; + background: #bc80bd; + stroke: #bc80bd; +} +.Set3.q0-11 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-11 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-11 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-11 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-11 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-11 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q6-11 { + fill: #b3de69; + background: #b3de69; + stroke: #b3de69; +} +.Set3.q7-11 { + fill: #fccde5; + background: #fccde5; + stroke: #fccde5; +} +.Set3.q8-11 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Set3.q9-11 { + fill: #bc80bd; + background: #bc80bd; + stroke: #bc80bd; +} +.Set3.q10-11 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Set3.q0-12 { + fill: #8dd3c7; + background: #8dd3c7; + stroke: #8dd3c7; +} +.Set3.q1-12 { + fill: #ffffb3; + background: #ffffb3; + stroke: #ffffb3; +} +.Set3.q2-12 { + fill: #bebada; + background: #bebada; + stroke: #bebada; +} +.Set3.q3-12 { + fill: #fb8072; + background: #fb8072; + stroke: #fb8072; +} +.Set3.q4-12 { + fill: #80b1d3; + background: #80b1d3; + stroke: #80b1d3; +} +.Set3.q5-12 { + fill: #fdb462; + background: #fdb462; + stroke: #fdb462; +} +.Set3.q6-12 { + fill: #b3de69; + background: #b3de69; + stroke: #b3de69; +} +.Set3.q7-12 { + fill: #fccde5; + background: #fccde5; + stroke: #fccde5; +} +.Set3.q8-12 { + fill: #d9d9d9; + background: #d9d9d9; + stroke: #d9d9d9; +} +.Set3.q9-12 { + fill: #bc80bd; + background: #bc80bd; + stroke: #bc80bd; +} +.Set3.q10-12 { + fill: #ccebc5; + background: #ccebc5; + stroke: #ccebc5; +} +.Set3.q11-12 { + fill: #ffed6f; + background: #ffed6f; + stroke: #ffed6f; +} + diff --git a/client/src/common/getTauChartConfig.js b/client/src/common/getTauChartConfig.js index 8dfaba664..7ac43fca8 100644 --- a/client/src/common/getTauChartConfig.js +++ b/client/src/common/getTauChartConfig.js @@ -1,9 +1,9 @@ import chartDefinitions from '../utilities/chartDefinitions.js'; -import exportTo from 'taucharts/build/development/plugins/tauCharts.export'; -import legend from 'taucharts/build/development/plugins/tauCharts.legend'; -import quickFilter from 'taucharts/build/development/plugins/tauCharts.quick-filter'; -import tooltip from 'taucharts/build/development/plugins/tauCharts.tooltip'; -import tcTrendline from 'taucharts/build/development/plugins/tauCharts.trendline'; +import exportTo from 'taucharts/dist/plugins/export-to'; +import legend from 'taucharts/dist/plugins/legend'; +import quickFilter from 'taucharts/dist/plugins/quick-filter'; +import tooltip from 'taucharts/dist/plugins/tooltip'; +import tcTrendline from 'taucharts/dist/plugins/trendline'; const getUnmetFields = (chartType, selectedFieldMap) => { const chartDefinition = chartDefinitions.find( diff --git a/client/src/css/vendorOverrides.css b/client/src/css/vendorOverrides.css index 047ebb1b8..29ad20d7b 100644 --- a/client/src/css/vendorOverrides.css +++ b/client/src/css/vendorOverrides.css @@ -1,5 +1,5 @@ /* hide tauchart's ui for export options */ -.graphical-report__layout__header { +.tau-chart__export { display: none; } From e26347a6d9c3a8e64b3385ed53a0a9521bf41ec4 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 3 Apr 2019 23:36:33 -0400 Subject: [PATCH 027/855] Install full lodash dependency It is handy to have --- client/package.json | 4 +--- client/src/queries/QueriesView.js | 2 +- client/src/stores/ConnectionsStore.js | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/client/package.json b/client/package.json index bdd986c92..aa0ec36c6 100644 --- a/client/package.json +++ b/client/package.json @@ -8,9 +8,7 @@ "brace": "^0.11.1", "d3": "^5.9.2", "keymaster": "^1.6.2", - "lodash.debounce": "^4.0.8", - "lodash.sortby": "^4.7.0", - "lodash.uniq": "^4.5.0", + "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^16.8.6", "react-ace": "^6.4.0", diff --git a/client/src/queries/QueriesView.js b/client/src/queries/QueriesView.js index 732a89205..ef71710f5 100644 --- a/client/src/queries/QueriesView.js +++ b/client/src/queries/QueriesView.js @@ -10,7 +10,7 @@ import Popover from 'antd/lib/popover'; import Select from 'antd/lib/select'; import Table from 'antd/lib/table'; import Tag from 'antd/lib/tag'; -import uniq from 'lodash.uniq'; +import uniq from 'lodash/uniq'; import moment from 'moment'; import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; diff --git a/client/src/stores/ConnectionsStore.js b/client/src/stores/ConnectionsStore.js index e20e70423..24b897d69 100644 --- a/client/src/stores/ConnectionsStore.js +++ b/client/src/stores/ConnectionsStore.js @@ -1,5 +1,5 @@ import message from 'antd/lib/message'; -import sortBy from 'lodash.sortby'; +import sortBy from 'lodash/sortBy'; import React, { useState } from 'react'; import fetchJson from '../utilities/fetch-json.js'; From f84346ace8a1fb67c7b79ba6b96137ca0e77f867 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 7 Apr 2019 02:04:08 -0400 Subject: [PATCH 028/855] Use Unistore for state mangement (#424) * Install unistore * Initial unistore use for QueryEditor * Fixes * remove setState * load connections and tags at same time * cleanup keypresses * Remove unused * Connect QueryEditorDataTable * QueryEditorSqlEditor * Remove prompt * Unistore the EditorNavBar * unistore the modal * Unistore the VisSidebar * Found the perf hit! * cleanup props * unistore ResultHeader * Sqlpad Tauchart props change * init queryError state * Unistore query editor chart * Consolidate props destructure * QueryEditor cleanup * Unistore connections * Unistore App context * Remove console.log * remove admin prop --- client/package-lock.json | 5 + client/package.json | 1 + client/src/AppNav.js | 14 +- client/src/Authenticated.js | 21 +- client/src/NotFound.js | 15 +- client/src/QueryChartOnly.js | 3 +- client/src/Routes.js | 21 +- client/src/SignIn.js | 17 +- client/src/SignUp.js | 16 +- client/src/common/ExportButton.js | 15 +- client/src/common/QueryResultDataTable.js | 7 + client/src/common/SqlEditor.js | 14 +- client/src/common/SqlpadTauChart.js | 14 +- .../src/configuration/ConfigurationDrawer.js | 15 +- .../src/connections/ConnectionListDrawer.js | 32 +- client/src/index.js | 12 +- client/src/queryEditor/ConnectionDropdown.js | 28 +- client/src/queryEditor/EditorNavBar.js | 77 ++- client/src/queryEditor/QueryDetailsModal.js | 61 ++- client/src/queryEditor/QueryEditor.js | 488 ++++-------------- client/src/queryEditor/QueryEditorChart.js | 26 + .../src/queryEditor/QueryEditorContainer.js | 25 - client/src/queryEditor/QueryEditorResult.js | 10 + .../src/queryEditor/QueryEditorSqlEditor.js | 33 ++ client/src/queryEditor/QueryResultHeader.js | 7 +- client/src/queryEditor/SchemaSidebar.js | 18 +- client/src/queryEditor/VisSidebar.js | 47 +- client/src/stores/AppContextStore.js | 44 -- client/src/stores/ConnectionsStore.js | 98 ---- client/src/stores/unistoreStore.js | 294 +++++++++++ client/src/users/UserDrawer.js | 14 +- 31 files changed, 761 insertions(+), 731 deletions(-) create mode 100644 client/src/queryEditor/QueryEditorChart.js delete mode 100644 client/src/queryEditor/QueryEditorContainer.js create mode 100644 client/src/queryEditor/QueryEditorResult.js create mode 100644 client/src/queryEditor/QueryEditorSqlEditor.js delete mode 100644 client/src/stores/AppContextStore.js delete mode 100644 client/src/stores/ConnectionsStore.js create mode 100644 client/src/stores/unistoreStore.js diff --git a/client/package-lock.json b/client/package-lock.json index 90f29afe1..3fb9c407b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -16671,6 +16671,11 @@ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" }, + "unistore": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/unistore/-/unistore-3.4.1.tgz", + "integrity": "sha512-p2Ej8qqrqcD10Ah0ZUKUU/mhRB8pM4q6gzjxq9kZpgxa8dks7oHT8jDP4CqLhoRof3RXOZLKB9EBV1DTzHiJRw==" + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/client/package.json b/client/package.json index aa0ec36c6..3f742518c 100644 --- a/client/package.json +++ b/client/package.json @@ -23,6 +23,7 @@ "sql-formatter": "^2.3.2", "tachyons": "^4.11.1", "taucharts": "^2.7.1", + "unistore": "^3.4.1", "whatwg-fetch": "^3.0.0" }, "scripts": { diff --git a/client/src/AppNav.js b/client/src/AppNav.js index 720494cc2..08ddcaef9 100644 --- a/client/src/AppNav.js +++ b/client/src/AppNav.js @@ -3,10 +3,11 @@ import Icon from 'antd/lib/icon'; import Layout from 'antd/lib/layout'; import Menu from 'antd/lib/menu'; import Modal from 'antd/lib/modal'; -import React, { useContext, useState, useCallback } from 'react'; +import React, { useState, useCallback } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from './stores/unistoreStore'; import { Redirect, Route } from 'react-router-dom'; import AboutContent from './AboutContent'; -import { AppContext } from './stores/AppContextStore'; import fetchJson from './utilities/fetch-json.js'; import ConnectionListDrawer from './connections/ConnectionListDrawer'; import ConfigurationDrawer from './configuration/ConfigurationDrawer'; @@ -14,14 +15,12 @@ import UsersDrawer from './users/UserDrawer'; const { Content, Sider } = Layout; -function AppNav({ children, pageMenuItems }) { +function AppNav({ children, pageMenuItems, currentUser, version }) { const [collapsed, setCollapsed] = useState(true); const [redirect, setRedirect] = useState(false); const [showConnections, setShowConnections] = useState(false); const [showConfig, setShowConfig] = useState(false); const [showUsers, setShowUsers] = useState(false); - const appContext = useContext(AppContext); - const { currentUser, version } = appContext; const handleConfigClose = useCallback(() => setShowConfig(false), []); const handleUsersClose = useCallback(() => setShowUsers(false), []); @@ -165,4 +164,7 @@ AppNav.propTypes = { pageMenuItems: PropTypes.arrayOf(PropTypes.node) }; -export default AppNav; +export default connect( + ['currentUser', 'version'], + actions +)(AppNav); diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index 767e74288..c89396c55 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -1,24 +1,18 @@ import PropTypes from 'prop-types'; -import React, { useContext, useEffect } from 'react'; +import React, { useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from './stores/unistoreStore'; import { Redirect } from 'react-router-dom'; -import { AppContext } from './stores/AppContextStore'; - -function Authenticated({ admin, children }) { - const appContext = useContext(AppContext); - const { currentUser } = appContext; +function Authenticated({ children, currentUser, refreshAppContext }) { useEffect(() => { - appContext.refreshAppContext(); + refreshAppContext(); }, []); if (!currentUser) { return ; } - if (admin && currentUser.role !== 'admin') { - return ; - } - return children; } @@ -26,4 +20,7 @@ Authenticated.propTypes = { admin: PropTypes.bool }; -export default Authenticated; +export default connect( + ['currentUser'], + actions +)(Authenticated); diff --git a/client/src/NotFound.js b/client/src/NotFound.js index 94bd3629d..44a972057 100644 --- a/client/src/NotFound.js +++ b/client/src/NotFound.js @@ -1,12 +1,10 @@ -import React, { useContext, useEffect } from 'react'; +import React, { useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from './stores/unistoreStore'; import AppNav from './AppNav.js'; import FullscreenMessage from './common/FullscreenMessage.js'; -import { AppContext } from './stores/AppContextStore'; - -export default function NotFound() { - const appContext = useContext(AppContext); - const { currentUser } = appContext; +function NotFound({ currentUser }) { useEffect(() => { document.title = 'SQLPad - Not Found'; }, []); @@ -20,3 +18,8 @@ export default function NotFound() { } return Not Found; } + +export default connect( + ['currentUser'], + actions +)(NotFound); diff --git a/client/src/QueryChartOnly.js b/client/src/QueryChartOnly.js index d1b121133..274c85314 100644 --- a/client/src/QueryChartOnly.js +++ b/client/src/QueryChartOnly.js @@ -61,7 +61,8 @@ function QueryChartOnly({ queryId }) {
    { + refreshAppContext(); + }, []); if (!config) { return null; @@ -45,7 +47,7 @@ function Routes() { path="/queries/:queryId" render={({ match }) => ( - + )} /> @@ -89,4 +91,7 @@ function Routes() { ); } -export default Routes; +export default connect( + ['config'], + actions +)(Routes); diff --git a/client/src/SignIn.js b/client/src/SignIn.js index 6350e62a3..40506408b 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -2,15 +2,13 @@ import Button from 'antd/lib/button'; import Icon from 'antd/lib/icon'; import Input from 'antd/lib/input'; import message from 'antd/lib/message'; -import React, { useState, useContext, useEffect } from 'react'; +import React, { useState, useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from './stores/unistoreStore'; import { Link, Redirect } from 'react-router-dom'; -import { AppContext } from './stores/AppContextStore'; import fetchJson from './utilities/fetch-json.js'; -function SignIn(props) { - const appContext = useContext(AppContext); - const { config, smtpConfigured, passport } = appContext; - +function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [redirect, setRedirect] = useState(false); @@ -26,7 +24,7 @@ function SignIn(props) { if (json.error) { return message.error('Username or password incorrect'); } - await appContext.refreshAppContext(); + await refreshAppContext(); setRedirect(true); }; @@ -97,4 +95,7 @@ function SignIn(props) { ); } -export default SignIn; +export default connect( + ['config', 'smtpConfigured', 'passport'], + actions +)(SignIn); diff --git a/client/src/SignUp.js b/client/src/SignUp.js index 5b13e559f..0ef3ca737 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -1,21 +1,18 @@ import Button from 'antd/lib/button'; import Input from 'antd/lib/input'; import message from 'antd/lib/message'; -import React, { useContext, useState, useEffect } from 'react'; +import React, { useState, useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from './stores/unistoreStore'; import { Redirect } from 'react-router-dom'; -import { AppContext } from './stores/AppContextStore'; import fetchJson from './utilities/fetch-json.js'; -function SignUp() { +function SignUp({ adminRegistrationOpen }) { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [passwordConfirmation, setPasswordConfirmation] = useState(''); const [redirect, setRedirect] = useState(false); - const appContext = useContext(AppContext); - - const { adminRegistrationOpen } = appContext; - useEffect(() => { document.title = 'SQLPad - Sign Up'; }, []); @@ -84,4 +81,7 @@ function SignUp() { ); } -export default SignUp; +export default connect( + ['adminRegistrationOpen'], + actions +)(SignUp); diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index 65f00446f..a55782c54 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -3,13 +3,11 @@ import Dropdown from 'antd/lib/dropdown'; import Icon from 'antd/lib/icon'; import Menu from 'antd/lib/menu'; import PropTypes from 'prop-types'; -import React, { useContext } from 'react'; -import { AppContext } from '../stores/AppContextStore'; - -function ExportButton({ cacheKey, onSaveImageClick }) { - const appContext = useContext(AppContext); - const { config } = appContext; +import React from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../stores/unistoreStore'; +function ExportButton({ config, cacheKey, onSaveImageClick }) { if (!config) { return null; } @@ -59,4 +57,7 @@ ExportButton.propTypes = { onSaveImageClick: PropTypes.func }; -export default ExportButton; +export default connect( + ['config'], + actions +)(ExportButton); diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index 764f950ef..ea202469e 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -1,4 +1,5 @@ import React from 'react'; +import PropTypes from 'prop-types'; import { MultiGrid } from 'react-virtualized'; import Draggable from 'react-draggable'; import Measure from 'react-measure'; @@ -288,4 +289,10 @@ class QueryResultDataTable extends React.PureComponent { } } +QueryResultDataTable.propTypes = { + isRunning: PropTypes.bool, + queryError: PropTypes.string, + queryResult: PropTypes.object +}; + export default QueryResultDataTable; diff --git a/client/src/common/SqlEditor.js b/client/src/common/SqlEditor.js index a01b80217..25cb76e78 100644 --- a/client/src/common/SqlEditor.js +++ b/client/src/common/SqlEditor.js @@ -4,18 +4,17 @@ import 'brace/ext/searchbox'; import 'brace/mode/sql'; import 'brace/theme/sqlserver'; import PropTypes from 'prop-types'; -import React, { useContext, useState, useEffect } from 'react'; +import React, { useState, useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../stores/unistoreStore'; import Measure from 'react-measure'; import AceEditor from 'react-ace'; -import { AppContext } from '../stores/AppContextStore'; const noop = () => {}; -function SqlEditor({ onChange, readOnly, value, onSelectionChange }) { +function SqlEditor({ config, onChange, readOnly, value, onSelectionChange }) { const [dimensions, setDimensions] = useState({ width: -1, height: -1 }); const [editor, setEditor] = useState(null); - const appContext = useContext(AppContext); - const { config } = appContext; useEffect(() => { if (editor && onChange) { @@ -88,4 +87,7 @@ SqlEditor.defaultProps = { value: '' }; -export default SqlEditor; +export default connect( + ['config'], + actions +)(React.memo(SqlEditor)); diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index 3edc58040..24d49f309 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -14,13 +14,11 @@ function SqlpadTauChart({ isRunning, queryError, queryResult, - query, + chartConfiguration, + queryName, forwardedRef, isVisible }) { - const chartConfiguration = query && query.chartConfiguration; - const queryName = query ? query.name : ''; - const chartRef = useRef(null); // TODO rendering on every change like this might get too expensive @@ -101,7 +99,8 @@ function SqlpadTauChart({ SqlpadTauChart.propTypes = { isRunning: PropTypes.bool, - query: PropTypes.object, + chartConfiguration: PropTypes.object, + queryName: PropTypes.string, queryError: PropTypes.string, queryResult: PropTypes.object, forwardedRef: PropTypes.any, @@ -109,5 +108,8 @@ SqlpadTauChart.propTypes = { }; export default forwardRef((props, ref) => { - return ; + if (ref && !props.forwardedRef) { + return ; + } + return ; }); diff --git a/client/src/configuration/ConfigurationDrawer.js b/client/src/configuration/ConfigurationDrawer.js index 22a6211af..0024e5f14 100644 --- a/client/src/configuration/ConfigurationDrawer.js +++ b/client/src/configuration/ConfigurationDrawer.js @@ -2,10 +2,11 @@ import message from 'antd/lib/message'; import Form from 'antd/lib/form'; import Button from 'antd/lib/button'; import Drawer from 'antd/lib/drawer'; -import React, { useState, useEffect, useContext } from 'react'; +import React, { useState, useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../stores/unistoreStore'; import fetchJson from '../utilities/fetch-json.js'; import ConfigItemInput from './ConfigItemInput'; -import { AppContext } from '../stores/AppContextStore'; const formItemLayout = { labelCol: { @@ -25,9 +26,8 @@ const tailFormItemLayout = { } }; -function ConfigurationDrawer({ onClose, visible }) { +function ConfigurationDrawer({ refreshAppContext, onClose, visible }) { const [configItems, setConfigItems] = useState([]); - const appContext = useContext(AppContext); const loadConfigValuesFromServer = async () => { const json = await fetchJson('GET', '/api/config-items'); @@ -57,7 +57,7 @@ function ConfigurationDrawer({ onClose, visible }) { if (errorResponse) { message.error('Save failed'); } else { - await appContext.refreshAppContext(); + await refreshAppContext(); onClose(); } } @@ -107,4 +107,7 @@ function ConfigurationDrawer({ onClose, visible }) { ); } -export default React.memo(ConfigurationDrawer); +export default connect( + [], + actions +)(React.memo(ConfigurationDrawer)); diff --git a/client/src/connections/ConnectionListDrawer.js b/client/src/connections/ConnectionListDrawer.js index 710cb7c5c..4fad24282 100644 --- a/client/src/connections/ConnectionListDrawer.js +++ b/client/src/connections/ConnectionListDrawer.js @@ -3,22 +3,26 @@ import Drawer from 'antd/lib/drawer'; import Icon from 'antd/lib/icon'; import List from 'antd/lib/list'; import Popconfirm from 'antd/lib/popconfirm'; -import React, { useState, useContext, useEffect } from 'react'; +import React, { useState, useEffect } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../stores/unistoreStore'; import ConnectionEditDrawer from './ConnectionEditDrawer'; -import { ConnectionsContext } from '../stores/ConnectionsStore'; -import { AppContext } from '../stores/AppContextStore'; -function ConnectionListDrawer({ visible, onClose }) { +function ConnectionListDrawer({ + currentUser, + visible, + onClose, + loadConnections, + deleteConnection, + connections, + addUpdateConnection, + selectConnectionId +}) { const [connectionId, setConnectionId] = useState(null); const [showEdit, setShowEdit] = useState(false); - const appContext = useContext(AppContext); - const connectionsContext = useContext(ConnectionsContext); - - const { currentUser } = appContext; - const { connections, deleteConnection } = connectionsContext; useEffect(() => { - connectionsContext.loadConnections(); + loadConnections(); }, []); useEffect(() => { @@ -43,7 +47,6 @@ function ConnectionListDrawer({ visible, onClose }) { }; const handleConnectionSaved = connection => { - const { addUpdateConnection, selectConnection } = connectionsContext; addUpdateConnection(connection); setConnectionId(null); setShowEdit(false); @@ -51,7 +54,7 @@ function ConnectionListDrawer({ visible, onClose }) { // this is a new connection // New connections can be selected and then all the drawer closed if (!connectionId) { - selectConnection(connection._id); + selectConnectionId(connection._id); } }; @@ -167,4 +170,7 @@ function ConnectionListDrawer({ visible, onClose }) { ); } -export default ConnectionListDrawer; +export default connect( + ['connections', 'currentUser'], + actions +)(ConnectionListDrawer); diff --git a/client/src/index.js b/client/src/index.js index f3fdb9bb3..6dc37a747 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -7,8 +7,8 @@ import React from 'react'; import ReactDOM from 'react-dom'; import message from 'antd/lib/message'; import Routes from './Routes'; -import AppContextStore from './stores/AppContextStore'; -import ConnectionsStore from './stores/ConnectionsStore'; +import { unistoreStore } from './stores/unistoreStore'; +import { Provider } from 'unistore/react'; // Configure message notification globally message.config({ @@ -18,10 +18,8 @@ message.config({ }); ReactDOM.render( - - - - - , + + + , document.getElementById('root') ); diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index 16a80d0fa..51a9986a6 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -1,25 +1,30 @@ import Select from 'antd/lib/select'; import Icon from 'antd/lib/icon'; -import React, { useContext, useState } from 'react'; -import { ConnectionsContext } from '../stores/ConnectionsStore'; +import React, { useState } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../stores/unistoreStore'; import ConnectionEditDrawer from '../connections/ConnectionEditDrawer'; const { Option } = Select; -function ConnectionDropdown() { - const connectionsContext = useContext(ConnectionsContext); +function ConnectionDropdown({ + connections, + selectConnectionId, + selectedConnectionId, + addUpdateConnection +}) { const [showEdit, setShowEdit] = useState(false); const handleChange = id => { if (id === 'new') { return setShowEdit(true); } - connectionsContext.selectConnection(id); + selectConnectionId(id); }; const handleConnectionSaved = connection => { - connectionsContext.addUpdateConnection(connection); - connectionsContext.selectConnection(connection._id); + addUpdateConnection(connection); + selectConnectionId(connection._id); setShowEdit(false); }; @@ -32,7 +37,7 @@ function ConnectionDropdown() { // className="w5" style={{ width: 260 }} optionFilterProp="children" - value={connectionsContext.selectedConnectionId} + value={selectedConnectionId} onChange={handleChange} filterOption={(input, option) => option.props.value && @@ -42,7 +47,7 @@ function ConnectionDropdown() { - {connectionsContext.connections.map(conn => { + {connections.map(conn => { return (
    - } - placement="right" - title={record.name} - trigger="hover" - > - - - ); - }; - - const nameSorter = (a, b) => a.name.localeCompare(b.name); - - const modifiedSorter = (a, b) => { - return moment(a.modifiedDate).toDate() - moment(b.modifiedDate).toDate(); - }; - - const modifiedRender = (text, record) => - moment(record.modifiedDate).calendar(); - - const tagsRender = (text, record) => { - if (record.tags && record.tags.length) { - return record.tags.map(tag => {tag}); - } - }; - - const actionsRender = (text, record) => { - const tableUrl = `/query-table/${record._id}`; - const chartUrl = `/query-chart/${record._id}`; - return ( - - - table - - - - chart - - - handleQueryDelete(record._id)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > - - -
    - - - - - - - - - - - - - - - -
    {renderTable()}
    -
    -
    -
    - ); -} - -export default QueriesView; diff --git a/client/src/queries/QueryList.js b/client/src/queries/QueryList.js new file mode 100644 index 000000000..cc30fc214 --- /dev/null +++ b/client/src/queries/QueryList.js @@ -0,0 +1,206 @@ +import Button from 'antd/lib/button'; +import Icon from 'antd/lib/icon'; +import List from 'antd/lib/list'; +import Row from 'antd/lib/row'; +import Col from 'antd/lib/col'; +import Select from 'antd/lib/select'; +import Tooltip from 'antd/lib/tooltip'; +import Typography from 'antd/lib/typography'; +import Tag from 'antd/lib/tag'; +import Divider from 'antd/lib/divider'; +import PropTypes from 'prop-types'; +import React, { useEffect, useState } from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../stores/unistoreStore'; +import Popconfirm from 'antd/lib/popconfirm'; +import getAvailableSearchTags from './getAvailableSearchTags'; +import getDecoratedQueries from './getDecoratedQueries'; +import IconButtonLink from '../common/IconButtonLink'; +import SqlEditor from '../common/SqlEditor'; + +const { Option } = Select; +const { Title } = Typography; + +function QueryList({ + queries, + loadQueries, + connections, + deleteQuery, + onSelect +}) { + const [preview, setPreview] = useState(''); + const [searches, setSearches] = useState([]); + useEffect(() => { + loadQueries(); + }, []); + + const availableSearches = getAvailableSearchTags(queries, connections); + const decoratedQueries = getDecoratedQueries(queries, connections); + + let filteredQueries = decoratedQueries; + if (searches && searches.length) { + searches.forEach(search => { + if (search.startsWith('createdBy=')) { + const createdBy = search.substring(10); + filteredQueries = filteredQueries.filter( + query => query.createdBy === createdBy + ); + } else if (search.startsWith('tag=')) { + const sTag = search.substring(4); + filteredQueries = filteredQueries.filter( + query => query.tags && query.tags.includes(sTag) + ); + } else if (search.startsWith('connection=')) { + const connectionName = search.substring(11); + filteredQueries = filteredQueries.filter( + query => query.connectionName === connectionName + ); + } else { + // search is just open text search + const lowerSearch = search.toLowerCase(); + filteredQueries = filteredQueries.filter(q => { + return ( + (q.name && q.name.toLowerCase().search(lowerSearch) !== -1) || + (q.queryText && + q.queryText.toLowerCase().search(lowerSearch) !== -1) + ); + }); + } + }); + } + + const renderItem = query => { + const tableUrl = `/query-table/${query._id}`; + const chartUrl = `/query-chart/${query._id}`; + const queryUrl = `/queries/${query._id}`; + + return ( + setPreview(query)} + onMouseLeave={() => setPreview('')} + actions={[ + + { + onSelect(query); + }} + > + + + , + + + + + , + + + + + , + deleteQuery(query._id)} + onCancel={() => {}} + okText="Yes" + cancelText="No" + > + - - - - - - - setQueryState('name', e.target.value)} - /> - - - - - -
    - ); -} - -EditorNavBar.propTypes = { - activeTabKey: PropTypes.string.isRequired, - handleTabSelect: PropTypes.func.isRequired, - isSaving: PropTypes.bool.isRequired, - isRunning: PropTypes.bool.isRequired, - handleCloneClick: PropTypes.func.isRequired, - handleMoreClick: PropTypes.func.isRequired, - saveQuery: PropTypes.func.isRequired, - runQuery: PropTypes.func.isRequired, - formatQuery: PropTypes.func.isRequired, - queryName: PropTypes.string.isRequired, - queryId: PropTypes.string, - showValidation: PropTypes.bool.isRequired, - unsavedChanges: PropTypes.bool.isRequired -}; - -export default ConnectedEditorNavBar; diff --git a/client/src/queryEditor/FlexTabPane.js b/client/src/queryEditor/FlexTabPane.js deleted file mode 100644 index 5cd4c185f..000000000 --- a/client/src/queryEditor/FlexTabPane.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -function FlexTabPane({ activeTabKey, tabKey, children }) { - const display = activeTabKey === tabKey ? 'flex' : 'none'; - return
    {children}
    ; -} - -FlexTabPane.propTypes = { - activeTabKey: PropTypes.string, - tabKey: PropTypes.string.isRequired -}; - -FlexTabPane.defaultProps = { - activeTabKey: '' -}; - -export default FlexTabPane; diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 01501afbf..7a1351c68 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -1,19 +1,21 @@ import keymaster from 'keymaster'; import PropTypes from 'prop-types'; -import React, { createRef } from 'react'; +import Layout from 'antd/lib/layout'; +import React from 'react'; import SplitPane from 'react-split-pane'; import { connect } from 'unistore/react'; import { actions } from '../stores/unistoreStore'; -import AppNav from '../AppNav'; import QueryEditorResult from './QueryEditorResult'; import QueryEditorSqlEditor from './QueryEditorSqlEditor'; import QueryEditorChart from './QueryEditorChart'; -import EditorNavBar from './EditorNavBar'; -import FlexTabPane from './FlexTabPane'; -import QueryDetailsModal from './QueryDetailsModal'; +import Toolbar from './toolbar/Toolbar'; + import QueryResultHeader from './QueryResultHeader.js'; import SchemaSidebar from './SchemaSidebar.js'; import VisSidebar from './VisSidebar'; +import { resizeChart } from '../common/tauChartRef'; + +const { Content } = Layout; // TODO FIXME XXX capture unsaved state to local storage // Prompt is removed. It doesn't always work anyways @@ -37,12 +39,16 @@ class QueryEditor extends React.Component { loadQuery, saveQuery, runQuery, - formatQuery + formatQuery, + resetNewQuery } = this.props; await Promise.all([loadConnections(), loadTags()]); if (queryId !== 'new') { await loadQuery(queryId); + } else { + // TODO FIXME XXX this won't reset query state from new to new + resetNewQuery(); } /* Shortcuts @@ -71,87 +77,103 @@ class QueryEditor extends React.Component { keymaster.unbind('shift+return'); } - sqlpadTauChart = createRef(undefined); - - handleSaveImageClick = e => { - if (this.sqlpadTauChart.current && this.sqlpadTauChart.current.exportPng) { - this.sqlpadTauChart.current.exportPng(); - } - }; - handleVisPaneResize = () => { - if (this.sqlpadTauChart.current && this.sqlpadTauChart.current.resize) { - this.sqlpadTauChart.current.resize(); - } + const { queryId } = this.props; + resizeChart(queryId); }; render() { - const { activeTabKey, queryName } = this.props; + const { + chartType, + queryName, + showSchema, + showVisSidebar, + queryId + } = this.props; document.title = queryName; - return ( - -
    - -
    - - - - - -
    - -
    - -
    -
    -
    -
    -
    - - - -
    - -
    -
    -
    + const editorAndVis = chartType ? ( + + +
    + +
    +
    + ) : ( + + ); + + const editorResultPane = ( + + {editorAndVis} +
    + +
    +
    -
    - +
    + ); + + let sidebar = null; + if (showSchema) { + sidebar = ; + } else if (showVisSidebar) { + sidebar = ; + } + + const sqlTabPane = sidebar ? ( + + {sidebar} + {editorResultPane} + + ) : ( + editorResultPane + ); + + return ( + + +
    + +
    + {sqlTabPane} +
    +
    +
    +
    ); } } QueryEditor.propTypes = { - activeTabKey: PropTypes.string.isRequired, - connections: PropTypes.array.isRequired, formatQuery: PropTypes.func.isRequired, loadConnections: PropTypes.func.isRequired, loadQuery: PropTypes.func.isRequired, @@ -169,9 +191,13 @@ QueryEditor.defaultProps = { function mapStateToProps(state, props) { return { - activeTabKey: state.activeTabKey, - connections: state.connections, - queryName: state.query && state.query.name + chartType: + state.query && + state.query.chartConfiguration && + state.query.chartConfiguration.chartType, + queryName: state.query && state.query.name, + showSchema: state.showSchema, + showVisSidebar: state.showVisSidebar }; } diff --git a/client/src/queryEditor/QueryEditorChart.js b/client/src/queryEditor/QueryEditorChart.js index c620b605d..b42ca9327 100644 --- a/client/src/queryEditor/QueryEditorChart.js +++ b/client/src/queryEditor/QueryEditorChart.js @@ -1,13 +1,12 @@ -import React, { forwardRef } from 'react'; import { connect } from 'unistore/react'; import { actions } from '../stores/unistoreStore'; import SqlpadTauChart from '../common/SqlpadTauChart'; function mapStateToProps(state) { return { + queryId: (state.query && state.query._id) || 'new', isRunning: state.isRunning, queryError: state.queryError, - isVisible: state.activeTabKey === 'vis', queryResult: state.queryResult, chartConfiguration: state.query && state.query.chartConfiguration, queryName: state.query && state.query.name @@ -17,10 +16,6 @@ function mapStateToProps(state) { const ConnectedChart = connect( mapStateToProps, actions -)( - forwardRef((props, ref) => { - return ; - }) -); +)(SqlpadTauChart); export default ConnectedChart; diff --git a/client/src/queryEditor/SchemaSidebar.js b/client/src/queryEditor/SchemaSidebar.js index 2af08e6a7..8c887f7da 100644 --- a/client/src/queryEditor/SchemaSidebar.js +++ b/client/src/queryEditor/SchemaSidebar.js @@ -1,111 +1,85 @@ import Icon from 'antd/lib/icon'; import Tooltip from 'antd/lib/tooltip'; -import React from 'react'; +import React, { useEffect } from 'react'; import { connect } from 'unistore/react'; import { actions } from '../stores/unistoreStore'; import CopyToClipboard from 'react-copy-to-clipboard'; import Sidebar from '../common/Sidebar'; import SidebarBody from '../common/SidebarBody'; -import fetchJson from '../utilities/fetch-json.js'; -import updateCompletions from '../utilities/updateCompletions.js'; -const SchemaSidebarContainer = ({ config, selectedConnectionId }) => { - return ; -}; - -class SchemaSidebar extends React.PureComponent { - state = { - schemaInfo: {}, - loading: false +function mapStateToProps(state, props) { + return { + config: state.config, + connectionId: state.selectedConnectionId, + schemaInfo: + state.schema && + state.schema[state.selectedConnectionId] && + state.schema[state.selectedConnectionId].schemaInfo, + loading: + state.schema && + state.schema[state.selectedConnectionId] && + state.schema[state.selectedConnectionId].loading }; +} - componentDidMount() { - const { connectionId } = this.props; +function SchemaSidebar({ + config, + connectionId, + loadSchemaInfo, + schemaInfo, + loading +}) { + useEffect(() => { if (connectionId) { - this.getSchemaInfo(connectionId); + loadSchemaInfo(connectionId); } - } - - componentWillReceiveProps(nextProps) { - if (this.props.connectionId !== nextProps.connectionId) { - this.getSchemaInfo(nextProps.connectionId); - } - } + }, [connectionId]); - getSchemaInfo = (connectionId, reload) => { + const handleRefreshClick = e => { + e.preventDefault(); if (connectionId) { - this.setState({ - schemaInfo: {}, - loading: true - }); - const qs = reload ? '?reload=true' : ''; - fetchJson('GET', `/api/schema-info/${connectionId}${qs}`).then(json => { - const { error, schemaInfo } = json; - if (error) { - console.error(error); - } - updateCompletions(schemaInfo); - this.setState({ - schemaInfo: schemaInfo - }); - // sometimes refreshes happen so fast and people don't get to enjoy the animation - setTimeout(() => { - this.setState({ loading: false }); - }, 1000); - }); - } else { - this.setState({ - schemaInfo: {} - }); + loadSchemaInfo(connectionId, true); } }; - handleRefreshClick = e => { - e.preventDefault(); - this.getSchemaInfo(this.props.connectionId, true); - }; - - render() { - const { loading, schemaInfo } = this.state; - const refreshClass = loading ? 'spinning' : ''; + const refreshClass = loading ? 'spinning' : ''; - const schemaCount = schemaInfo ? Object.keys(schemaInfo).length : 0; - const initShowTables = schemaCount <= 2; - const schemaItemNodes = schemaInfo - ? Object.keys(schemaInfo).map(schema => { - return ( - - ); - }) - : null; + const schemaCount = schemaInfo ? Object.keys(schemaInfo).length : 0; + const initShowTables = schemaCount <= 2; + const schemaItemNodes = schemaInfo + ? Object.keys(schemaInfo).map(schema => { + return ( + + ); + }) + : null; - return ( - - -
    - - - - - -
      - {schemaItemNodes} -
    -
    - - - ); - } + return ( + + +
    + + + + + +
      + {schemaItemNodes} +
    +
    +
    +
    + ); } class SchemaInfoSchemaItem extends React.Component { @@ -345,6 +319,6 @@ class SchemaInfoColumnItem extends React.Component { } export default connect( - ['selectedConnectionId', 'config'], + mapStateToProps, actions -)(React.memo(SchemaSidebarContainer)); +)(React.memo(SchemaSidebar)); diff --git a/client/src/queryEditor/VisSidebar.js b/client/src/queryEditor/VisSidebar.js index b094f0951..44921a567 100644 --- a/client/src/queryEditor/VisSidebar.js +++ b/client/src/queryEditor/VisSidebar.js @@ -9,6 +9,7 @@ import Sidebar from '../common/Sidebar'; import SidebarBody from '../common/SidebarBody'; import chartDefinitions from '../utilities/chartDefinitions.js'; import ChartInputs from './ChartInputs.js'; +import { exportPng } from '../common/tauChartRef'; const { Option } = Select; function mapStateToProps(state) { @@ -36,7 +37,7 @@ function VisSidebar({ queryResult, handleChartTypeChange, handleChartConfigurationFieldsChange, - onSaveImageClick + queryId }) { const chartOptions = chartDefinitions.map(d => { return ( @@ -75,7 +76,7 @@ function VisSidebar({ />
    -
    @@ -88,6 +89,7 @@ VisSidebar.propTypes = { onChartTypeChange: PropTypes.func, onSaveImageClick: PropTypes.func, query: PropTypes.object, + queryId: PropTypes.string, queryResult: PropTypes.object }; diff --git a/client/src/queryEditor/toolbar/AboutButton.js b/client/src/queryEditor/toolbar/AboutButton.js new file mode 100644 index 000000000..2210aef49 --- /dev/null +++ b/client/src/queryEditor/toolbar/AboutButton.js @@ -0,0 +1,45 @@ +import Button from 'antd/lib/button'; +import Tooltip from 'antd/lib/tooltip'; +import Modal from 'antd/lib/modal'; +import { connect } from 'unistore/react'; +import { actions } from '../../stores/unistoreStore'; +import PropTypes from 'prop-types'; +import React from 'react'; +import AboutContent from './AboutContent'; + +function mapStateToProps(state) { + return { + version: state.version || {} + }; +} + +const ConnectedEditorNavBar = connect( + mapStateToProps, + actions +)(React.memo(AboutButton)); + +function AboutButton({ version }) { + return ( + + + setShowQueries(false)} + placement="left" + > + setShowQueries(false)} /> + + + ); +} + +export default React.memo(QueryListButton); diff --git a/client/src/queryEditor/toolbar/SignoutButton.js b/client/src/queryEditor/toolbar/SignoutButton.js new file mode 100644 index 000000000..70a08aad3 --- /dev/null +++ b/client/src/queryEditor/toolbar/SignoutButton.js @@ -0,0 +1,28 @@ +import Button from 'antd/lib/button'; +import Tooltip from 'antd/lib/tooltip'; +import { Redirect } from 'react-router-dom'; +import React, { useState } from 'react'; +import fetchJson from '../../utilities/fetch-json.js'; + +function SignoutButton() { + const [redirect, setRedirect] = useState(false); + + if (redirect) { + return ; + } + + return ( + + + + + + + + + + + + + + +
    + + + + + + {isAdmin && ( + + + + )} + + + + + +
    + ); +} + +Toolbar.propTypes = { + isSaving: PropTypes.bool.isRequired, + isRunning: PropTypes.bool.isRequired, + handleCloneClick: PropTypes.func.isRequired, + saveQuery: PropTypes.func.isRequired, + runQuery: PropTypes.func.isRequired, + formatQuery: PropTypes.func.isRequired, + queryName: PropTypes.string.isRequired, + queryId: PropTypes.string, + showValidation: PropTypes.bool.isRequired, + unsavedChanges: PropTypes.bool.isRequired +}; + +export default ConnectedEditorNavBar; diff --git a/client/src/stores/unistoreStore.js b/client/src/stores/unistoreStore.js index 7fa69d9c3..b8d3414c7 100644 --- a/client/src/stores/unistoreStore.js +++ b/client/src/stores/unistoreStore.js @@ -4,6 +4,7 @@ import sortBy from 'lodash/sortBy'; import message from 'antd/lib/message'; import sqlFormatter from 'sql-formatter'; import fetchJson from '../utilities/fetch-json.js'; +import updateCompletions from '../utilities/updateCompletions.js'; const ONE_HOUR_MS = 1000 * 60 * 60; @@ -28,25 +29,42 @@ export const unistoreStore = createStore({ connections: [], connectionsLastUpdated: null, connectionsLoading: false, - activeTabKey: 'sql', availableTags: [], cacheKey: uuid.v1(), isRunning: false, isSaving: false, + queries: [], query: Object.assign({}, NEW_QUERY), queryResult: undefined, queryError: null, runQueryStartTime: undefined, selectedText: '', - showModal: false, showValidation: false, - unsavedChanges: false + showSchema: true, + showVisSidebar: false, + unsavedChanges: false, + schema: {} // schema..loading / schemaInfo / lastUpdated }); // If actions is a function, it gets passed the store: // Actions receive current state as first parameter and any other params next // Actions can just return a state update: export const actions = store => ({ + // APP NAV + toggleSchema(state) { + return { + showSchema: !state.showSchema, + showVisSidebar: false + }; + }, + + toggleVisSidebar(state) { + return { + showVisSidebar: !state.showVisSidebar, + showSchema: false + }; + }, + // CONFIG async refreshAppContext() { const json = await fetchJson('GET', 'api/app'); @@ -69,6 +87,41 @@ export const actions = store => ({ }; }, + // SCHEMA + async loadSchemaInfo(state, connectionId, reload) { + const { schema } = state; + if (!schema[connectionId] || reload) { + store.setState({ + schema: { + ...schema, + [connectionId]: { + loading: true + } + } + }); + + const qs = reload ? '?reload=true' : ''; + const json = await fetchJson( + 'GET', + `/api/schema-info/${connectionId}${qs}` + ); + const { error, schemaInfo } = json; + if (error) { + return message.error(error); + } + updateCompletions(schemaInfo); + return { + schema: { + ...schema, + [connectionId]: { + loading: false, + schemaInfo + } + } + }; + } + }, + // CONNECTIONS selectConnectionId(state, selectedConnectionId) { return { selectedConnectionId }; @@ -143,6 +196,38 @@ export const actions = store => ({ }; }, + async loadQueries(state) { + const { queriesLastUpdated, queries } = state; + if ( + !queries.length || + (queriesLastUpdated && new Date() - queriesLastUpdated > ONE_HOUR_MS) + ) { + store.setState({ queriesLoading: true }); + const json = await fetchJson('GET', '/api/queries'); + if (json.error) { + message.error(json.error); + } + store.setState({ + queriesLoading: false, + queriesLastUpdated: new Date(), + queries: json.queries || [] + }); + } + }, + + async deleteQuery(state, queryId) { + const { queries } = state; + const filteredQueries = queries.filter(q => { + return q._id !== queryId; + }); + store.setState({ queries: filteredQueries }); + const json = await fetchJson('DELETE', '/api/queries/' + queryId); + if (json.error) { + message.error(json.error); + store.setState({ queries }); + } + }, + async loadQuery(state, queryId) { const { error, query } = await fetchJson('GET', `/api/queries/${queryId}`); if (error) { @@ -201,17 +286,27 @@ export const actions = store => ({ if (query._id) { fetchJson('PUT', `/api/queries/${query._id}`, queryData).then(json => { const { error, query } = json; + const { queries } = store.getState(); if (error) { message.error(error); store.setState({ isSaving: false }); return; } message.success('Query Saved'); - store.setState({ isSaving: false, unsavedChanges: false, query }); + const updatedQueries = queries.map(q => { + return q._id === query._id ? query : q; + }); + store.setState({ + isSaving: false, + unsavedChanges: false, + query, + queries: updatedQueries + }); }); } else { fetchJson('POST', `/api/queries`, queryData).then(json => { const { error, query } = json; + const { queries } = store.getState(); if (error) { message.error(error); store.setState({ isSaving: false }); @@ -223,7 +318,12 @@ export const actions = store => ({ `${window.BASE_URL}/queries/${query._id}` ); message.success('Query Saved'); - store.setState({ isSaving: false, unsavedChanges: false, query }); + store.setState({ + isSaving: false, + unsavedChanges: false, + query, + queries: [query].concat(queries) + }); }); } }, @@ -238,7 +338,6 @@ export const actions = store => ({ resetNewQuery(state) { return { - activeTabKey: 'sql', queryResult: undefined, query: Object.assign({}, NEW_QUERY), unsavedChanges: false @@ -276,19 +375,7 @@ export const actions = store => ({ }; }, - handleModalHide() { - return { showModal: false }; - }, - - handleMoreClick() { - return { showModal: true }; - }, - - handleQuerySelectionChange(store, selectedText) { + handleQuerySelectionChange(state, selectedText) { return { selectedText }; - }, - - handleTabSelect(store, event) { - return { activeTabKey: event.target.value }; } }); diff --git a/client/src/users/UserDrawer.js b/client/src/users/UserList.js similarity index 91% rename from client/src/users/UserDrawer.js rename to client/src/users/UserList.js index 5de2c0784..ffb6fa2fc 100644 --- a/client/src/users/UserDrawer.js +++ b/client/src/users/UserList.js @@ -4,7 +4,6 @@ import Modal from 'antd/lib/modal'; import Row from 'antd/lib/row'; import Col from 'antd/lib/col'; import Popconfirm from 'antd/lib/popconfirm'; -import Drawer from 'antd/lib/drawer'; import List from 'antd/lib/list'; import React, { useEffect, useState } from 'react'; import { connect } from 'unistore/react'; @@ -13,7 +12,7 @@ import fetchJson from '../utilities/fetch-json.js'; import InviteUserForm from './InviteUserForm'; import EditUserForm from './EditUserForm'; -function UsersDrawer({ currentUser, visible, onClose }) { +function UserList({ currentUser }) { const [users, setUsers] = useState([]); const [showAddUser, setShowAddUser] = useState(false); const [editUser, setEditUser] = useState(null); @@ -90,14 +89,7 @@ function UsersDrawer({ currentUser, visible, onClose }) { }; return ( - + <>
    +
    + +
    +
    +
    + {loading ? ( + + ) : ( +
      + + {Row} + +
    + )} +
    +
    + + )} + + ); +} + +export default connect( + mapStateToProps, + actions +)(React.memo(SchemaSidebar)); diff --git a/client/src/schema/SchemaSidebar.module.css b/client/src/schema/SchemaSidebar.module.css new file mode 100644 index 000000000..4be13aba2 --- /dev/null +++ b/client/src/schema/SchemaSidebar.module.css @@ -0,0 +1,45 @@ +.schema { + cursor: default; + font-size: 12px; + line-height: 22px; + font-family: Monaco, Menlo, 'Ubuntu Mono', Consolas, source-code-pro, + monospace; + user-select: none; +} + +.table { + padding-left: 20px; + cursor: default; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 12px; + line-height: 22px; + font-family: Monaco, Menlo, 'Ubuntu Mono', Consolas, source-code-pro, + monospace; + user-select: none; +} + +.schema:hover, +.table:hover { + background-color: #f4f4f4; +} + +.column { + padding-left: 54px; + cursor: default; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 12px; + line-height: 22px; + font-family: Monaco, Menlo, 'Ubuntu Mono', Consolas, source-code-pro, + monospace; +} + +.schemaSpinner { + text-align: center; + padding-top: 100px; + width: 100%; + height: 100%; +} diff --git a/client/src/schema/getSchemaList.js b/client/src/schema/getSchemaList.js new file mode 100644 index 000000000..2fd0aeeca --- /dev/null +++ b/client/src/schema/getSchemaList.js @@ -0,0 +1,55 @@ +/** + * To render this schema tree with react-virtualized we'll convert this to a normalized list of sorts + * Because a tree is basically an indented list...? + * + * schemaInfo looks like + * { + * schemaName: { + * tableName: [ + * { column_name, column_description, data_type, table_name, table_schema } + * ] + * } + * } + * + * @param {object} schemaInfo + */ +export default function getSchemaList(schemaInfo) { + const schemaList = []; + + if (schemaInfo) { + Object.keys(schemaInfo).forEach(schemaName => { + const schemaId = schemaName; + schemaList.push({ + type: 'schema', + name: schemaName, + id: schemaId, + parentIds: [] + }); + Object.keys(schemaInfo[schemaName]).forEach(tableName => { + const tableId = `${schemaName}.${tableName}`; + schemaList.push({ + type: 'table', + name: tableName, + schemaName, + id: tableId, + parentIds: [schemaId] + }); + schemaInfo[schemaName][tableName].forEach(column => { + const columnId = `${schemaName}.${tableName}.${column.column_name}`; + schemaList.push({ + type: 'column', + name: column.column_name, + description: column.column_description, + dataType: column.data_type, + tableName, + schemaName, + id: columnId, + parentIds: [schemaId, tableId] + }); + }); + }); + }); + } + + return schemaList; +} diff --git a/client/src/schema/searchSchemaInfo.js b/client/src/schema/searchSchemaInfo.js new file mode 100644 index 000000000..4b0c53d88 --- /dev/null +++ b/client/src/schema/searchSchemaInfo.js @@ -0,0 +1,34 @@ +function searchTables(tableMap, searchRegEx) { + const res = {}; + Object.keys(tableMap).forEach(tableName => { + if ( + searchRegEx.test(tableName) || + tableMap[tableName].some(col => searchRegEx.test(col.column_name)) + ) { + res[tableName] = tableMap[tableName]; + } + }); + return res; +} + +/** + * Search schemaInfo (the hierarchy object storage of schema data) for the search string passed in + * @param {object} schemaInfo + * @param {string} search + */ +export default function searchSchemaInfo(schemaInfo, search) { + const filteredSchemaInfo = {}; + const searchRegEx = new RegExp(search, 'i'); + + if (schemaInfo) { + Object.keys(schemaInfo).forEach(schemaName => { + const filteredTableMap = searchTables( + schemaInfo[schemaName], + searchRegEx + ); + filteredSchemaInfo[schemaName] = filteredTableMap; + }); + } + + return filteredSchemaInfo; +} diff --git a/client/src/stores/unistoreStore.js b/client/src/stores/unistoreStore.js index b8d3414c7..e347aede1 100644 --- a/client/src/stores/unistoreStore.js +++ b/client/src/stores/unistoreStore.js @@ -95,7 +95,8 @@ export const actions = store => ({ schema: { ...schema, [connectionId]: { - loading: true + loading: true, + expanded: {} } } }); @@ -110,18 +111,43 @@ export const actions = store => ({ return message.error(error); } updateCompletions(schemaInfo); + + // Pre-expand schemas + const expanded = {}; + if (schemaInfo) { + Object.keys(schemaInfo).forEach(schemaName => { + expanded[schemaName] = true; + }); + } + return { schema: { ...schema, [connectionId]: { loading: false, - schemaInfo + schemaInfo, + expanded } } }; } }, + toggleSchemaItem(state, connectionId, item) { + const { schema } = state; + const connectionSchema = schema[connectionId]; + const open = !connectionSchema.expanded[item.id]; + return { + schema: { + ...schema, + [connectionId]: { + ...connectionSchema, + expanded: { ...connectionSchema.expanded, [item.id]: open } + } + } + }; + }, + // CONNECTIONS selectConnectionId(state, selectedConnectionId) { return { selectedConnectionId }; diff --git a/server/drivers/mock/index.js b/server/drivers/mock/index.js index e10cba187..2c0eccc3b 100644 --- a/server/drivers/mock/index.js +++ b/server/drivers/mock/index.js @@ -2,6 +2,10 @@ const _ = require('lodash'); const moment = require('moment'); const { formatSchemaQueryResults } = require('../utils'); +function wait(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + const id = 'mock'; const name = 'Mock driver'; @@ -230,14 +234,13 @@ Array(500) /** * Get schema for connection */ -function getSchema() { +async function getSchema() { const fakeSchemaQueryResult = { rows: schemaRows, incomplete: false }; - return Promise.resolve().then(() => - formatSchemaQueryResults(fakeSchemaQueryResult) - ); + await wait(Math.random() * 5000); + return formatSchemaQueryResults(fakeSchemaQueryResult); } const fields = [ From 83275c2dc462c88780082b0d200b9fe805a9c178 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 22 Apr 2019 21:20:37 -0400 Subject: [PATCH 037/855] Update dependencies --- client/package-lock.json | 10760 ++++++++++++------------------------- client/package.json | 6 +- 2 files changed, 3573 insertions(+), 7193 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 3451c2c99..99bfa7fa4 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -4,6 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ant-design/create-react-context": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.4.tgz", + "integrity": "sha512-8sw+/w6r+aEbd+OJ62ojoSE4zDt/3yfQydmbWFznoftjr8v/opOswGjM+/MU0rSaREbluqzOmZ6xdecHpSaS2w==", + "requires": { + "gud": "^1.0.0", + "warning": "^4.0.3" + } + }, "@ant-design/icons": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-1.2.1.tgz", @@ -27,32 +36,39 @@ } }, "@babel/core": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", - "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.3.tgz", + "integrity": "sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.2", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.2", - "@babel/types": "^7.2.2", + "@babel/generator": "^7.4.0", + "@babel/helpers": "^7.4.3", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", + "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.4.0", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -86,36 +102,36 @@ } }, "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz", + "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==", "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-hoist-variables": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz", - "integrity": "sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.3.tgz", + "integrity": "sha512-UMl3TSpX11PuODYdWGrUeW6zFkdYhDn7wRLrOuNVM6f9L+S9CzmDXYyrp3MTHcwWjnzur1f/Op8A7iYZWya2Yg==", "requires": { "@babel/helper-function-name": "^7.1.0", "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.3.4", - "@babel/helper-split-export-declaration": "^7.0.0" + "@babel/helper-replace-supers": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.0" } }, "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz", + "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" + "@babel/types": "^7.4.0", + "lodash": "^4.17.11" } }, "@babel/helper-explode-assignable-expression": { @@ -146,11 +162,11 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", + "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.0" } }, "@babel/helper-member-expression-to-functions": { @@ -170,16 +186,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", - "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.3.tgz", + "integrity": "sha512-H88T9IySZW25anu5uqyaC1DaQre7ofM+joZtAaO2F8NBdFfupH0SZ4gKjgSFVcvtx/aAirqA9L9Clio2heYbZA==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", "@babel/helper-split-export-declaration": "^7.0.0", "@babel/template": "^7.2.2", "@babel/types": "^7.2.2", - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/helper-optimise-call-expression": { @@ -196,11 +212,11 @@ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.3.tgz", + "integrity": "sha512-hnoq5u96pLCfgjXuj8ZLX3QQ+6nAulS+zSgi6HulUwFbEruRAKwbGLU5OvXkE14L8XW6XsQEKsIDfgthKLRAyA==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/helper-remap-async-to-generator": { @@ -216,14 +232,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz", - "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", + "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", "requires": { "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.3.4", - "@babel/types": "^7.3.4" + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/helper-simple-access": { @@ -236,11 +252,11 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", + "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.0" } }, "@babel/helper-wrap-function": { @@ -255,13 +271,13 @@ } }, "@babel/helpers": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", - "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.3.tgz", + "integrity": "sha512-BMh7X0oZqb36CfyhvtbSmcWc3GXocfxv3yNsAEuM0l+fAqSO22rQrUpijr3oE/10jCTrB6/0b9kzmG4VetCj8Q==", "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.3.0" + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0" } }, "@babel/highlight": { @@ -275,9 +291,9 @@ } }, "@babel/parser": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", - "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==" + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.3.tgz", + "integrity": "sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -290,20 +306,20 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz", - "integrity": "sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz", + "integrity": "sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.3.0", + "@babel/helper-create-class-features-plugin": "^7.4.0", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-proposal-decorators": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz", - "integrity": "sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.0.tgz", + "integrity": "sha512-d08TLmXeK/XbgCo7ZeZ+JaeZDtDai/2ctapTRsWWkkmy7G/cqz8DQN/HlWG7RR4YmfXxmExsbU3SuCjlM7AtUg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.3.0", + "@babel/helper-create-class-features-plugin": "^7.4.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-decorators": "^7.2.0" } @@ -318,9 +334,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz", - "integrity": "sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz", + "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -336,13 +352,13 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz", + "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" + "regexpu-core": "^4.5.4" } }, "@babel/plugin-syntax-async-generators": { @@ -426,9 +442,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz", - "integrity": "sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz", + "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -444,26 +460,26 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz", - "integrity": "sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz", + "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "lodash": "^4.17.11" } }, "@babel/plugin-transform-classes": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz", - "integrity": "sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz", + "integrity": "sha512-PUaIKyFUDtG6jF5DUJOfkBdwAS/kFFV3XFk7Nn0a6vR7ZT8jYw5cGtIlat77wcnd0C6ViGqo/wyNf4ZHytF/nQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", + "@babel/helper-define-map": "^7.4.0", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.3.4", - "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/helper-replace-supers": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.0", "globals": "^11.1.0" } }, @@ -476,21 +492,21 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", - "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz", + "integrity": "sha512-rVTLLZpydDFDyN4qnXdzwoVpk1oaXHIvPEOkOLyr88o7oHxVc/LyrnDx+amuBWGOwUb7D1s/uLsKBNTx08htZg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.3.tgz", + "integrity": "sha512-9Arc2I0AGynzXRR/oPdSALv3k0rM38IMFyto7kOCwb5F9sLUt2Ykdo3V9yUPR+Bgr4kb6bVEyLkPEiBhzcTeoA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-regex": "^7.4.3", + "regexpu-core": "^4.5.4" } }, "@babel/plugin-transform-duplicate-keys": { @@ -511,26 +527,26 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz", - "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz", + "integrity": "sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-flow": "^7.2.0" } }, "@babel/plugin-transform-for-of": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.3.tgz", + "integrity": "sha512-UselcZPwVWNSURnqcfpnxtMehrb8wjXYOimlYQPBnup/Zld426YzIhNEvuRsEWVHfESIECGrxoI6L5QqzuLH5Q==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.3.tgz", + "integrity": "sha512-uT5J/3qI/8vACBR9I1GlAuU/JqBtWdfCrynuOkrWG6nCDieZd5przB1vfP59FRHBZQ9DC2IUfqr/xKqzOD5x0A==", "requires": { "@babel/helper-function-name": "^7.1.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -544,6 +560,14 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/plugin-transform-modules-amd": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", @@ -554,21 +578,21 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.3.tgz", + "integrity": "sha512-sMP4JqOTbMJMimqsSZwYWsMjppD+KRyDIUVW91pd7td0dZKAvPmhCaxhOzkzLParKwgQc7bdL9UNv+rpJB0HfA==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-module-transforms": "^7.4.3", "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-simple-access": "^7.1.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz", - "integrity": "sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz", + "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==", "requires": { - "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-hoist-variables": "^7.4.0", "@babel/helper-plugin-utils": "^7.0.0" } }, @@ -582,17 +606,17 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", - "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz", + "integrity": "sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==", "requires": { "regexp-tree": "^0.1.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz", + "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -607,15 +631,23 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz", - "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.3.tgz", + "integrity": "sha512-ULJYC2Vnw96/zdotCZkMGr2QVfKpIT/4/K+xWWY0MbOJyMZuk660BGkr3bEKWQrrciwz6xpmft39nA4BF7hJuA==", "requires": { - "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-call-delegate": "^7.4.0", "@babel/helper-get-function-arity": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/plugin-transform-react-constant-elements": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", @@ -662,22 +694,37 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz", - "integrity": "sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.3.tgz", + "integrity": "sha512-kEzotPuOpv6/iSlHroCDydPkKYw7tiJGKlmYp6iJn4a6C/+b2FdttlJsLKYxolYHgotTJ5G5UY5h0qey5ka3+A==", "requires": { "regenerator-transform": "^0.13.4" } }, - "@babel/plugin-transform-runtime": { + "@babel/plugin-transform-reserved-words": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", - "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.3.tgz", + "integrity": "sha512-7Q61bU+uEI7bCUFReT1NKn7/X6sDQsZ7wL1sJ9IYMAO7cI+eg6x9re1cEw2fCRMbbTVyoeUKWSV1M6azEfKCfg==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "resolve": "^1.8.1", "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "@babel/plugin-transform-shorthand-properties": { @@ -723,72 +770,84 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.3.2.tgz", - "integrity": "sha512-Pvco0x0ZSCnexJnshMfaibQ5hnK8aUHSvjCQhC1JR8eeg+iBwt0AtCO7gWxJ358zZevuf9wPSO5rv+WJcbHPXQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz", + "integrity": "sha512-U7/+zKnRZg04ggM/Bm+xmu2B/PrwyDQTT/V89FXWYWNMxBDwSx56u6jtk9SEbfLFbZaEI72L+5LPvQjeZgFCrQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.3.tgz", + "integrity": "sha512-lnSNgkVjL8EMtnE8eSS7t2ku8qvKH3eqNf/IwIfnSPUqzgqYmRwzdsQWv4mNQAN9Nuo6Gz1Y0a4CSmdpu1Pp6g==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-regex": "^7.4.3", + "regexpu-core": "^4.5.4" } }, "@babel/preset-env": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", - "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.3.tgz", + "integrity": "sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.4", + "@babel/plugin-proposal-object-rest-spread": "^7.4.3", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.3.4", + "@babel/plugin-transform-async-to-generator": "^7.4.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.3.4", - "@babel/plugin-transform-classes": "^7.3.4", + "@babel/plugin-transform-block-scoping": "^7.4.0", + "@babel/plugin-transform-classes": "^7.4.3", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.4.3", + "@babel/plugin-transform-dotall-regex": "^7.4.3", "@babel/plugin-transform-duplicate-keys": "^7.2.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", - "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.3", + "@babel/plugin-transform-function-name": "^7.4.3", "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.3.4", + "@babel/plugin-transform-modules-commonjs": "^7.4.3", + "@babel/plugin-transform-modules-systemjs": "^7.4.0", "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", - "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", + "@babel/plugin-transform-new-target": "^7.4.0", "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.3.4", + "@babel/plugin-transform-parameters": "^7.4.3", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.3", + "@babel/plugin-transform-reserved-words": "^7.2.0", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", "@babel/plugin-transform-sticky-regex": "^7.2.0", "@babel/plugin-transform-template-literals": "^7.2.0", "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", + "@babel/plugin-transform-unicode-regex": "^7.4.3", + "@babel/types": "^7.4.0", + "browserslist": "^4.5.2", + "core-js-compat": "^3.0.0", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "@babel/preset-react": { @@ -804,12 +863,12 @@ } }, "@babel/preset-typescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz", - "integrity": "sha512-LYveByuF9AOM8WrsNne5+N79k1YxjNB6gmpCQsnuSBAcV8QUeB+ZUxQzL7Rz7HksPbahymKkq2qBR+o36ggFZA==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz", + "integrity": "sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.1.0" + "@babel/plugin-transform-typescript": "^7.3.2" } }, "@babel/runtime": { @@ -828,46 +887,255 @@ } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", + "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.3.tgz", + "integrity": "sha512-HmA01qrtaCwwJWpSKpA948cBvU5BrmviAief/b3AVw936DtcdsTexlbyzNuDnthwhOQ37xshn7hvQaEQk7ISYQ==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", + "@babel/generator": "^7.4.0", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/types": "^7.4.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", + "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", "requires": { "esutils": "^2.0.2", "lodash": "^4.17.11", "to-fast-properties": "^2.0.0" } }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, + "@csstools/normalize.css": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-9.0.1.tgz", + "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" + }, + "@jest/console": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "requires": { + "@jest/source-map": "^24.3.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.7.1.tgz", + "integrity": "sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.7.0", + "jest-config": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-message-util": "^24.7.1", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.7.1", + "jest-runner": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "jest-watcher": "^24.7.1", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "@jest/environment": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.7.1.tgz", + "integrity": "sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw==", + "requires": { + "@jest/fake-timers": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0" + } + }, + "@jest/fake-timers": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.7.1.tgz", + "integrity": "sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA==", + "requires": { + "@jest/types": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-mock": "^24.7.0" + } + }, + "@jest/reporters": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.7.1.tgz", + "integrity": "sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw==", + "requires": { + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-api": "^2.1.1", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-source-maps": "^3.0.1", + "jest-haste-map": "^24.7.1", + "jest-resolve": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.7.1.tgz", + "integrity": "sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz", + "integrity": "sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA==", + "requires": { + "@jest/test-result": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-runner": "^24.7.1", + "jest-runtime": "^24.7.1" + } + }, + "@jest/transform": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.7.1.tgz", + "integrity": "sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.7.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.7.1", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.7.1", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/types": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.7.0.tgz", + "integrity": "sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/yargs": "^12.0.9" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -883,99 +1151,99 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, "@svgr/babel-plugin-add-jsx-attribute": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.0.0.tgz", - "integrity": "sha512-PDvHV2WhSGCSExp+eIMEKxYd1Q0SBvXLb4gAOXbdh0dswHFFgXWzxGjCmx5aln4qGrhkuN81khzYzR/44DYaMA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" }, "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.0.3.tgz", - "integrity": "sha512-fpG7AzzJxz1tc8ITYS1jCAt1cq4ydK2R+sx//BMTJgvOjfk91M5GiqFolP8aYTzLcum92IGNAVFS3zEcucOQEA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" }, "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.0.0.tgz", - "integrity": "sha512-nBGVl6LzXTdk1c6w3rMWcjq3mYGz+syWc5b3CdqAiEeY/nswYDoW/cnGUKKC8ofD6/LaG+G/IUnfv3jKoHz43A==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", + "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" }, "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.0.0.tgz", - "integrity": "sha512-ejQqpTfORy6TT5w1x/2IQkscgfbtNFjitcFDu63GRz7qfhVTYhMdiJvJ1+Aw9hmv9bO4tXThGQDr1IF5lIvgew==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", + "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.0.0.tgz", - "integrity": "sha512-OE6GT9WRKWqd0Dk6NJ5TYXTF5OxAyn74+c/D+gTLbCXnK2A0luEXuwMbe5zR5Px4A/jow2OeEBboTENl4vtuQg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.2.0.tgz", + "integrity": "sha512-gH2qItapwCUp6CCqbxvzBbc4dh4OyxdYKsW3EOkYexr0XUmQL0ScbdNh6DexkZ01T+sdClniIbnCObsXcnx3sQ==" }, "@svgr/babel-plugin-svg-em-dimensions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.0.0.tgz", - "integrity": "sha512-QeDRGHXfjYEBTXxV0TsjWmepsL9Up5BOOlMFD557x2JrSiVGUn2myNxHIrHiVW0+nnWnaDcrkjg/jUvbJ5nKCg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", + "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" }, "@svgr/babel-plugin-transform-react-native-svg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.0.0.tgz", - "integrity": "sha512-c6eE6ovs14k6dmHKoy26h7iRFhjWNnwYVrDWIPfouVm/gcLIeMw/ME4i91O5LEfaDHs6kTRCcVpbAVbNULZOtw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", + "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" }, "@svgr/babel-plugin-transform-svg-component": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.1.0.tgz", - "integrity": "sha512-uulxdx2p3nrM2BkrtADQHK8IhEzCxdUILfC/ddvFC8tlFWuKiA3ych8C6q0ulyQHq34/3hzz+3rmUbhWF9redg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", + "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" }, "@svgr/babel-preset": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.1.0.tgz", - "integrity": "sha512-Nat5aJ3VO3LE8KfMyIbd3sGWnaWPiFCeWIdEV+lalga0To/tpmzsnPDdnrR9fNYhvSSLJbwhU/lrLYt9wXY0ZQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.2.0.tgz", + "integrity": "sha512-iLetHpRCQXfK47voAs5/uxd736cCyocEdorisjAveZo8ShxJ/ivSZgstBmucI1c8HyMF5tOrilJLoFbhpkPiKw==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^4.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^4.0.3", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^4.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^4.0.0", - "@svgr/babel-plugin-transform-svg-component": "^4.1.0" + "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.2.0", + "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", + "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", + "@svgr/babel-plugin-transform-svg-component": "^4.2.0" } }, "@svgr/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.1.0.tgz", - "integrity": "sha512-ahv3lvOKuUAcs0KbQ4Jr5fT5pGHhye4ew8jZVS4lw8IQdWrbG/o3rkpgxCPREBk7PShmEoGQpteeXVwp2yExuQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.2.0.tgz", + "integrity": "sha512-nvzXaf2VavqjMCTTfsZfjL4o9035KedALkMzk82qOlHOwBb8JT+9+zYDgBl0oOunbVF94WTLnvGunEg0csNP3Q==", "requires": { - "@svgr/plugin-jsx": "^4.1.0", - "camelcase": "^5.0.0", - "cosmiconfig": "^5.0.7" + "@svgr/plugin-jsx": "^4.2.0", + "camelcase": "^5.3.1", + "cosmiconfig": "^5.2.0" } }, "@svgr/hast-util-to-babel-ast": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.1.0.tgz", - "integrity": "sha512-tdkEZHmigYYiVhIEzycAMKN5aUSpddUnjr6v7bPwaNTFuSyqGUrpCg1JlIGi7PUaaJVHbn6whGQMGUpKOwT5nw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.2.0.tgz", + "integrity": "sha512-IvAeb7gqrGB5TH9EGyBsPrMRH/QCzIuAkLySKvH2TLfLb2uqk98qtJamordRQTpHH3e6TORfBXoTo7L7Opo/Ow==", "requires": { - "@babel/types": "^7.1.6" + "@babel/types": "^7.4.0" } }, "@svgr/plugin-jsx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.1.0.tgz", - "integrity": "sha512-xwu+9TGziuN7cu7p+vhCw2EJIfv8iDNMzn2dR0C7fBYc8q+SRtYTcg4Uyn8ZWh6DM+IZOlVrS02VEMT0FQzXSA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.2.0.tgz", + "integrity": "sha512-AM1YokmZITgveY9bulLVquqNmwiFo2Px2HL+IlnTCR01YvWDfRL5QKdnF7VjRaS5MNP938mmqvL0/8oz3zQMkg==", "requires": { - "@babel/core": "^7.1.6", - "@svgr/babel-preset": "^4.1.0", - "@svgr/hast-util-to-babel-ast": "^4.1.0", + "@babel/core": "^7.4.3", + "@svgr/babel-preset": "^4.2.0", + "@svgr/hast-util-to-babel-ast": "^4.2.0", "rehype-parse": "^6.0.0", - "unified": "^7.0.2", - "vfile": "^3.0.1" + "unified": "^7.1.0", + "vfile": "^4.0.0" } }, "@svgr/plugin-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.0.3.tgz", - "integrity": "sha512-MgL1CrlxvNe+1tQjPUc2bIJtsdJOIE5arbHlPgW+XVWGjMZTUcyNNP8R7/IjM2Iyrc98UJY+WYiiWHrinnY9ZQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.2.0.tgz", + "integrity": "sha512-zUEKgkT172YzHh3mb2B2q92xCnOAMVjRx+o0waZ1U50XqKLrVQ/8dDqTAtnmapdLsGurv8PSwenjLCUpj6hcvw==", "requires": { - "cosmiconfig": "^5.0.7", + "cosmiconfig": "^5.2.0", "merge-deep": "^3.0.2", - "svgo": "^1.1.1" + "svgo": "^1.2.1" } }, "@svgr/webpack": { @@ -993,10 +1261,61 @@ "loader-utils": "^1.1.0" } }, + "@types/babel__core": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz", + "integrity": "sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", + "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz", + "integrity": "sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg==" + }, "@types/node": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.0.tgz", - "integrity": "sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==" + "version": "11.13.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.7.tgz", + "integrity": "sha512-suFHr6hcA9mp8vFrZTgrmqW2ZU3mbWsryQtQlY/QvwTISCw7nw/j+bCQPPohqmskhmqa5wLNuMHTTsc+xf1MQg==" }, "@types/prop-types": { "version": "15.7.1", @@ -1004,9 +1323,9 @@ "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/react": { "version": "16.8.14", @@ -1025,10 +1344,10 @@ "@types/react": "*" } }, - "@types/tapable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", - "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==" + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" }, "@types/unist": { "version": "2.0.3", @@ -1054,158 +1373,204 @@ "@types/unist": "*" } }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", - "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==" + "@types/yargs": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", + "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==" }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "@typescript-eslint/eslint-plugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.6.0.tgz", + "integrity": "sha512-U224c29E2lo861TQZs6GSmyC0OYeRNg6bE9UVIiFBxN2MlA0nq2dCrgIVyyRbC05UOcrgf2Wk/CF2gGOPQKUSQ==", "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@typescript-eslint/parser": "1.6.0", + "@typescript-eslint/typescript-estree": "1.6.0", + "requireindex": "^1.2.0", + "tsutils": "^3.7.0" + } + }, + "@typescript-eslint/parser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.6.0.tgz", + "integrity": "sha512-VB9xmSbfafI+/kI4gUK3PfrkGmrJQfh0N4EScT1gZXSZyUxpsBirPL99EWZg9MmPG0pzq/gMtgkk7/rAHj4aQw==", + "requires": { + "@typescript-eslint/typescript-estree": "1.6.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.6.0.tgz", + "integrity": "sha512-A4CanUwfaG4oXobD5y7EXbsOHjCwn8tj1RDd820etpPAjH+Icjc2K9e/DQM1Hac5zH2BSy+u6bjvvF2wwREvYA==", + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + } + } + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==" + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" }, "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==" + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==" + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "requires": { - "@xtuc/long": "4.2.1" + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==" + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" }, "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { @@ -1214,9 +1579,9 @@ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { "version": "2.0.0", @@ -1238,24 +1603,14 @@ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==" }, "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "requires": { - "acorn": "^5.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" }, "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" @@ -1326,9 +1681,9 @@ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "3.2.1", @@ -1347,19 +1702,20 @@ } }, "antd": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/antd/-/antd-3.16.3.tgz", - "integrity": "sha512-Kg/6n6IRzwslMrSOosczpxcuXiWh7mkUmmcPRmfI/E3P6oa8jR3dXtPiZViH64HxvBCIFL7FjizuVjA21MmPnQ==", + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/antd/-/antd-3.16.5.tgz", + "integrity": "sha512-7oZeEo/wkyH2NexaViI5EJp8HbCpqdonJYsEYOcS16o8QuI86PnK4HgH5dAH8/55WPG3dRO+h9YvZFLEk+uHfQ==", "requires": { + "@ant-design/create-react-context": "^0.2.4", "@ant-design/icons": "~1.2.0", "@ant-design/icons-react": "~1.1.5", + "@types/hoist-non-react-statics": "^3.3.1", "@types/react-slick": "^0.23.3", "array-tree-filter": "^2.1.0", "babel-runtime": "6.x", "classnames": "~2.2.6", "copy-to-clipboard": "^3.0.8", "create-react-class": "^15.6.3", - "create-react-context": "0.2.2", "css-animation": "^1.5.0", "dom-closest": "^0.2.0", "enquire.js": "^2.1.6", @@ -1388,7 +1744,7 @@ "rc-slider": "~8.6.5", "rc-steps": "~3.3.0", "rc-switch": "~1.9.0", - "rc-table": "~6.4.0", + "rc-table": "~6.5.0", "rc-tabs": "~9.6.0", "rc-time-picker": "~3.6.1", "rc-tooltip": "~3.7.3", @@ -1412,277 +1768,14 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } }, "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "requires": { - "default-require-extensions": "^1.0.0" + "default-require-extensions": "^2.0.0" } }, "aproba": { @@ -1708,12 +1801,9 @@ } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", @@ -1778,9 +1868,9 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "arrify": { "version": "1.0.1", @@ -1862,9 +1952,9 @@ } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, "async-limiter": { "version": "1.0.0", @@ -1890,41 +1980,16 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { - "version": "9.4.10", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.10.tgz", - "integrity": "sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", + "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", "requires": { - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000940", + "browserslist": "^4.5.4", + "caniuse-lite": "^1.0.30000957", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.14", "postcss-value-parser": "^3.3.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "aws-sign2": { @@ -1955,6 +2020,11 @@ "js-tokens": "^3.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -1977,6 +2047,14 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -1984,15 +2062,10 @@ } } }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" - }, "babel-eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", - "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.0.0", @@ -2000,6 +2073,17 @@ "@babel/types": "^7.0.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } } }, "babel-extract-comments": { @@ -2010,44 +2094,18 @@ "babylon": "^6.18.0" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - } - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, "babel-jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", - "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", - "requires": { - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-jest": "^23.2.0" + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.7.1.tgz", + "integrity": "sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg==", + "requires": { + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.6.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" } }, "babel-loader": { @@ -2061,14 +2119,6 @@ "util.promisify": "^1.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, "babel-plugin-dynamic-import-node": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", @@ -2078,34 +2128,52 @@ } }, "babel-plugin-istanbul": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", - "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.2.tgz", + "integrity": "sha512-U3ZVajC+Z69Gim7ZzmD4Wcsq76i/1hqDamBfowc1tWzWjybRy70iWfngP2ME+1CrgcgZ/+muIbPY/Yi0dxdIkQ==", "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "find-up": "^2.1.0", - "istanbul-lib-instrument": "^1.10.1", - "test-exclude": "^4.2.1" + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.2.0", + "test-exclude": "^5.2.2" } }, "babel-plugin-jest-hoist": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", - "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=" + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "requires": { + "@types/babel__traverse": "^7.0.6" + } }, "babel-plugin-macros": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.0.tgz", - "integrity": "sha512-BWw0lD0kVZAXRD3Od1kMrdmfudqzDzYv2qrN3l2ISR1HVp1EgLKfbOrYV9xmY5k3qx3RIu5uPAUZZZHpo0o5Iw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz", + "integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==", "requires": { - "cosmiconfig": "^5.0.5", - "resolve": "^1.8.1" + "@babel/runtime": "^7.4.2", + "cosmiconfig": "^5.2.0", + "resolve": "^1.10.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", + "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + } } }, "babel-plugin-named-asset-import": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.1.tgz", - "integrity": "sha512-vzZlo+yEB5YHqI6CRRTDojeT43J3Wf3C/MVkZW5UlbSeIIVUYRKtxaFT2L/VTv9mbIyatCW39+9g/SZolvwRUQ==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.2.tgz", + "integrity": "sha512-CxwvxrZ9OirpXQ201Ec57OmGhmI8/ui/GwTDy0hSp6CmRvgRC0pSair6Z04Ck+JStA0sMPZzSJ3uE4n17EXpPQ==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2127,186 +2195,51 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-jest": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", - "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", "requires": { - "babel-plugin-jest-hoist": "^23.2.0", - "babel-plugin-syntax-object-rest-spread": "^6.13.0" + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.6.0" } }, "babel-preset-react-app": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-7.0.2.tgz", - "integrity": "sha512-mwCk/u2wuiO8qQqblN5PlDa44taY0acq7hw6W+a70W522P7a9mIcdggL1fe5/LgAT7tqCq46q9wwhqaMoYKslQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-8.0.0.tgz", + "integrity": "sha512-6Dmj7e8l7eWE+R6sKKLRrGEQXMfcBqBYlphaAgT1ml8qT1NEP+CyTZyfjmgKGqHZfwH3RQCUOuP6y4mpGc7tgg==", "requires": { - "@babel/core": "7.2.2", - "@babel/plugin-proposal-class-properties": "7.3.0", - "@babel/plugin-proposal-decorators": "7.3.0", - "@babel/plugin-proposal-object-rest-spread": "7.3.2", + "@babel/core": "7.4.3", + "@babel/plugin-proposal-class-properties": "7.4.0", + "@babel/plugin-proposal-decorators": "7.4.0", + "@babel/plugin-proposal-object-rest-spread": "7.4.3", "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-classes": "7.2.2", - "@babel/plugin-transform-destructuring": "7.3.2", - "@babel/plugin-transform-flow-strip-types": "7.2.3", + "@babel/plugin-transform-classes": "7.4.3", + "@babel/plugin-transform-destructuring": "7.4.3", + "@babel/plugin-transform-flow-strip-types": "7.4.0", "@babel/plugin-transform-react-constant-elements": "7.2.0", "@babel/plugin-transform-react-display-name": "7.2.0", - "@babel/plugin-transform-runtime": "7.2.0", - "@babel/preset-env": "7.3.1", + "@babel/plugin-transform-runtime": "7.4.3", + "@babel/preset-env": "7.4.3", "@babel/preset-react": "7.0.0", - "@babel/preset-typescript": "7.1.0", - "@babel/runtime": "7.3.1", - "babel-loader": "8.0.5", + "@babel/preset-typescript": "7.3.3", + "@babel/runtime": "7.4.3", "babel-plugin-dynamic-import-node": "2.2.0", - "babel-plugin-macros": "2.5.0", + "babel-plugin-macros": "2.5.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", - "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "globals": "^11.1.0" - } - }, - "@babel/preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", - "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", - "@babel/plugin-transform-function-name": "^7.2.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", - "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" - } - }, "@babel/runtime": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", - "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", + "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.2" } }, "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - } - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, @@ -2319,72 +2252,6 @@ "regenerator-runtime": "^0.11.0" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - } - } - }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", @@ -2473,31 +2340,20 @@ "tweetnacl": "^0.14.3" } }, - "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", - "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" }, "bn.js": { "version": "4.11.8", @@ -2577,13 +2433,30 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "brorand": { @@ -2677,13 +2550,13 @@ } }, "browserslist": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", - "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.5.tgz", + "integrity": "sha512-0QFO1r/2c792Ohkit5XI8Cm8pDtZxgNl2H6HU4mHrpYz7314pEYcsAVVatM0l/YmxPnEzh9VygXouj4gkFUTKA==", "requires": { - "caniuse-lite": "^1.0.30000939", - "electron-to-chromium": "^1.3.113", - "node-releases": "^1.1.8" + "caniuse-lite": "^1.0.30000960", + "electron-to-chromium": "^1.3.124", + "node-releases": "^1.1.14" } }, "bser": { @@ -2761,26 +2634,6 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } } }, "cache-base": { @@ -2835,9 +2688,9 @@ } }, "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-api": { "version": "3.0.0", @@ -2851,16 +2704,16 @@ } }, "caniuse-lite": { - "version": "1.0.30000943", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000943.tgz", - "integrity": "sha512-nJMjU4UaesbOHTcmz6VS+qaog++Fdepg4KAya5DL/AZrL/aaAZDGOOQ0AECtsJa09r4cJBdHZMive5mw8lnQ5A==" + "version": "1.0.30000962", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000962.tgz", + "integrity": "sha512-WXYsW38HK+6eaj5IZR16Rn91TGhU3OhbwjKZvJ4HN/XBIABLKfbij9Mnd3pM0VEwZSlltWjoWg3I8FQ0DGgNOA==" }, "capture-exit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", - "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "requires": { - "rsvp": "^3.3.3" + "rsvp": "^4.8.4" } }, "case-sensitive-paths-webpack-plugin": { @@ -2893,15 +2746,10 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==" - }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -2914,58 +2762,17 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.0" + "upath": "^1.1.1" }, "dependencies": { - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", + "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -3032,11 +2839,11 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -3187,22 +2994,22 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "optional": true, "requires": { @@ -3228,12 +3035,12 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "optional": true, "requires": { @@ -3355,7 +3162,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "optional": true }, @@ -3439,46 +3246,6 @@ } } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3500,9 +3267,9 @@ } }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "cipher-base": { "version": "1.0.4", @@ -3513,11 +3280,6 @@ "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3580,21 +3342,6 @@ "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "clone-deep": { @@ -3678,12 +3425,9 @@ } }, "comma-separated-tokens": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz", - "integrity": "sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA==", - "requires": { - "trim": "0.0.1" - } + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.6.tgz", + "integrity": "sha512-f20oA7jsrrmERTS70r3tmRSxR8IJV2MTN7qe6hzgX+3ARfXrdMJFvGWvWQK0xpcBurg9j9eO2MiqzZ8Y+/UPCA==" }, "commander": { "version": "2.19.0", @@ -3700,6 +3444,11 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, + "compare-versions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", + "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==" + }, "component-classes": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", @@ -3709,9 +3458,9 @@ } }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "component-indexof": { "version": "0.0.3", @@ -3727,15 +3476,15 @@ } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, @@ -3772,9 +3521,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz", - "integrity": "sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.7.tgz", + "integrity": "sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ==" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -3858,20 +3607,42 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" }, + "core-js-compat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", + "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", + "requires": { + "browserslist": "^4.5.4", + "core-js": "3.0.1", + "core-js-pure": "3.0.1", + "semver": "^6.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", + "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" + } + } + }, + "core-js-pure": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", + "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", - "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "lodash.get": "^4.4.2", + "js-yaml": "^3.13.0", "parse-json": "^4.0.0" } }, @@ -3938,6 +3709,13 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "crypto-browserify": { @@ -3973,31 +3751,6 @@ "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", "requires": { "postcss": "^7.0.5" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-color-names": { @@ -4012,31 +3765,6 @@ "requires": { "postcss": "^7.0.1", "timsort": "^0.3.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-has-pseudo": { @@ -4048,48 +3776,46 @@ "postcss-selector-parser": "^5.0.0-rc.4" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "has-flag": "^3.0.0" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } }, "css-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", - "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", + "postcss-modules-values": "^2.0.0", "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" + "schema-utils": "^1.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } } }, "css-prefers-color-scheme": { @@ -4098,31 +3824,6 @@ "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", "requires": { "postcss": "^7.0.5" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-select": { @@ -4141,46 +3842,6 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "requires": { - "jsesc": "~0.5.0" - } - } - } - }, "css-tree": { "version": "1.0.0-alpha.28", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", @@ -4211,9 +3872,9 @@ "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { "version": "4.1.10", @@ -4224,31 +3885,6 @@ "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cssnano-preset-default": { @@ -4286,31 +3922,6 @@ "postcss-reduce-transforms": "^4.0.2", "postcss-svgo": "^4.0.2", "postcss-unique-selectors": "^4.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cssnano-util-get-arguments": { @@ -4329,31 +3940,6 @@ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cssnano-util-same-parent": { @@ -4386,9 +3972,9 @@ "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==" }, "cssstyle": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", - "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", + "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", "requires": { "cssom": "0.3.x" } @@ -4752,36 +4338,20 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } } }, "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "requires": { - "strip-bom": "^2.0.0" + "strip-bom": "^3.0.0" } }, "define-properties": { @@ -4865,11 +4435,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, @@ -4897,14 +4462,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "requires": { - "repeating": "^2.0.0" - } - }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -4939,16 +4496,16 @@ } } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, "diff-match-patch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" }, + "diff-sequences": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==" + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -4966,21 +4523,6 @@ "requires": { "arrify": "^1.0.1", "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } } }, "dns-equal": { @@ -5012,9 +4554,9 @@ "dev": true }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "requires": { "esutils": "^2.0.2" } @@ -5111,9 +4653,9 @@ } }, "dotenv": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", - "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" }, "dotenv-expand": { "version": "4.2.0", @@ -5174,9 +4716,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==" + "version": "1.3.125", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz", + "integrity": "sha512-XxowpqQxJ4nDwUXHtVtmEhRqBpm2OnjBomZmZtHD0d2Eo0244+Ojezhk3sD/MBSSe2nxCdGQFRXHIsf/LUTL9A==" }, "elliptic": { "version": "6.4.1", @@ -5293,9 +4835,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -5318,63 +4860,48 @@ } }, "eslint": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.0.tgz", - "integrity": "sha512-LntwyPxtOHrsJdcSwyQKVtHofPHdv+4+mFwEe91r2V13vqpM8yLr7b1sW+Oo/yheOPkWYsYlYJCkzlFAt8KV7g==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.9.1", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", + "espree": "^5.0.1", "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^5.0.2", + "table": "^5.2.3", "text-table": "^0.2.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "import-fresh": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", @@ -5389,13 +4916,10 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -5409,11 +4933,11 @@ } }, "eslint-config-react-app": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", - "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-4.0.0.tgz", + "integrity": "sha512-SeFxaI+0NAzWPFAI9AT+Vp9Xe2u5RCnn0JVEXkE338HgoPujc38Bc0upCJw4BWmavvIN/ODmE6EuzHoAEn3ozw==", "requires": { - "confusing-browser-globals": "^1.0.6" + "confusing-browser-globals": "^1.0.7" } }, "eslint-import-resolver-node": { @@ -5441,9 +4965,9 @@ } }, "eslint-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", - "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", + "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", "requires": { "loader-fs-cache": "^1.0.0", "loader-utils": "^1.0.2", @@ -5453,9 +4977,9 @@ } }, "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", + "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "requires": { "debug": "^2.6.8", "pkg-dir": "^2.0.0" @@ -5469,11 +4993,49 @@ "ms": "2.0.0" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -5493,20 +5055,20 @@ } }, "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", "requires": { "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.3.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.9.0" }, "dependencies": { "debug": { @@ -5526,8 +5088,16 @@ "isarray": "^1.0.0" } }, - "isarray": { - "version": "1.0.0", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, @@ -5542,11 +5112,41 @@ "strip-bom": "^3.0.0" } }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -5563,6 +5163,11 @@ "pify": "^2.0.0" } }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -5581,34 +5186,22 @@ "find-up": "^2.0.0", "read-pkg": "^2.0.0" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" } } }, "eslint-plugin-jsx-a11y": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", - "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", + "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", "requires": { "aria-query": "^3.0.0", "array-includes": "^3.0.3", "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.1", + "axobject-query": "^2.0.2", "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^6.5.1", + "emoji-regex": "^7.0.2", "has": "^1.0.3", "jsx-ast-utils": "^2.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" - } } }, "eslint-plugin-prettier": { @@ -5634,20 +5227,25 @@ "resolve": "^1.9.0" }, "dependencies": { - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { - "path-parse": "^1.0.6" + "esutils": "^2.0.2" } } } }, + "eslint-plugin-react-hooks": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.6.0.tgz", + "integrity": "sha512-lHBVRIaz5ibnIgNG07JNiAuBUeKhEf8l4etNx5vfAEwqQ5tcuK3jV9yjmopPgQDagQb7HwIuQVsE3IVcGrRnag==" + }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -5742,37 +5340,22 @@ } }, "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "requires": { - "merge": "^1.2.0" - } + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==" }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } } }, "exit": { @@ -5781,32 +5364,61 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "fill-range": "^2.1.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "expect": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", - "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.7.1.tgz", + "integrity": "sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw==", "requires": { + "@jest/types": "^24.7.0", "ansi-styles": "^3.2.0", - "jest-diff": "^23.6.0", - "jest-get-type": "^22.1.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0" + "jest-get-type": "^24.3.0", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-regex-util": "^24.3.0" } }, "express": { @@ -5906,241 +5518,34 @@ } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-descriptor": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -6151,11 +5556,6 @@ "kind-of": "^6.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -6174,71 +5574,44 @@ "kind-of": "^6.0.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "fast-json-stable-stringify": { - "version": "2.0.0", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, @@ -6247,11 +5620,6 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", @@ -6303,28 +5671,22 @@ } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "file-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", - "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", "requires": { "loader-utils": "^1.0.2", "schema-utils": "^1.0.0" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -6340,28 +5702,22 @@ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "isarray": "1.0.0" + "is-extendable": "^0.1.0" } } } @@ -6396,34 +5752,38 @@ } }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", + "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==" + }, "flatten": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", @@ -6475,9 +5835,9 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-ts-checker-webpack-plugin": { - "version": "1.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.0.0-alpha.6.tgz", - "integrity": "sha512-s/V+58nLrUjuXyzYk8AL11XG8bxIirTbafDLMn26sL59HQx8QvvsRTqOkhq4MV0coIkog1jZuH/E9Abm8zFZ2g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.0.1.tgz", + "integrity": "sha512-RrVxSiNtngsFDLQpP2QlrVaJK1zqRdwhtwslmDUWQTg3t3GW8QN7D3EpW/EAI+oqTqL0dGvLyluyYQ/eIrIHvQ==", "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", @@ -6488,266 +5848,10 @@ "tapable": "^1.0.0" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -6815,798 +5919,310 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.6.tgz", + "integrity": "sha512-vfmKZp3XPM36DNF0qhW+Cdxk7xm7gTEHY1clv1Xq1arwRQuKZgAhw+NZNWbJBtuaNxzNXwhfdPYRrvIbjfS33A==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-node-dimensions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz", + "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", + "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "minipass": "^2.2.1" + "is-extglob": "^2.1.0" } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, - "fs.realpath": { + "slash": { "version": "1.0.0", - "bundled": true, - "optional": true + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + } + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "harmony-reflect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", + "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "is-buffer": "^1.1.5" } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": 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" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "optional": true } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-node-dimensions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz", - "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==" - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "assert-plus": "^1.0.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", - "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" - }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" - }, - "handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "harmony-reflect": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hast-util-from-parse5": { @@ -7671,9 +6287,9 @@ } }, "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" }, "hoist-non-react-statics": { "version": "3.3.0", @@ -7683,20 +6299,6 @@ "react-is": "^16.7.0" } }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -7763,16 +6365,15 @@ } }, "html-webpack-plugin": { - "version": "4.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz", - "integrity": "sha512-tyvhjVpuGqD7QYHi1l1drMQTg5i+qRxpQEGbdnYFREgOKy7aFDf/ocQ/V1fuEDlQx7jV2zMap3Hj2nE9i5eGXw==", + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz", + "integrity": "sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==", "requires": { - "@types/tapable": "1.0.2", - "html-minifier": "^3.2.3", + "html-minifier": "^3.5.20", "loader-utils": "^1.1.0", - "lodash": "^4.17.10", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", + "lodash": "^4.17.11", + "pretty-error": "^2.1.1", + "tapable": "^1.1.0", "util.promisify": "1.0.0" } }, @@ -7790,9 +6391,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7833,290 +6434,14 @@ } }, "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "requires": { - "http-proxy": "^1.16.2", + "http-proxy": "^1.17.0", "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -8148,11 +6473,11 @@ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" }, "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.0.tgz", + "integrity": "sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==", "requires": { - "postcss": "^6.0.1" + "postcss": "^7.0.14" } }, "identity-obj-proxy": { @@ -8164,9 +6489,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "iferr": { "version": "0.1.5", @@ -8214,22 +6539,12 @@ } }, "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "requires": { - "pkg-dir": "^2.0.0", + "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "requires": { - "find-up": "^2.1.0" - } - } } }, "imurmurhash": { @@ -8267,9 +6582,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -8282,7 +6597,7 @@ "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { @@ -8292,9 +6607,9 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" } @@ -8302,12 +6617,12 @@ } }, "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, "invariant": { @@ -8319,9 +6634,9 @@ } }, "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, "ip": { "version": "1.1.5", @@ -8334,9 +6649,9 @@ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "is-absolute-url": { "version": "2.1.0", @@ -8375,11 +6690,11 @@ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { - "ci-info": "^1.5.0" + "ci-info": "^2.0.0" } }, "is-color-stop": { @@ -8430,36 +6745,15 @@ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -8467,22 +6761,22 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-generator-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", - "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "^2.1.1" } }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" } @@ -8526,16 +6820,6 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -8590,11 +6874,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -8648,550 +6927,998 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", - "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", - "requires": { - "async": "^2.1.4", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.1", - "istanbul-lib-hook": "^1.2.2", - "istanbul-lib-instrument": "^1.10.2", - "istanbul-lib-report": "^1.1.5", - "istanbul-lib-source-maps": "^1.2.6", - "istanbul-reports": "^1.5.1", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.5.tgz", + "integrity": "sha512-meYk1BwDp59Pfse1TvPrkKYgVqAufbdBLEVoqvu/hLLKSaQ054ZTksbNepyc223tMnWdm6AdK2URIJJRqdP87g==", + "requires": { + "async": "^2.6.1", + "compare-versions": "^3.2.1", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.4", + "istanbul-lib-hook": "^2.0.6", + "istanbul-lib-instrument": "^3.2.0", + "istanbul-lib-report": "^2.0.7", + "istanbul-lib-source-maps": "^3.0.5", + "istanbul-reports": "^2.2.3", + "js-yaml": "^3.13.0", + "make-dir": "^2.1.0", + "minimatch": "^3.0.4", "once": "^1.4.0" } }, "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-LXTBICkMARVgo579kWDm8SqfB6nvSDKNqIOBEjmJRnL04JvoMHCYGWaMddQnseJYtkEuEvO/sIcOxPLk9gERug==" }, "istanbul-lib-hook": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", - "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.6.tgz", + "integrity": "sha512-829DKONApZ7UCiPXcOYWSgkFXa4+vNYoNOt3F+4uDJLKL1OotAoVwvThoEj1i8jmOj7odbYcR3rnaHu+QroaXg==", "requires": { - "append-transform": "^0.4.0" + "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.2.0.tgz", + "integrity": "sha512-06IM3xShbNW4NgZv5AP4QH0oHqf1/ivFo8eFys0ZjPXHGldHJQWb3riYOKXqmOqfxXBfxu4B+g/iuhOPZH0RJg==", + "requires": { + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "istanbul-lib-coverage": "^2.0.4", + "semver": "^6.0.0" } }, "istanbul-lib-report": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", - "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.7.tgz", + "integrity": "sha512-wLH6beJBFbRBLiTlMOBxmb85cnVM1Vyl36N48e4e/aTKSM3WbOx7zbVIH1SQ537fhhsPbX0/C5JB4qsmyRXXyA==", "requires": { - "istanbul-lib-coverage": "^1.2.1", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "istanbul-lib-coverage": "^2.0.4", + "make-dir": "^2.1.0", + "supports-color": "^6.0.0" }, "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", - "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.5.tgz", + "integrity": "sha512-eDhZ7r6r1d1zQPVZehLc3D0K14vRba/eBYkz3rw16DLOrrTzve9RmnkcwrrkWVgO1FL3EK5knujVe5S8QHE9xw==", "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.1", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.4", + "make-dir": "^2.1.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "istanbul-reports": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", - "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.3.tgz", + "integrity": "sha512-T6EbPuc8Cb620LWAYyZ4D8SSn06dY9i1+IgUX2lTH8gbwflMc9Obd33zHTyNX653ybjpamAHS9toKS3E6cGhTw==", "requires": { - "handlebars": "^4.0.3" + "handlebars": "^4.1.0" } }, "jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", - "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz", + "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==", "requires": { - "import-local": "^1.0.0", - "jest-cli": "^23.6.0" + "import-local": "^2.0.0", + "jest-cli": "^24.7.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, "jest-cli": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", - "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.7.1.tgz", + "integrity": "sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ==", "requires": { - "ansi-escapes": "^3.0.0", + "@jest/core": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "import-local": "^1.0.0", - "is-ci": "^1.0.10", - "istanbul-api": "^1.3.1", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-source-maps": "^1.2.4", - "jest-changed-files": "^23.4.2", - "jest-config": "^23.6.0", - "jest-environment-jsdom": "^23.4.0", - "jest-get-type": "^22.1.0", - "jest-haste-map": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0", - "jest-resolve-dependencies": "^23.6.0", - "jest-runner": "^23.6.0", - "jest-runtime": "^23.6.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "jest-watcher": "^23.4.0", - "jest-worker": "^23.2.0", - "micromatch": "^2.3.11", - "node-notifier": "^5.2.1", - "prompts": "^0.1.9", - "realpath-native": "^1.0.0", - "rimraf": "^2.5.4", - "slash": "^1.0.0", - "string-length": "^2.0.0", - "strip-ansi": "^4.0.0", - "which": "^1.2.12", - "yargs": "^11.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^12.0.2" } } } }, "jest-changed-files": { - "version": "23.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", - "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.7.0.tgz", + "integrity": "sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw==", "requires": { + "@jest/types": "^24.7.0", + "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", - "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", - "requires": { - "babel-core": "^6.0.0", - "babel-jest": "^23.6.0", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.7.1.tgz", + "integrity": "sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.7.1", + "@jest/types": "^24.7.0", + "babel-jest": "^24.7.1", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^23.4.0", - "jest-environment-node": "^23.4.0", - "jest-get-type": "^22.1.0", - "jest-jasmine2": "^23.6.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "micromatch": "^2.3.11", - "pretty-format": "^23.6.0" - }, - "dependencies": { - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "jest-environment-jsdom": "^24.7.1", + "jest-environment-node": "^24.7.1", + "jest-get-type": "^24.3.0", + "jest-jasmine2": "^24.7.1", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.7.0", + "realpath-native": "^1.1.0" } }, "jest-diff": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", - "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.7.0.tgz", + "integrity": "sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg==", "requires": { "chalk": "^2.0.1", - "diff": "^3.2.0", - "jest-get-type": "^22.1.0", - "pretty-format": "^23.6.0" + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.3.0", + "pretty-format": "^24.7.0" } }, "jest-docblock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", - "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", - "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.7.1.tgz", + "integrity": "sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA==", "requires": { + "@jest/types": "^24.7.0", "chalk": "^2.0.1", - "pretty-format": "^23.6.0" + "jest-get-type": "^24.3.0", + "jest-util": "^24.7.1", + "pretty-format": "^24.7.0" } }, "jest-environment-jsdom": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", - "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", - "requires": { - "jest-mock": "^23.2.0", - "jest-util": "^23.4.0", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz", + "integrity": "sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg==", + "requires": { + "@jest/environment": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0", + "jest-util": "^24.7.1", "jsdom": "^11.5.1" } }, - "jest-environment-node": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", - "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", - "requires": { - "jest-mock": "^23.2.0", - "jest-util": "^23.4.0" - } - }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==" - }, - "jest-haste-map": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", - "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", - "requires": { - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.1.11", - "invariant": "^2.2.4", - "jest-docblock": "^23.2.0", - "jest-serializer": "^23.0.1", - "jest-worker": "^23.2.0", - "micromatch": "^2.3.11", - "sane": "^2.0.0" + "jest-environment-jsdom-fourteen": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-0.1.0.tgz", + "integrity": "sha512-4vtoRMg7jAstitRzL4nbw83VmGH8Rs13wrND3Ud2o1fczDhMUF32iIrNKwYGgeOPUdfvZU4oy8Bbv+ni1fgVCA==", + "requires": { + "jest-mock": "^24.5.0", + "jest-util": "^24.5.0", + "jsdom": "^14.0.0" + }, + "dependencies": { + "jsdom": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", + "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", + "requires": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.3", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + } + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "jest-environment-node": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.7.1.tgz", + "integrity": "sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA==", + "requires": { + "@jest/environment": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0", + "jest-util": "^24.7.1" + } + }, + "jest-get-type": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.3.0.tgz", + "integrity": "sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==" + }, + "jest-haste-map": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.7.1.tgz", + "integrity": "sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==", + "requires": { + "@jest/types": "^24.7.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.4.0", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "fsevents": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", + "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": 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" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + } } }, "jest-jasmine2": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", - "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz", + "integrity": "sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w==", "requires": { - "babel-traverse": "^6.0.0", + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^23.6.0", - "is-generator-fn": "^1.0.0", - "jest-diff": "^23.6.0", - "jest-each": "^23.6.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "pretty-format": "^23.6.0" + "expect": "^24.7.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.7.1", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "pretty-format": "^24.7.0", + "throat": "^4.0.0" } }, "jest-leak-detector": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", - "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz", + "integrity": "sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ==", "requires": { - "pretty-format": "^23.6.0" + "pretty-format": "^24.7.0" } }, "jest-matcher-utils": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", - "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz", + "integrity": "sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg==", "requires": { "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "pretty-format": "^23.6.0" + "jest-diff": "^24.7.0", + "jest-get-type": "^24.3.0", + "pretty-format": "^24.7.0" } }, "jest-message-util": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", - "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.7.1.tgz", + "integrity": "sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg==", "requires": { - "@babel/code-frame": "^7.0.0-beta.35", + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", - "micromatch": "^2.3.11", - "slash": "^1.0.0", + "micromatch": "^3.1.10", + "slash": "^2.0.0", "stack-utils": "^1.0.1" } }, "jest-mock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", - "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=" + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.7.0.tgz", + "integrity": "sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng==", + "requires": { + "@jest/types": "^24.7.0" + } }, "jest-pnp-resolver": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.2.tgz", - "integrity": "sha512-H2DvUlwdMedNGv4FOliPDnxani6ATWy70xe2eckGJgkLoMaWzRPqpSlc5ShqX0Ltk5OhRQvPQY2LLZPOpgcc7g==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==" }, "jest-regex-util": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", - "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=" + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==" }, "jest-resolve": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", - "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz", + "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==", "requires": { + "@jest/types": "^24.7.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", - "realpath-native": "^1.0.0" + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" } }, "jest-resolve-dependencies": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", - "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz", + "integrity": "sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg==", "requires": { - "jest-regex-util": "^23.3.0", - "jest-snapshot": "^23.6.0" + "@jest/types": "^24.7.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.7.1" } }, "jest-runner": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", - "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", - "requires": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.7.1.tgz", + "integrity": "sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", + "chalk": "^2.4.2", "exit": "^0.1.2", - "graceful-fs": "^4.1.11", - "jest-config": "^23.6.0", - "jest-docblock": "^23.2.0", - "jest-haste-map": "^23.6.0", - "jest-jasmine2": "^23.6.0", - "jest-leak-detector": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-runtime": "^23.6.0", - "jest-util": "^23.4.0", - "jest-worker": "^23.2.0", + "graceful-fs": "^4.1.15", + "jest-config": "^24.7.1", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.7.1", + "jest-jasmine2": "^24.7.1", + "jest-leak-detector": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-resolve": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } } }, "jest-runtime": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", - "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", - "requires": { - "babel-core": "^6.0.0", - "babel-plugin-istanbul": "^4.1.6", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.7.1.tgz", + "integrity": "sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.7.1", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/yargs": "^12.0.2", "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", "exit": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.11", - "jest-config": "^23.6.0", - "jest-haste-map": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.6.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "micromatch": "^2.3.11", - "realpath-native": "^1.0.0", - "slash": "^1.0.0", - "strip-bom": "3.0.0", - "write-file-atomic": "^2.1.0", - "yargs": "^11.0.0" - }, - "dependencies": { - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-message-util": "^24.7.1", + "jest-mock": "^24.7.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^12.0.2" } }, "jest-serializer": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", - "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=" + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==" }, "jest-snapshot": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", - "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.7.1.tgz", + "integrity": "sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA==", "requires": { - "babel-types": "^6.0.0", + "@babel/types": "^7.0.0", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", - "jest-diff": "^23.6.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-resolve": "^23.6.0", + "expect": "^24.7.1", + "jest-diff": "^24.7.0", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-resolve": "^24.7.1", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^23.6.0", + "pretty-format": "^24.7.0", "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "jest-util": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", - "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", - "requires": { - "callsites": "^2.0.0", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.7.1.tgz", + "integrity": "sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", + "callsites": "^3.0.0", "chalk": "^2.0.1", - "graceful-fs": "^4.1.11", - "is-ci": "^1.0.10", - "jest-message-util": "^23.4.0", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", "mkdirp": "^0.5.1", - "slash": "^1.0.0", + "slash": "^2.0.0", "source-map": "^0.6.0" }, "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9200,24 +7927,26 @@ } }, "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.7.0.tgz", + "integrity": "sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA==", "requires": { + "@jest/types": "^24.7.0", + "camelcase": "^5.0.0", "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", + "jest-get-type": "^24.3.0", "leven": "^2.1.0", - "pretty-format": "^23.6.0" + "pretty-format": "^24.7.0" } }, "jest-watch-typeahead": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz", - "integrity": "sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.0.tgz", + "integrity": "sha512-+uOtlppt9ysST6k6ZTqsPI0WNz2HLa8bowiZylZoQCQaAVn7XsVmHhZREkz73FhKelrFrpne4hQQjdq42nFEmA==", "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.4.1", - "jest-watcher": "^23.1.0", + "jest-watcher": "^24.3.0", "slash": "^2.0.0", "string-length": "^2.0.0", "strip-ansi": "^5.0.0" @@ -9228,15 +7957,10 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" } @@ -9244,31 +7968,46 @@ } }, "jest-watcher": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", - "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.7.1.tgz", + "integrity": "sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw==", "requires": { + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/yargs": "^12.0.9", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", + "jest-util": "^24.7.1", "string-length": "^2.0.0" } }, "jest-worker": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", - "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", "requires": { - "merge-stream": "^1.0.1" + "merge-stream": "^1.0.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "joi": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", - "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", + "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", "requires": { - "hoek": "4.x.x", + "hoek": "6.x.x", "isemail": "3.x.x", - "topo": "2.x.x" + "topo": "3.x.x" } }, "js-levenshtein": { @@ -9282,9 +8021,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9424,9 +8163,9 @@ } }, "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", + "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", "requires": { "array-includes": "^3.0.3" } @@ -9457,9 +8196,9 @@ } }, "kleur": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", - "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "last-call-webpack-plugin": { "version": "3.0.0", @@ -9476,11 +8215,11 @@ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "^2.0.0" } }, "left-pad": { @@ -9503,31 +8242,20 @@ } }, "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - } + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "loader-fs-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", "requires": { "find-cache-dir": "^0.1.1", "mkdirp": "0.5.1" @@ -9596,11 +8324,11 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, @@ -9619,11 +8347,6 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -9696,6 +8419,11 @@ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -9720,26 +8448,31 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^3.0.2" } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "requires": { - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -9751,6 +8484,11 @@ "tmpl": "1.0.x" } }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -9772,11 +8510,6 @@ "object-visit": "^1.0.0" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -9798,11 +8531,20 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "requires": { - "mimic-fn": "^1.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } } }, "memoize-one": { @@ -9819,11 +8561,6 @@ "readable-stream": "^2.0.1" } }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" - }, "merge-deep": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", @@ -9858,23 +8595,30 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } } }, "miller-rabin": { @@ -9887,21 +8631,21 @@ } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==" }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.40.0" } }, "mimic-fn": { @@ -10075,9 +8819,9 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "optional": true }, "nanomatch": { @@ -10098,16 +8842,6 @@ "to-regex": "^3.0.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -10199,6 +8933,11 @@ } } }, + "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=" + }, "node-notifier": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", @@ -10209,14 +8948,28 @@ "semver": "^5.5.0", "shellwords": "^0.1.1", "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "node-releases": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.10.tgz", - "integrity": "sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.15.tgz", + "integrity": "sha512-cKV097BQaZr8LTSRUa2+oc/aX5L8UkZtPQrMSTgiJEeaW7ymTDCoRaGCoaTqk0lqnalcoSHu4wjSl0Cmj2+bMw==", "requires": { "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + } } }, "normalize-package-data": { @@ -10230,13 +8983,10 @@ "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "requires": { - "path-parse": "^1.0.6" - } + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -10285,9 +9035,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.1.tgz", - "integrity": "sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz", + "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==" }, "oauth-sign": { "version": "0.9.0", @@ -10325,9 +9075,9 @@ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -10368,15 +9118,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -10502,19 +9243,14 @@ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -10527,30 +9263,38 @@ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "requires": { + "p-reduce": "^1.0.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "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==", "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-map": { @@ -10558,10 +9302,15 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" }, - "p-try": { + "p-reduce": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" + }, + "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==" }, "pako": { "version": "1.0.10", @@ -10587,17 +9336,17 @@ } }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "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==", "requires": { "callsites": "^3.0.0" }, "dependencies": { "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" } } }, @@ -10614,17 +9363,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -10640,9 +9378,9 @@ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "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", @@ -10693,13 +9431,11 @@ } }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "pify": "^3.0.0" } }, "pbkdf2": { @@ -10720,9 +9456,9 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "pinkie": { "version": "2.0.4", @@ -10737,67 +9473,70 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "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==", "requires": { "find-up": "^3.0.0" + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" }, "dependencies": { "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "^2.0.0" + "p-try": "^1.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==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "requires": { - "find-up": "^2.1.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + } } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -10847,19 +9586,27 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^6.1.0" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -10872,31 +9619,31 @@ "postcss-selector-parser": "^5.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "has-flag": "^3.0.0" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } }, + "postcss-browser-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-2.0.0.tgz", + "integrity": "sha512-xGG0UvoxwBc4Yx4JX3gc0RuDl1kc4bVihCzzk6UC72YPfq5fu3c717Nu8Un3nvnq1BJ31gBnFXIG/OaUTnpHgA==", + "requires": { + "postcss": "^7.0.2" + } + }, "postcss-calc": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", @@ -10908,27 +9655,19 @@ "postcss-value-parser": "^3.3.1" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "has-flag": "^3.0.0" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -10940,31 +9679,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-gray": { @@ -10975,65 +9689,15 @@ "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.5", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-hex-alpha": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.2.tgz", - "integrity": "sha512-8bIOzQMGdZVifoBQUJdw+yIY00omBd2EwkJXepQo9cjp1UOHHHoeRDeSzTP6vakEpaRc6GAIOfvcQR7jBYaG5Q==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" } }, "postcss-color-mod-function": { @@ -11044,31 +9708,6 @@ "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-rebeccapurple": { @@ -11078,31 +9717,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-colormin": { @@ -11115,132 +9729,32 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-convert-values": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-custom-media": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.7.tgz", - "integrity": "sha512-bWPCdZKdH60wKOTG4HKEgxWnZVjAIVNOJDvi3lkuTa90xo/K0YHa2ZnlKLC5e2qF8qCcMQXt0yzQITBp8d0OFA==", - "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-custom-properties": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.9.tgz", - "integrity": "sha512-/Lbn5GP2JkKhgUO2elMs4NnbUJcvHX4AaF5nuJDaNkd2chYW1KA5qtOGGgdkBEWcXtKSQfHXzT7C6grEVyb13w==", - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-custom-properties": { + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.10.tgz", + "integrity": "sha512-GDL0dyd7++goDR4SSasYdRNNvp4Gqy1XMzcCnTijiph7VB27XXpJ8bW/AI0i2VSBZ55TpdGhMr37kMSpRfYD0Q==", + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" } }, "postcss-custom-selectors": { @@ -11252,27 +9766,19 @@ "postcss-selector-parser": "^5.0.0-rc.3" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "has-flag": "^3.0.0" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -11286,27 +9792,19 @@ "postcss-selector-parser": "^5.0.0-rc.3" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "has-flag": "^3.0.0" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -11317,31 +9815,6 @@ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-discard-duplicates": { @@ -11350,31 +9823,6 @@ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-discard-empty": { @@ -11383,31 +9831,6 @@ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-discard-overridden": { @@ -11416,31 +9839,6 @@ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-double-position-gradients": { @@ -11450,31 +9848,6 @@ "requires": { "postcss": "^7.0.5", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-env-function": { @@ -11484,31 +9857,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-flexbugs-fixes": { @@ -11517,31 +9865,6 @@ "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-focus-visible": { @@ -11550,97 +9873,22 @@ "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-focus-within": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "requires": { + "postcss": "^7.0.2" } }, "postcss-gap-properties": { @@ -11649,31 +9897,6 @@ "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-image-set-function": { @@ -11683,31 +9906,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-initial": { @@ -11717,31 +9915,6 @@ "requires": { "lodash.template": "^4.2.4", "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-lab-function": { @@ -11752,31 +9925,6 @@ "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-load-config": { @@ -11810,31 +9958,6 @@ "postcss": "^7.0.0", "postcss-load-config": "^2.0.0", "schema-utils": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-logical": { @@ -11843,31 +9966,6 @@ "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-media-minmax": { @@ -11876,31 +9974,6 @@ "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-merge-longhand": { @@ -11912,31 +9985,6 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-merge-rules": { @@ -11952,16 +10000,6 @@ "vendors": "^1.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", @@ -11971,19 +10009,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -11994,31 +10019,6 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-minify-gradients": { @@ -12030,31 +10030,6 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-minify-params": { @@ -12068,31 +10043,6 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-minify-selectors": { @@ -12106,74 +10056,52 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } }, "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "requires": { - "postcss": "^6.0.1" + "postcss": "^7.0.5" } }, "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", + "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^3.3.1" } }, "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", + "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" } }, "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", + "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", "requires": { "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "postcss": "^7.0.6" } }, "postcss-nesting": { @@ -12182,31 +10110,17 @@ "integrity": "sha512-WSsbVd5Ampi3Y0nk/SKr5+K34n52PqMqEfswu6RtU4r7wA8vSD+gM8/D9qq4aJkHImwn1+9iEFTbjoWsQeqtaQ==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + } + }, + "postcss-normalize": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-7.0.1.tgz", + "integrity": "sha512-NOp1fwrG+6kVXWo7P9SizCHX6QvioxFD/hZcI2MLxPmVnFJFC0j0DDpIuNw2tUDeCFMni59gCVgeJ1/hYhj2OQ==", + "requires": { + "@csstools/normalize.css": "^9.0.1", + "browserslist": "^4.1.1", + "postcss": "^7.0.2", + "postcss-browser-comments": "^2.0.0" } }, "postcss-normalize-charset": { @@ -12215,31 +10129,6 @@ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-display-values": { @@ -12250,31 +10139,6 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-positions": { @@ -12286,31 +10150,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-repeat-style": { @@ -12322,31 +10161,6 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-string": { @@ -12357,31 +10171,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-timing-functions": { @@ -12392,31 +10181,6 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-unicode": { @@ -12427,31 +10191,6 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-url": { @@ -12463,31 +10202,6 @@ "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-whitespace": { @@ -12497,31 +10211,6 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-ordered-values": { @@ -12532,64 +10221,14 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "^7.0.2" } }, "postcss-page-break": { @@ -12598,31 +10237,6 @@ "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-place": { @@ -12632,47 +10246,22 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-preset-env": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.5.0.tgz", - "integrity": "sha512-RdsIrYJd9p9AouQoJ8dFP5ksBJEIegA4q4WzJDih8nevz3cZyIP/q1Eaw3pTVpUAu3n7Y32YmvAW3X07mSRGkw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.6.0.tgz", + "integrity": "sha512-I3zAiycfqXpPIFD6HXhLfWXIewAWO8emOKz+QSsxaUZb9Dp8HbF5kUf+4Wy/AxR33o+LRoO8blEWCHth0ZsCLA==", "requires": { - "autoprefixer": "^9.4.2", - "browserslist": "^4.3.5", - "caniuse-lite": "^1.0.30000918", + "autoprefixer": "^9.4.9", + "browserslist": "^4.4.2", + "caniuse-lite": "^1.0.30000939", "css-blank-pseudo": "^0.1.4", "css-has-pseudo": "^0.10.0", "css-prefers-color-scheme": "^3.1.1", "cssdb": "^4.3.0", - "postcss": "^7.0.6", - "postcss-attribute-case-insensitive": "^4.0.0", + "postcss": "^7.0.14", + "postcss-attribute-case-insensitive": "^4.0.1", "postcss-color-functional-notation": "^2.0.1", "postcss-color-gray": "^5.0.0", "postcss-color-hex-alpha": "^5.0.2", @@ -12701,31 +10290,6 @@ "postcss-replace-overflow-wrap": "^3.0.0", "postcss-selector-matches": "^4.0.0", "postcss-selector-not": "^4.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-pseudo-class-any-link": { @@ -12737,27 +10301,19 @@ "postcss-selector-parser": "^5.0.0-rc.3" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "has-flag": "^3.0.0" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -12771,31 +10327,6 @@ "caniuse-api": "^3.0.0", "has": "^1.0.0", "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-reduce-transforms": { @@ -12807,31 +10338,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-replace-overflow-wrap": { @@ -12840,31 +10346,6 @@ "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-safe-parser": { @@ -12873,31 +10354,6 @@ "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-selector-matches": { @@ -12907,31 +10363,6 @@ "requires": { "balanced-match": "^1.0.0", "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-selector-not": { @@ -12941,48 +10372,16 @@ "requires": { "balanced-match": "^1.0.0", "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "requires": { - "cssesc": "^2.0.0", + "cssesc": "^3.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - } } }, "postcss-svgo": { @@ -12994,66 +10393,16 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-unique-selectors": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -13076,11 +10425,6 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, "prettier": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.0.tgz", @@ -13096,9 +10440,9 @@ } }, "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", + "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==" }, "pretty-error": { "version": "2.1.1", @@ -13110,18 +10454,20 @@ } }, "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" + "@jest/types": "^24.7.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" } } }, @@ -13159,12 +10505,12 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", - "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", + "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", "requires": { - "kleur": "^2.0.1", - "sisteransi": "^0.1.1" + "kleur": "^3.0.2", + "sisteransi": "^1.0.0" } }, "prop-types": { @@ -13186,12 +10532,12 @@ } }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -13199,11 +10545,6 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", @@ -13278,9 +10619,9 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" }, "raf": { "version": "3.4.1", @@ -13290,28 +10631,6 @@ "performance-now": "^2.1.0" } }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -13644,9 +10963,9 @@ } }, "rc-table": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-6.4.5.tgz", - "integrity": "sha512-W/Fo8jWxwnHBNRaZDoot0VEKmN30N/C7PVTdyep5Tmz24mdn5MbW/+T+WdAjtzgBKl+mopn8m+cTn84bYAZUTQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-6.5.0.tgz", + "integrity": "sha512-UXsoTcJIr5Ehyf1GXAKLcc5x0/+cOSgBaKL7wt6vmVEIW5CF6bVJj4iOr7P8LGdoez/omoHmr5GXcW6/AZxR7A==", "requires": { "babel-runtime": "6.x", "classnames": "^2.2.5", @@ -13875,21 +11194,22 @@ } }, "react-app-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.2.tgz", - "integrity": "sha512-mAYn96B/nB6kWG87Ry70F4D4rsycU43VYTj3ZCbKP+SLJXwC0x6YCbwcICh3uW8/C9s1VgP197yx+w7SCWeDdQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.0.tgz", + "integrity": "sha512-fbZxEZdfx+rVENMvGTFjUcDDOZGKHaiavA8Y+FwM2I/o8gJT6pCYZk19XfeOntVzGZH2F1qqH7SLjXMhUM+YJw==", "requires": { - "core-js": "2.6.4", + "core-js": "3.0.1", "object-assign": "4.1.1", "promise": "8.0.2", "raf": "3.4.1", + "regenerator-runtime": "0.13.2", "whatwg-fetch": "3.0.0" }, "dependencies": { "core-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", - "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", + "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" }, "promise": { "version": "8.0.2", @@ -13899,10 +11219,10 @@ "asap": "~2.0.6" } }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, @@ -13916,34 +11236,34 @@ } }, "react-dev-utils": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-8.0.0.tgz", - "integrity": "sha512-TK8cj7eghvxfe7bfBluLGpI/upo4EXC+G74hYmPucAG8C2XcbT+vKnlWPwLnABb75Zk+mR6D556Da+yvDjljrw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.0.tgz", + "integrity": "sha512-HXvxOnABzIQH804ros5dBFryw4x0FU7Tl5KU2xg71jKx0EDsJYK0LuVVdj9qoLIgD1pmjzpjl7q7pjwXKIe37A==", "requires": { "@babel/code-frame": "7.0.0", "address": "1.0.3", - "browserslist": "4.4.1", + "browserslist": "4.5.4", "chalk": "2.4.2", "cross-spawn": "6.0.5", "detect-port-alt": "1.1.6", "escape-string-regexp": "1.0.5", "filesize": "3.6.1", "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.0.0-alpha.6", + "fork-ts-checker-webpack-plugin": "1.0.1", "global-modules": "2.0.0", "globby": "8.0.2", "gzip-size": "5.0.0", "immer": "1.10.0", - "inquirer": "6.2.1", + "inquirer": "6.2.2", "is-root": "2.0.0", "loader-utils": "1.2.3", "opn": "5.4.0", "pkg-up": "2.0.0", - "react-error-overlay": "^5.1.4", + "react-error-overlay": "^5.1.5", "recursive-readdir": "2.2.2", "shell-quote": "1.6.1", "sockjs-client": "1.3.0", - "strip-ansi": "5.0.0", + "strip-ansi": "5.2.0", "text-table": "0.2.0" }, "dependencies": { @@ -13953,79 +11273,41 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", - "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.4.tgz", + "integrity": "sha512-rAjx494LMjqKnMPhFkuLmLp8JWEX0o8ADTGeAbOqaF+XCvYLreZrG5uVjnPBlAQ8REZK4pzXGvp0bWgrFtKaag==", "requires": { - "locate-path": "^3.0.0" + "caniuse-lite": "^1.0.30000955", + "electron-to-chromium": "^1.3.122", + "node-releases": "^1.1.13" } }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "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==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" - }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" } } } @@ -14051,9 +11333,9 @@ } }, "react-error-overlay": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.4.tgz", - "integrity": "sha512-fp+U98OMZcnduQ+NSEiQa4s/XMsbp+5KlydmkbESOw4P69iWZ68ZMFM5a2BuE0FgqPBKApJyRuYHR95jM8lAmg==" + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.5.tgz", + "integrity": "sha512-O9JRum1Zq/qCPFH5qVEvDDrVun8Jv9vbHtZXCR1EuRj9sKg1xJTlHxBzU6AkCzpvxRLuiY4OKImy3cDLQ+UTdg==" }, "react-is": { "version": "16.8.4", @@ -14144,67 +11426,61 @@ } }, "react-scripts": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.1.8.tgz", - "integrity": "sha512-mDC8fYWCyuB9VROti8OCPdHE79UEchVVZmuS/yaIs47VkvZpgZqUvzghYBswZRchqnW0aARNY8xXrzoFRhhK7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.0.tgz", + "integrity": "sha512-F4HegoBuUKZvEzXYksQu05Y6vJqallhHkQUEL6M7OQ5rYLBQC/4MTK6km9ZZvEK9TqMy1XA8SSEJGJgTEr6bSQ==", "requires": { - "@babel/core": "7.2.2", + "@babel/core": "7.4.3", "@svgr/webpack": "4.1.0", - "babel-core": "7.0.0-bridge.0", - "babel-eslint": "9.0.0", - "babel-jest": "23.6.0", + "@typescript-eslint/eslint-plugin": "1.6.0", + "@typescript-eslint/parser": "1.6.0", + "babel-eslint": "10.0.1", + "babel-jest": "24.7.1", "babel-loader": "8.0.5", - "babel-plugin-named-asset-import": "^0.3.1", - "babel-preset-react-app": "^7.0.2", - "bfj": "6.1.1", + "babel-plugin-named-asset-import": "^0.3.2", + "babel-preset-react-app": "^8.0.0", "case-sensitive-paths-webpack-plugin": "2.2.0", - "css-loader": "1.0.0", - "dotenv": "6.0.0", + "css-loader": "2.1.1", + "dotenv": "6.2.0", "dotenv-expand": "4.2.0", - "eslint": "5.12.0", - "eslint-config-react-app": "^3.0.8", - "eslint-loader": "2.1.1", + "eslint": "^5.16.0", + "eslint-config-react-app": "^4.0.0", + "eslint-loader": "2.1.2", "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "2.14.0", - "eslint-plugin-jsx-a11y": "6.1.2", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", "eslint-plugin-react": "7.12.4", - "file-loader": "2.0.0", + "eslint-plugin-react-hooks": "^1.5.0", + "file-loader": "3.0.1", "fs-extra": "7.0.1", - "fsevents": "1.2.4", - "html-webpack-plugin": "4.0.0-alpha.2", + "fsevents": "2.0.6", + "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", - "jest": "23.6.0", - "jest-pnp-resolver": "1.0.2", - "jest-resolve": "23.6.0", - "jest-watch-typeahead": "^0.2.1", + "is-wsl": "^1.1.0", + "jest": "24.7.1", + "jest-environment-jsdom-fourteen": "0.1.0", + "jest-resolve": "24.7.1", + "jest-watch-typeahead": "0.3.0", "mini-css-extract-plugin": "0.5.0", "optimize-css-assets-webpack-plugin": "5.0.1", "pnp-webpack-plugin": "1.2.1", "postcss-flexbugs-fixes": "4.1.0", "postcss-loader": "3.0.0", - "postcss-preset-env": "6.5.0", + "postcss-normalize": "7.0.1", + "postcss-preset-env": "6.6.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^0.2.2", - "react-dev-utils": "^8.0.0", + "react-app-polyfill": "^1.0.0", + "react-dev-utils": "^9.0.0", "resolve": "1.10.0", "sass-loader": "7.1.0", + "semver": "6.0.0", "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.2", + "terser-webpack-plugin": "1.2.3", "url-loader": "1.1.2", - "webpack": "4.28.3", - "webpack-dev-server": "3.1.14", + "webpack": "4.29.6", + "webpack-dev-server": "3.2.1", "webpack-manifest-plugin": "2.0.4", - "workbox-webpack-plugin": "3.6.3" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "requires": { - "path-parse": "^1.0.6" - } - } + "workbox-webpack-plugin": "4.2.0" } }, "react-slick": { @@ -14261,41 +11537,22 @@ } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "requires": { - "load-json-file": "^1.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, "readable-stream": { @@ -14327,269 +11584,6 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } }, "realpath-native": { @@ -14614,9 +11608,9 @@ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerate-unicode-properties": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.1.tgz", - "integrity": "sha512-HTjMafphaH5d5QDHuwW8Me6Hbc/GhXg8luNqTkPVwZ/oCZhnoifjWhGYsu2BzepMELTlbnoVcXvV0f+2uDDvoQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", "requires": { "regenerate": "^1.4.0" } @@ -14634,14 +11628,6 @@ "private": "^0.1.6" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -14662,12 +11648,12 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "regexpu-core": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.3.tgz", - "integrity": "sha512-LON8666bTAlViVEPXMv65ZqiaR3rMNLz36PIaQ7D+er5snu93k0peR7FSvO0QteYbZ3GOkvfHKbGr/B1xDu9FA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.1", + "regenerate-unicode-properties": "^8.0.2", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -14726,6 +11712,11 @@ "utila": "^0.4.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -14742,8 +11733,16 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" } } } @@ -14758,14 +11757,6 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -14843,9 +11834,14 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==" }, "requires-port": { "version": "1.0.0", @@ -14858,11 +11854,11 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-cwd": { @@ -14939,9 +11935,9 @@ } }, "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", + "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==" }, "run-async": { "version": "2.3.0", @@ -14991,282 +11987,19 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sane": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", - "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "requires": { + "@cnakazawa/watch": "^1.0.3", "anymatch": "^2.0.0", - "capture-exit": "^1.2.0", - "exec-sh": "^0.2.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", "fb-watchman": "^2.0.0", - "fsevents": "^1.2.3", "micromatch": "^3.1.4", "minimist": "^1.1.1", - "walker": "~1.0.5", - "watch": "~0.18.0" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "walker": "~1.0.5" } }, "sass-loader": { @@ -15306,10 +12039,10 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "shallow-clone": { "version": "1.0.0", @@ -15335,6 +12068,14 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "saxes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.9.tgz", + "integrity": "sha512-FZeKhJglhJHk7eWG5YM0z46VHmI3KJpMBAQm3xa9meDvd+wevB5GuBB0wc0exPInZiBBHqi00DbS8AcvCGCFMw==", + "requires": { + "xmlchars": "^1.3.1" + } + }, "scheduler": { "version": "0.13.6", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", @@ -15368,9 +12109,9 @@ } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" }, "send": { "version": "0.16.2", @@ -15413,9 +12154,9 @@ } }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==" }, "serve-index": { "version": "1.9.1", @@ -15593,14 +12334,14 @@ } }, "sisteransi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", - "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", + "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==" }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, "slice-ansi": { "version": "2.1.0", @@ -15810,11 +12551,19 @@ } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "requires": { - "source-map": "^0.5.6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "source-map-url": { @@ -15823,12 +12572,9 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "space-separated-tokens": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz", - "integrity": "sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA==", - "requires": { - "trim": "0.0.1" - } + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.3.tgz", + "integrity": "sha512-/M5RAdBuQlSDPNfA5ube+fkHbHyY08pMuADLmsAQURzo56w90r681oiOoz3o3ZQyWdSeNucpTFjL+Ggd5qui3w==" }, "spdx-correct": { "version": "3.1.0", @@ -15854,9 +12600,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "spdy": { "version": "4.0.0", @@ -15884,9 +12630,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16026,21 +12772,6 @@ "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "string-width": { @@ -16050,21 +12781,6 @@ "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "string_decoder": { @@ -16086,20 +12802,17 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "^0.2.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-comments": { "version": "1.0.2", @@ -16139,16 +12852,6 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", @@ -16158,19 +12861,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -16183,9 +12873,9 @@ } }, "svgo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", - "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", @@ -16194,7 +12884,7 @@ "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", "sax": "~1.2.4", @@ -16235,9 +12925,9 @@ } }, "strip-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", - "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" } @@ -16250,14 +12940,14 @@ "integrity": "sha512-n5zIZ8i8kZ8vz05vX1BdvkP8b9ufsMeSRmdqTuUtz5rlNxr03nntiZMc/HTADIsPYZj/wZJDJglxV0/yvvaiZA==" }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "taucharts": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.1.tgz", - "integrity": "sha512-RQvAqFTQ8T5X0BH2u/xmZkiiK6ttyAugFiMWAHrQeZx7ddVOQmZMRg8crxNxjzKaqhi3tOhG6rfL360xprgjsw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.2.tgz", + "integrity": "sha512-oLO6SpQSfHTwinaLVManGmg+FzyipeFyXamfY2A7QpiFcOWzAxMvBnQM4ecnPgieBkq0r8mbuBPwJe1xmLo/IQ==", "requires": { "d3-array": "^1.2.1", "d3-axis": "^1.0.12", @@ -16298,22 +12988,13 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } } } }, "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "requires": { "cacache": "^11.0.2", "find-cache-dir": "^2.0.0", @@ -16333,15 +13014,14 @@ } }, "test-exclude": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", - "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.2.tgz", + "integrity": "sha512-N2pvaLpT8guUpb5Fe1GJlmvmzH3x+DAKmmyEQmFP792QcLYoGE1syxztSvPD1V8yPe6VrcCt6YGQVjSRjCASsA==", "requires": { - "arrify": "^1.0.1", - "micromatch": "^2.3.11", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" } }, "text-table": { @@ -16450,16 +13130,6 @@ "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } } }, "toggle-selection": { @@ -16468,11 +13138,11 @@ "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", "requires": { - "hoek": "4.x.x" + "hoek": "6.x.x" } }, "topojson-client": { @@ -16500,11 +13170,6 @@ "punycode": "^2.1.0" } }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -16515,21 +13180,24 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==" }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, "ts-pnp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.0.1.tgz", - "integrity": "sha512-Zzg9XH0anaqhNSlDRibNC8Kp+B9KNM0uRIpLpGkGyrgRIttA7zZBhotTSEoEyuDrz3QW2LGtu2dxuk34HzIGnQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz", + "integrity": "sha512-f5Knjh7XCyRIzoC/z1Su1yLLRrPrFCgtUAh/9fCSP6NKbATwpOL1+idQVXQokK9GRFURn/jYPGPfegIctwunoA==" }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, + "tsutils": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.10.0.tgz", + "integrity": "sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q==", + "requires": { + "tslib": "^1.8.1" + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -16576,19 +13244,14 @@ "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "requires": { - "commander": "~2.17.1", + "commander": "~2.19.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16633,6 +13296,19 @@ "trough": "^1.0.0", "vfile": "^3.0.0", "x-is-string": "^0.1.0" + }, + "dependencies": { + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + } } }, "union-value": { @@ -16760,9 +13436,9 @@ } }, "upath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.1.tgz", - "integrity": "sha512-D0yetkpIOKiZQquxjM2Syvy48Y1DbZ0SWxgsZiwd9GCWRpc75vN8ytzem14WDSg+oiX6+Qt31FpiS/ExODCrLg==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" }, "upper-case": { "version": "1.1.3", @@ -16809,9 +13485,9 @@ } }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", + "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", "requires": { "querystringify": "^2.0.0", "requires-port": "^1.0.0" @@ -16890,442 +13566,184 @@ "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "requires": { - "indexof": "0.0.1" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "requires": { - "makeerror": "1.0.x" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watch": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", - "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", - "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - } - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.2.tgz", - "integrity": "sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==" - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.3.tgz", - "integrity": "sha512-vLZN9k5I7Nr/XB1IDG9GbZB4yQd1sPuvufMFgJkx0b31fi2LD97KQIjwjxE7xytdruAYfu5S0FLBLjdxmwGJCg==", - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.0.tgz", + "integrity": "sha512-WMNeHy5djSl895BqE86D7WqA0Ie5fAIeGCa7V1EqiXyJg5LaGch2SUaZueok5abYQGH6mXEAsZ45jkoILIOlyA==", + "requires": { + "@types/unist": "^2.0.2", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.0.tgz", + "integrity": "sha512-Uz5negUTrf9zm2ZT2Z9kdOL7Mr7FJLyq3ByqagUi7QZRVK1HnspVazvSqwHt73jj7APHtpuJ4K110Jm8O6/elw==", "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" + "@types/unist": "^2.0.2" } }, - "ms": { + "vfile-message": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.0.tgz", + "integrity": "sha512-YS6qg6UpBfIeiO+6XlhPOuJaoLvt1Y9g2cmlwqhBOOU0XRV8j5RLeoz72t6PWLvNXq3EBG1fQ05wNPrUoz0deQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "@types/unist": "^2.0.2", + "unist-util-stringify-position": "^1.1.1" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + } } } } }, - "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.2.tgz", + "integrity": "sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==" + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "4.29.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", + "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + } + }, + "webpack-dev-middleware": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz", + "integrity": "sha512-A47I5SX60IkHrMmZUlB0ZKSWi29TZTcPz7cha1Z75yYOsgWh/1AcPmQEbC8ZIbU3A1ytSv1PMU0PyPz2Lmz2jg==", + "requires": { + "memory-fs": "^0.4.1", "mime": "^2.3.1", "range-parser": "^1.0.3", "webpack-log": "^2.0.0" } }, "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz", + "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==", "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", "chokidar": "^2.0.0", "compression": "^1.5.2", "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", + "debug": "^4.1.1", "del": "^3.0.0", "express": "^4.16.2", "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", + "http-proxy-middleware": "^0.19.1", "import-local": "^2.0.0", - "internal-ip": "^3.0.1", + "internal-ip": "^4.2.0", "ip": "^1.1.5", "killable": "^1.0.0", "loglevel": "^1.4.1", @@ -17339,26 +13757,23 @@ "sockjs-client": "1.3.0", "spdy": "^4.0.0", "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", + "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "3.4.0", + "webpack-dev-middleware": "^3.5.1", "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, "decamelize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", @@ -17367,108 +13782,32 @@ "xregexp": "4.0.0" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "p-try": "^2.0.0" + "ansi-regex": "^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==", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "p-limit": "^2.0.0" + "has-flag": "^3.0.0" } }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" - }, "yargs": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", @@ -17594,50 +13933,59 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "workbox-background-sync": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz", - "integrity": "sha512-ypLo0B6dces4gSpaslmDg5wuoUWrHHVJfFWwl1udvSylLdXvnrfhFfriCS42SNEe5lsZtcNZF27W/SMzBlva7Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.0.tgz", + "integrity": "sha512-rmDqz1k2mnG8wj68rBapoFP3iCKmdPeTdD0/GLtErDcaQsKnGlsFmjjJ7OuQbuBa+W0FfVWCE+s3VwqL0D/+DA==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, - "workbox-broadcast-cache-update": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz", - "integrity": "sha512-pJl4lbClQcvp0SyTiEw0zLSsVYE1RDlCPtpKnpMjxFtu8lCFTAEuVyzxp9w7GF4/b3P4h5nyQ+q7V9mIR7YzGg==", + "workbox-broadcast-update": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.0.tgz", + "integrity": "sha512-YYdz+8FAVdy1ZTsXpapWyd5t2nH7KdBIQ9rFlsRMSGFS7LzcKfZy8Tka1W8byMNM1II5cxlFr7f6+3vLahzrCg==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-build": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.6.3.tgz", - "integrity": "sha512-w0clZ/pVjL8VXy6GfthefxpEXs0T8uiRuopZSFVQ8ovfbH6c6kUpEh6DcYwm/Y6dyWPiCucdyAZotgjz+nRz8g==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.0.tgz", + "integrity": "sha512-D2fQa2Isp/BboJ8edYmvsTCrBrPWwVCYa7zMDysLViIaGVQTFMgazRXx8wZ2gZKud13M0maUR5Ln4wS5UiqAIA==", "requires": { - "babel-runtime": "^6.26.0", - "common-tags": "^1.4.0", + "@babel/runtime": "^7.3.4", + "common-tags": "^1.8.0", "fs-extra": "^4.0.2", - "glob": "^7.1.2", - "joi": "^11.1.1", + "glob": "^7.1.3", + "joi": "^14.3.1", "lodash.template": "^4.4.0", - "pretty-bytes": "^4.0.2", - "stringify-object": "^3.2.2", + "pretty-bytes": "^5.1.0", + "stringify-object": "^3.3.0", "strip-comments": "^1.0.2", - "workbox-background-sync": "^3.6.3", - "workbox-broadcast-cache-update": "^3.6.3", - "workbox-cache-expiration": "^3.6.3", - "workbox-cacheable-response": "^3.6.3", - "workbox-core": "^3.6.3", - "workbox-google-analytics": "^3.6.3", - "workbox-navigation-preload": "^3.6.3", - "workbox-precaching": "^3.6.3", - "workbox-range-requests": "^3.6.3", - "workbox-routing": "^3.6.3", - "workbox-strategies": "^3.6.3", - "workbox-streams": "^3.6.3", - "workbox-sw": "^3.6.3" + "workbox-background-sync": "^4.3.0", + "workbox-broadcast-update": "^4.3.0", + "workbox-cacheable-response": "^4.3.0", + "workbox-core": "^4.3.0", + "workbox-expiration": "^4.3.0", + "workbox-google-analytics": "^4.3.0", + "workbox-navigation-preload": "^4.3.0", + "workbox-precaching": "^4.3.0", + "workbox-range-requests": "^4.3.0", + "workbox-routing": "^4.3.0", + "workbox-strategies": "^4.3.0", + "workbox-streams": "^4.3.0", + "workbox-sw": "^4.3.0", + "workbox-window": "^4.3.0" }, "dependencies": { + "@babel/runtime": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", + "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -17647,102 +13995,115 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, - "workbox-cache-expiration": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz", - "integrity": "sha512-+ECNph/6doYx89oopO/UolYdDmQtGUgo8KCgluwBF/RieyA1ZOFKfrSiNjztxOrGJoyBB7raTIOlEEwZ1LaHoA==", - "requires": { - "workbox-core": "^3.6.3" - } - }, "workbox-cacheable-response": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz", - "integrity": "sha512-QpmbGA9SLcA7fklBLm06C4zFg577Dt8u3QgLM0eMnnbaVv3rhm4vbmDpBkyTqvgK/Ly8MBDQzlXDtUCswQwqqg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.0.tgz", + "integrity": "sha512-GlnPS1WtEoPNFVPVW1Ss0CrNPlhB7FpMTh2XwpqdJKq7K/aDI8LKdFpRcZBZ2pfRpOf8b6AjAiDZr0hrJ9EFtQ==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz", - "integrity": "sha512-cx9cx0nscPkIWs8Pt98HGrS9/aORuUcSkWjG25GqNWdvD/pSe7/5Oh3BKs0fC+rUshCiyLbxW54q0hA+GqZeSQ==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.0.tgz", + "integrity": "sha512-k5j6yfyznkK7zHiYLbCsrJfYWUcJ9ZnFFzI4KSbr7D43rWwQkusHsPmOG3OT1YZseACtLRSnUUzb+Cg2arVXtw==" + }, + "workbox-expiration": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.0.tgz", + "integrity": "sha512-mcTWxsBHVkDBlIXOZ9uT3m0bAc7OJ3NTj1pTjWzwVZ6sqvT1I88ewIyppv44GO9JqnwE87lODpdEUIKp9V4lNA==", + "requires": { + "workbox-core": "^4.3.0" + } }, "workbox-google-analytics": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz", - "integrity": "sha512-RQBUo/6SXtIaQTRFj4RQZ9e1gAl7D8oS5S+Hi173Kk70/BgJjzPwXpC5A249Jv5YfkCOLMQCeF9A27BiD0b0ig==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.0.tgz", + "integrity": "sha512-itAfcN/rVNf5WqAMW5/OA/pMkFxZjYuk2ZmOCIuy0fFJeQ4F0PfD3Y1DzX1JrKHPMIPeXvvZiAGY8+HRuJjy7w==", "requires": { - "workbox-background-sync": "^3.6.3", - "workbox-core": "^3.6.3", - "workbox-routing": "^3.6.3", - "workbox-strategies": "^3.6.3" + "workbox-background-sync": "^4.3.0", + "workbox-core": "^4.3.0", + "workbox-routing": "^4.3.0", + "workbox-strategies": "^4.3.0" } }, "workbox-navigation-preload": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz", - "integrity": "sha512-dd26xTX16DUu0i+MhqZK/jQXgfIitu0yATM4jhRXEmpMqQ4MxEeNvl2CgjDMOHBnCVMax+CFZQWwxMx/X/PqCw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.0.tgz", + "integrity": "sha512-1RoaOZD8mMTPjvTNG/FWSQZmfTlTP5FC7c6ZwKWWGoULcxPCmiqI8uWOnMg1/S+eAjYTtNfToW2pfvK4zi5ihA==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-precaching": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.3.tgz", - "integrity": "sha512-aBqT66BuMFviPTW6IpccZZHzpA8xzvZU2OM1AdhmSlYDXOJyb1+Z6blVD7z2Q8VNtV1UVwQIdImIX+hH3C3PIw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.0.tgz", + "integrity": "sha512-wEsF7+I1opRbyJysYWtn8c1liHqA3bvtaTk4FohE3ViZfn2MIEzORuk7G1kEBZEdJnGf7QcfVJ2tNFYv72yQZQ==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-range-requests": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz", - "integrity": "sha512-R+yLWQy7D9aRF9yJ3QzwYnGFnGDhMUij4jVBUVtkl67oaVoP1ymZ81AfCmfZro2kpPRI+vmNMfxxW531cqdx8A==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.0.tgz", + "integrity": "sha512-2NskkW6Qmkm9YQPh7swODfB6u3yALqdUqxb0i/3tYp4OKEux50ju9B1OK/u3V/INJ6q2s/CwYmxwxJHhXi9Nfg==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-routing": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.3.tgz", - "integrity": "sha512-bX20i95OKXXQovXhFOViOK63HYmXvsIwZXKWbSpVeKToxMrp0G/6LZXnhg82ijj/S5yhKNRf9LeGDzaqxzAwMQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.0.tgz", + "integrity": "sha512-/lqWiZRjtyKi3If3J8jWHXJQIjaSLv8WKbGnriOcTxFEG7t+AJ79QYIxWXv0UQo4KFpjQRQUag+38T9spbV0IA==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-strategies": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.3.tgz", - "integrity": "sha512-Pg5eulqeKet2y8j73Yw6xTgLdElktcWExGkzDVCGqfV9JCvnGuEpz5eVsCIK70+k4oJcBCin9qEg3g3CwEIH3g==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.0.tgz", + "integrity": "sha512-yzhs07UZg7CR0thFFsUDI5hp+I0WoKd9IHSj4ckHoUAslyKLpmwGnOInsPeq2WQfXn7CkyinRjwUrwv3FMw1Gw==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-streams": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.3.tgz", - "integrity": "sha512-rqDuS4duj+3aZUYI1LsrD2t9hHOjwPqnUIfrXSOxSVjVn83W2MisDF2Bj+dFUZv4GalL9xqErcFW++9gH+Z27w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.0.tgz", + "integrity": "sha512-CIA9inxuFELQOO+/7+JpE50cBhpTWOYcLK7tQpriQ6PJod2tAMgo9X89vt9vLk1pN0PMd749MqurAz8FgLHHEg==", "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.0" } }, "workbox-sw": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.3.tgz", - "integrity": "sha512-IQOUi+RLhvYCiv80RP23KBW/NTtIvzvjex28B8NW1jOm+iV4VIu3VXKXTA6er5/wjjuhmtB28qEAUqADLAyOSg==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.0.tgz", + "integrity": "sha512-d4INzCxFrHixUrhYV5z+6+zX1AKO3T77JY7l1ZKh15blW3Mz9u0FpJATzz3NWaI9X/cxgRyOsR8J7deu3XjlEg==" }, "workbox-webpack-plugin": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-3.6.3.tgz", - "integrity": "sha512-RwmKjc7HFHUFHoOlKoZUq9349u0QN3F8W5tZZU0vc1qsBZDINWXRiIBCAKvo/Njgay5sWz7z4I2adnyTo97qIQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.2.0.tgz", + "integrity": "sha512-YZsiA+y/ns/GdWRaBsfYv8dln1ebWtGnJcTOg1ppO0pO1tScAHX0yGtHIjndxz3L/UUhE8b0NQE9KeLNwJwA5A==", "requires": { - "babel-runtime": "^6.26.0", + "@babel/runtime": "^7.0.0", "json-stable-stringify": "^1.0.1", - "workbox-build": "^3.6.3" + "workbox-build": "^4.2.0" + } + }, + "workbox-window": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.0.tgz", + "integrity": "sha512-Lf5Da+4VdmUZSVhBFEcZSBWNHm9x7Zr2FUp1mgUZhrIwnkfL4qmjpG7TyAzaPm7QLc/O+yxDDC5cgEvMtE1fjQ==", + "requires": { + "workbox-core": "^4.3.0" } }, "worker-farm": { @@ -17762,6 +14123,11 @@ "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -17779,6 +14145,14 @@ "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } } } }, @@ -17788,17 +14162,17 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "requires": { "mkdirp": "^0.5.1" } }, "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -17823,6 +14197,11 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, + "xmlchars": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", + "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==" + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", @@ -17834,47 +14213,48 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "requires": { "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + } } }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/client/package.json b/client/package.json index 10f6d6495..9f61697bf 100644 --- a/client/package.json +++ b/client/package.json @@ -4,7 +4,7 @@ "private": true, "proxy": "http://localhost:3010", "dependencies": { - "antd": "^3.16.3", + "antd": "^3.16.5", "brace": "^0.11.1", "d3": "^5.9.2", "keymaster": "^1.6.2", @@ -17,13 +17,13 @@ "react-draggable": "^3.3.0", "react-measure": "^2.3.0", "react-router-dom": "^5.0.0", - "react-scripts": "^2.1.8", + "react-scripts": "3.0.0", "react-split-pane": "^0.1.87", "react-virtualized": "^9.21.0", "react-window": "^1.8.1", "sql-formatter": "^2.3.2", "tachyons": "^4.11.1", - "taucharts": "^2.7.1", + "taucharts": "^2.7.2", "unistore": "^3.4.1", "whatwg-fetch": "^3.0.0" }, From 7af316a20b80d68273708614f0889a5d2d0946a0 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 22 Apr 2019 21:29:00 -0400 Subject: [PATCH 038/855] Fix hook lint rules --- client/src/Authenticated.js | 2 +- client/src/Routes.js | 2 +- client/src/common/Drawer.js | 2 +- client/src/common/SecondsTimer.js | 2 +- client/src/common/SqlpadTauChart.js | 9 ++++++++- client/src/connections/ConnectionList.js | 2 +- client/src/queries/QueryList.js | 2 +- client/src/queryEditor/QueryEditorSqlEditor.js | 4 +++- client/src/schema/SchemaSidebar.js | 2 +- 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index c89396c55..c12290cb3 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -7,7 +7,7 @@ import { Redirect } from 'react-router-dom'; function Authenticated({ children, currentUser, refreshAppContext }) { useEffect(() => { refreshAppContext(); - }, []); + }, [refreshAppContext]); if (!currentUser) { return ; diff --git a/client/src/Routes.js b/client/src/Routes.js index e8f98fb14..9ceadf09e 100644 --- a/client/src/Routes.js +++ b/client/src/Routes.js @@ -21,7 +21,7 @@ import SignUp from './SignUp.js'; function Routes({ config, refreshAppContext }) { useEffect(() => { refreshAppContext(); - }, []); + }, [refreshAppContext]); if (!config) { return null; diff --git a/client/src/common/Drawer.js b/client/src/common/Drawer.js index 35701d25d..0eb0108e9 100644 --- a/client/src/common/Drawer.js +++ b/client/src/common/Drawer.js @@ -20,7 +20,7 @@ function DrawerWrapper({ window.addEventListener('keydown', handler); return () => window.removeEventListener('keydown', handler); } - }, [visible]); + }, [visible, onClose]); return ( clearInterval(intervalId); - }, []); + }, [startTime]); return {runSeconds}; } diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index 89e31e320..a8e9bcde5 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -40,7 +40,14 @@ function SqlpadTauChart({ } delFakeChartRef(queryId); }; - }, [isRunning, queryError, queryResult, chartConfiguration, queryName]); + }, [ + isRunning, + queryError, + queryResult, + chartConfiguration, + queryName, + queryId + ]); if (isRunning) { return ( diff --git a/client/src/connections/ConnectionList.js b/client/src/connections/ConnectionList.js index 80084efcc..8e978e76b 100644 --- a/client/src/connections/ConnectionList.js +++ b/client/src/connections/ConnectionList.js @@ -21,7 +21,7 @@ function ConnectionList({ useEffect(() => { loadConnections(); - }, []); + }, [loadConnections]); const editConnection = connection => { setConnectionId(connection._id); diff --git a/client/src/queries/QueryList.js b/client/src/queries/QueryList.js index cc30fc214..42c1c16a5 100644 --- a/client/src/queries/QueryList.js +++ b/client/src/queries/QueryList.js @@ -32,7 +32,7 @@ function QueryList({ const [searches, setSearches] = useState([]); useEffect(() => { loadQueries(); - }, []); + }, [loadQueries]); const availableSearches = getAvailableSearchTags(queries, connections); const decoratedQueries = getDecoratedQueries(queries, connections); diff --git a/client/src/queryEditor/QueryEditorSqlEditor.js b/client/src/queryEditor/QueryEditorSqlEditor.js index 7d4867180..2ff1c43cd 100644 --- a/client/src/queryEditor/QueryEditorSqlEditor.js +++ b/client/src/queryEditor/QueryEditorSqlEditor.js @@ -14,7 +14,9 @@ function QueryEditorSqlEditor({ setQueryState, handleQuerySelectionChange }) { - const onChange = useCallback(value => setQueryState('queryText', value), []); + const onChange = useCallback(value => setQueryState('queryText', value), [ + setQueryState + ]); return ( { e.preventDefault(); From a606b0976723d99b38878e36f015d7b4d0f09230 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 23 Apr 2019 00:00:52 -0400 Subject: [PATCH 039/855] Use react-window for ResultDataTable (and remove react-virtualized) (#427) * Use react-window for grid * update comments to reference react-window * Remove result-grid id * Move onResize handler to method * Remove react-virtualized * Cleanup --- client/package-lock.json | 21 --- client/package.json | 1 - client/src/common/QueryResultDataTable.js | 194 +++++++++++----------- client/src/css/vendorOverrides.css | 2 +- client/src/schema/getSchemaList.js | 2 +- 5 files changed, 99 insertions(+), 121 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 99bfa7fa4..bb146da9f 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -4582,14 +4582,6 @@ "utila": "~0.4" } }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, "dom-matches": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz", @@ -11514,19 +11506,6 @@ "prop-types": "^15.5.4" } }, - "react-virtualized": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.21.0.tgz", - "integrity": "sha512-duKD2HvO33mqld4EtQKm9H9H0p+xce1c++2D5xn59Ma7P8VT7CprfAe5hwjd1OGkyhqzOZiTMlTal7LxjH5yBQ==", - "requires": { - "babel-runtime": "^6.26.0", - "classnames": "^2.2.3", - "dom-helpers": "^2.4.0 || ^3.0.0", - "loose-envify": "^1.3.0", - "prop-types": "^15.6.0", - "react-lifecycles-compat": "^3.0.4" - } - }, "react-window": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.1.tgz", diff --git a/client/package.json b/client/package.json index 9f61697bf..932515429 100644 --- a/client/package.json +++ b/client/package.json @@ -19,7 +19,6 @@ "react-router-dom": "^5.0.0", "react-scripts": "3.0.0", "react-split-pane": "^0.1.87", - "react-virtualized": "^9.21.0", "react-window": "^1.8.1", "sql-formatter": "^2.3.2", "tachyons": "^4.11.1", diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index d1b9e8d9d..6b9591c76 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { MultiGrid } from 'react-virtualized'; +import { VariableSizeGrid } from 'react-window'; +import throttle from 'lodash/throttle'; import Draggable from 'react-draggable'; import Measure from 'react-measure'; import SpinKitCube from './SpinKitCube.js'; import moment from 'moment'; -import 'react-virtualized/styles.css'; const renderValue = (input, fieldMeta) => { if (input === null || input === undefined) { @@ -21,6 +21,12 @@ const renderValue = (input, fieldMeta) => { } }; +// Hide the overflow so the scroll bar never shows in the header grid +const headerStyle = { + overflowX: 'hidden', + overflowY: 'hidden' +}; + // NOTE: PureComponent's shallow compare works for this component // because the isRunning prop will toggle with each query execution // It would otherwise not rerender on change of prop.queryResult alone @@ -60,7 +66,55 @@ class QueryResultDataTable extends React.PureComponent { return { columnWidths }; } - headerCellRenderer = ({ columnIndex, key, style }) => { + // NOTE + // An empty dummy column is added to the grid for visual purposes + // If dataKey was found this is a real column of data from the query result + // If not, it's the dummy column at the end, and it should fill the rest of the grid width + getColumnWidth = index => { + const { columnWidths } = this.state; + const { queryResult } = this.props; + const dataKey = queryResult.fields[index]; + const { width } = this.state.dimensions; + + if (dataKey) { + return columnWidths[dataKey]; + } + + const totalWidthFilled = queryResult.fields + .map(key => columnWidths[key]) + .reduce((prev, curr) => prev + curr, 0); + + const fakeColumnWidth = width - totalWidthFilled; + return fakeColumnWidth < 10 ? 10 : fakeColumnWidth; + }; + + headerGrid = React.createRef(); + bodyGrid = React.createRef(); + + resizeColumn = ({ dataKey, deltaX, columnIndex }) => { + this.setState( + prevState => { + const prevWidths = prevState.columnWidths; + const newWidth = prevWidths[dataKey] + deltaX; + return { + columnWidths: { + ...prevWidths, + [dataKey]: newWidth > 100 ? newWidth : 100 + } + }; + }, + () => this.recalc(columnIndex) + ); + }; + + recalc = throttle(columnIndex => { + if (this.headerGrid.current.resetAfterColumnIndex) { + this.headerGrid.current.resetAfterColumnIndex(columnIndex); + this.bodyGrid.current.resetAfterColumnIndex(columnIndex); + } + }, 100); + + HeaderCell = ({ columnIndex, rowIndex, style }) => { const { queryResult } = this.props; const dataKey = queryResult.fields[columnIndex]; @@ -71,7 +125,6 @@ class QueryResultDataTable extends React.PureComponent { className={ 'flex bb b--moon-gray justify-between ph2 fw7 bg-near-white' } - key={key} style={Object.assign({}, style, { lineHeight: '30px' })} >
    {dataKey}
    @@ -79,12 +132,9 @@ class QueryResultDataTable extends React.PureComponent { axis="x" defaultClassName="DragHandle" defaultClassNameDragging="DragHandleActive" - onDrag={(event, { deltaX }) => - this.resizeColumn({ - dataKey, - deltaX - }) - } + onDrag={(event, { deltaX }) => { + this.resizeColumn({ dataKey, deltaX, columnIndex }); + }} position={{ x: 0 }} zIndex={999} > @@ -98,13 +148,12 @@ class QueryResultDataTable extends React.PureComponent { return (
    ); }; - dataCellRenderer = ({ columnIndex, key, rowIndex, style }) => { + Cell = ({ columnIndex, rowIndex, style }) => { const { queryResult } = this.props; const dataKey = queryResult.fields[columnIndex]; const backgroundColor = rowIndex % 2 === 0 ? 'bg-near-white' : ''; @@ -114,12 +163,11 @@ class QueryResultDataTable extends React.PureComponent { const fieldMeta = queryResult.meta[dataKey]; // Account for extra row that was used for header row - const value = queryResult.rows[rowIndex - 1][dataKey]; + const value = queryResult.rows[rowIndex][dataKey]; return (
    {renderValue(value, fieldMeta)}
    @@ -132,7 +180,6 @@ class QueryResultDataTable extends React.PureComponent { return (
    @@ -140,63 +187,18 @@ class QueryResultDataTable extends React.PureComponent { ); }; - cellRenderer = params => { - if (params.rowIndex === 0) { - return this.headerCellRenderer(params); - } - return this.dataCellRenderer(params); - }; - - resizeColumn = ({ dataKey, deltaX }) => { - this.setState(prevState => { - const prevWidths = prevState.columnWidths; - const newWidth = prevWidths[dataKey] + deltaX; - return { - columnWidths: { - ...prevWidths, - [dataKey]: newWidth > 100 ? newWidth : 100 - } - }; - }); - if (this.ref) { - this.ref.recomputeGridSize(); - } - }; - - // NOTE - // An empty dummy column is added to the grid for visual purposes - // If dataKey was found this is a real column of data from the query result - // If not, it's the dummy column at the end, and it should fill the rest of the grid width - getColumnWidth = ({ index }) => { - const { columnWidths } = this.state; - const { queryResult } = this.props; - const dataKey = queryResult.fields[index]; - const { width } = this.state.dimensions; - - if (dataKey) { - return columnWidths[dataKey]; - } - - const totalWidthFilled = queryResult.fields - .map(key => columnWidths[key]) - .reduce((prev, curr) => prev + curr, 0); + getRowHeight() { + return 30; + } - const fakeColumnWidth = width - totalWidthFilled; - return fakeColumnWidth < 10 ? 10 : fakeColumnWidth; + // When a scroll occurs in the body grid, + // synchronize the scroll position of the header grid + handleGridScroll = ({ scrollLeft }) => { + this.headerGrid.current.scrollTo({ scrollLeft }); }; - handleScrollBug = () => { - // There's a strange bug when using Chrome. - // When the Ace editor is focused, and the user scrolls horizontally on result grid - // the cursor appears to stay focused on the Ace editor, but no input is accepted other than deletes. - // The frozen input behavior goes away if another element is given focus, - // and then the user clicks on the Ace editor again. - // Fortunately clearing focus on the focused element and refocusing it fixes this bug. - const element = document.activeElement; - if (element) { - element.blur(); - element.focus(); - } + handleContainerResize = contentRect => { + this.setState({ dimensions: contentRect.bounds }); }; render() { @@ -205,10 +207,7 @@ class QueryResultDataTable extends React.PureComponent { if (isRunning) { return ( -
    +
    ); @@ -217,7 +216,6 @@ class QueryResultDataTable extends React.PureComponent { if (queryError) { return (
    {queryError} @@ -226,43 +224,45 @@ class QueryResultDataTable extends React.PureComponent { } if (queryResult && queryResult.rows) { - // Add extra row to account for header row - const rowCount = queryResult.rows.length + 1; + const rowCount = queryResult.rows.length; // Add extra column to fill remaining grid width if necessary const columnCount = queryResult.fields.length + 1; return ( - { - this.setState({ dimensions: contentRect.bounds }); - }} - > + {({ measureRef }) => ( -
    - (this.ref = ref)} +
    + + {this.HeaderCell} + + + columnWidth={this.getColumnWidth} + rowHeight={this.getRowHeight} + width={width} + height={height - 30} + ref={this.bodyGrid} + onScroll={this.handleGridScroll} + > + {this.Cell} +
    )} ); } - return
    ; + return
    ; } } diff --git a/client/src/css/vendorOverrides.css b/client/src/css/vendorOverrides.css index dabc42572..6d1ea9b18 100644 --- a/client/src/css/vendorOverrides.css +++ b/client/src/css/vendorOverrides.css @@ -3,7 +3,7 @@ display: none; } -/* QueryResultDataTable react-virtualized/react-draggable implementaion */ +/* QueryResultDataTable react-window/react-draggable implementaion */ .DragHandle { flex: 0 0 16px; z-index: 2; diff --git a/client/src/schema/getSchemaList.js b/client/src/schema/getSchemaList.js index 2fd0aeeca..eb617f6ca 100644 --- a/client/src/schema/getSchemaList.js +++ b/client/src/schema/getSchemaList.js @@ -1,5 +1,5 @@ /** - * To render this schema tree with react-virtualized we'll convert this to a normalized list of sorts + * To render this schema tree with react-window we'll convert this to a normalized list of sorts * Because a tree is basically an indented list...? * * schemaInfo looks like From 84525a66a5480e9bffc559a1f34d59e1cea88d14 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 26 Apr 2019 23:48:27 -0400 Subject: [PATCH 040/855] CSS cleanup - remove tachyons (#428) * Remove unused component * Remove unnecessary clases from root * Remove flex wrapper on router * Remove layout and tachyons classes * Add some utility classes inspired by tachyons * remove some tachyons * Remove more tachyons * Remove more tachyons * Remove unused * Uninstall Tachyons * Fix auth form style * Fix editor styles --- client/package-lock.json | 5 - client/package.json | 1 - client/public/index.html | 2 +- client/src/ForgotPassword.js | 15 ++- client/src/PasswordReset.js | 13 ++- client/src/QueryChartOnly.js | 13 ++- client/src/QueryTableOnly.js | 24 +++- client/src/Routes.js | 108 +++++++++--------- client/src/SignIn.js | 85 +++++++------- client/src/SignUp.js | 17 +-- client/src/common/FullscreenMessage.js | 12 +- client/src/common/Header.js | 22 ---- .../src/common/IncompleteDataNotification.js | 33 +++--- client/src/common/QueryResultDataTable.js | 56 +++++---- client/src/common/Sidebar.js | 11 +- client/src/common/SidebarBody.js | 2 +- client/src/common/Spacer.js | 5 + client/src/common/SqlpadTauChart.js | 7 +- client/src/css/index.css | 24 ++++ client/src/index.js | 1 - client/src/queries/QueryList.js | 10 +- client/src/queries/QueryList.module.css | 4 + client/src/queryEditor/ChartInputs.js | 11 +- client/src/queryEditor/QueryEditor.js | 26 ++--- .../src/queryEditor/QueryEditorSqlEditor.js | 12 +- client/src/queryEditor/QueryResultHeader.js | 55 +++++---- client/src/queryEditor/VisSidebar.js | 4 +- .../src/queryEditor/toolbar/AboutContent.js | 27 +---- .../queryEditor/toolbar/QueryDetailsModal.js | 18 +-- client/src/queryEditor/toolbar/Toolbar.js | 15 ++- client/src/users/EditUserForm.js | 2 +- client/src/users/InviteUserForm.js | 7 +- 32 files changed, 338 insertions(+), 309 deletions(-) delete mode 100644 client/src/common/Header.js create mode 100644 client/src/common/Spacer.js create mode 100644 client/src/queries/QueryList.module.css diff --git a/client/package-lock.json b/client/package-lock.json index bb146da9f..cb691f39c 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12913,11 +12913,6 @@ } } }, - "tachyons": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/tachyons/-/tachyons-4.11.1.tgz", - "integrity": "sha512-n5zIZ8i8kZ8vz05vX1BdvkP8b9ufsMeSRmdqTuUtz5rlNxr03nntiZMc/HTADIsPYZj/wZJDJglxV0/yvvaiZA==" - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", diff --git a/client/package.json b/client/package.json index 932515429..5826c5dd9 100644 --- a/client/package.json +++ b/client/package.json @@ -21,7 +21,6 @@ "react-split-pane": "^0.1.87", "react-window": "^1.8.1", "sql-formatter": "^2.3.2", - "tachyons": "^4.11.1", "taucharts": "^2.7.2", "unistore": "^3.4.1", "whatwg-fetch": "^3.0.0" diff --git a/client/public/index.html b/client/public/index.html index 795ab5f37..58d568664 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -12,7 +12,7 @@ -
    +
    \ No newline at end of file diff --git a/client/src/ForgotPassword.js b/client/src/ForgotPassword.js index 91ee1a099..05b355342 100644 --- a/client/src/ForgotPassword.js +++ b/client/src/ForgotPassword.js @@ -2,6 +2,9 @@ import React, { useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; import message from 'antd/lib/message'; +import Input from 'antd/lib/input'; +import Spacer from './common/Spacer'; +import Button from 'antd/lib/button'; function ForgotPassword() { const [email, setEmail] = useState(''); @@ -25,20 +28,20 @@ function ForgotPassword() { } return ( -
    +
    -

    SQLPad

    - SQLPad + setEmail(e.target.value)} required /> - +
    ); diff --git a/client/src/PasswordReset.js b/client/src/PasswordReset.js index d1cbbdd18..b6f1748de 100644 --- a/client/src/PasswordReset.js +++ b/client/src/PasswordReset.js @@ -4,6 +4,7 @@ import message from 'antd/lib/message'; import React, { useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; +import Spacer from './common/Spacer'; function PasswordReset({ passwordResetId }) { const [email, setEmail] = useState(''); @@ -37,34 +38,34 @@ function PasswordReset({ passwordResetId }) { return ; } return ( -
    +
    -

    SQLPad

    +

    SQLPad

    setEmail(e.target.value)} required /> + setPassword(e.target.value)} required /> + setPasswordConfirmation(e.target.value)} required /> - diff --git a/client/src/QueryChartOnly.js b/client/src/QueryChartOnly.js index ae765249a..91d00e670 100644 --- a/client/src/QueryChartOnly.js +++ b/client/src/QueryChartOnly.js @@ -43,13 +43,18 @@ function QueryChartOnly({ queryId }) { return (
    - {query ? query.name : ''} + {query ? query.name : ''}
    - + {incomplete && }
    - {query ? query.name : ''} + {query ? query.name : ''}
    - + {incomplete && }
    -
    -
    +
    +
    -
    - - } - /> - } - /> - ( - - - - )} - /> - ( - - )} - /> - ( - - )} - /> - } /> - } /> - } - /> - ( - - )} - /> - } - /> - } /> - -
    + + } /> + } + /> + ( + + + + )} + /> + ( + + )} + /> + ( + + )} + /> + } /> + } /> + } + /> + ( + + )} + /> + } + /> + } /> + ); } diff --git a/client/src/SignIn.js b/client/src/SignIn.js index 40506408b..430e15710 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -7,6 +7,7 @@ import { connect } from 'unistore/react'; import { actions } from './stores/unistoreStore'; import { Link, Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; +import Spacer from './common/Spacer'; function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { const [email, setEmail] = useState(''); @@ -37,48 +38,54 @@ function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { } const localForm = ( -
    -
    - setEmail(e.target.value)} - required - /> - setPassword(e.target.value)} - required - /> - -
    -
    - Sign Up - {smtpConfigured ? ( - - Forgot Password - - ) : null} -
    -
    +
    + setEmail(e.target.value)} + required + /> + + setPassword(e.target.value)} + required + /> + + + + + Sign Up + + + {smtpConfigured ? ( + Forgot Password + ) : null} + ); + // TODO FIXME XXX Button inside anchor is bad const googleForm = (
    - @@ -87,8 +94,8 @@ function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { ); return ( -
    -

    SQLPad

    +
    +

    SQLPad

    {'local' in passport.strategies && localForm} {'google' in passport.strategies && googleForm}
    diff --git a/client/src/SignUp.js b/client/src/SignUp.js index 0ef3ca737..8320e72b2 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -6,6 +6,7 @@ import { connect } from 'unistore/react'; import { actions } from './stores/unistoreStore'; import { Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; +import Spacer from './common/Spacer'; function SignUp({ adminRegistrationOpen }) { const [email, setEmail] = useState(''); @@ -35,12 +36,12 @@ function SignUp({ adminRegistrationOpen }) { } return ( -
    +
    -

    SQLPad

    +

    SQLPad

    {adminRegistrationOpen && ( -
    -

    Admin registration open

    +
    +

    Admin registration open

    Welcome to SQLPad! Since there are no admins currently registered, signup is open to anyone. By signing up, you will be granted admin @@ -52,28 +53,28 @@ function SignUp({ adminRegistrationOpen }) { setEmail(e.target.value)} required /> + setPassword(e.target.value)} required /> + setPasswordConfirmation(e.target.value)} required /> - diff --git a/client/src/common/FullscreenMessage.js b/client/src/common/FullscreenMessage.js index b78b515fb..61789d1b7 100644 --- a/client/src/common/FullscreenMessage.js +++ b/client/src/common/FullscreenMessage.js @@ -2,7 +2,17 @@ import React from 'react'; export default function FullscreenMessage({ children }) { return ( -

    +
    {children}
    ); diff --git a/client/src/common/Header.js b/client/src/common/Header.js deleted file mode 100644 index fee1e976a..000000000 --- a/client/src/common/Header.js +++ /dev/null @@ -1,22 +0,0 @@ -import Layout from 'antd/lib/layout'; -import PropTypes from 'prop-types'; -import React from 'react'; - -function Header({ children, title }) { - return ( - -
    {title}
    -
    {children}
    -
    - ); -} - -Header.propTypes = { - title: PropTypes.string -}; - -Header.defaultProps = { - title: '' -}; - -export default Header; diff --git a/client/src/common/IncompleteDataNotification.js b/client/src/common/IncompleteDataNotification.js index 65ded6399..ce2fc0a59 100644 --- a/client/src/common/IncompleteDataNotification.js +++ b/client/src/common/IncompleteDataNotification.js @@ -1,27 +1,22 @@ import Icon from 'antd/lib/icon'; import Tooltip from 'antd/lib/tooltip'; -import PropTypes from 'prop-types'; +import Typography from 'antd/lib/typography'; import React from 'react'; -function IncompleteDataNotification({ incomplete }) { - if (incomplete === true) { - return ( - - - - Incomplete - - - ); - } - return null; + > + + + Incomplete + + + ); } -IncompleteDataNotification.propTypes = { - incomplete: PropTypes.bool -}; - export default IncompleteDataNotification; diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index 6b9591c76..691406764 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -27,6 +27,24 @@ const headerStyle = { overflowY: 'hidden' }; +const headerCellStyle = { + lineHeight: '30px', + backgroundColor: '#f4f4f4', + justifyContent: 'space-between', + borderBottom: '1px solid #CCC', + display: 'flex', + paddingLeft: '.5rem', + paddingRight: '.5rem' +}; + +const cellStyle = { + lineHeight: '30px', + paddingLeft: '.5rem', + paddingRight: '.5rem', + borderBottom: '1px solid #CCC', + display: 'relative' +}; + // NOTE: PureComponent's shallow compare works for this component // because the isRunning prop will toggle with each query execution // It would otherwise not rerender on change of prop.queryResult alone @@ -121,12 +139,7 @@ class QueryResultDataTable extends React.PureComponent { // If dataKey is present this is an actual header to render if (dataKey) { return ( -
    +
    {dataKey}
    - ); + return
    ; }; Cell = ({ columnIndex, rowIndex, style }) => { const { queryResult } = this.props; const dataKey = queryResult.fields[columnIndex]; - const backgroundColor = rowIndex % 2 === 0 ? 'bg-near-white' : ''; + const finalStyle = Object.assign({}, style, cellStyle); + if (rowIndex % 2 === 0) { + finalStyle.backgroundColor = '#fafafa'; + } // If dataKey is present this is a real data cell to render if (dataKey) { @@ -166,10 +177,7 @@ class QueryResultDataTable extends React.PureComponent { const value = queryResult.rows[rowIndex][dataKey]; return ( -
    +
    {renderValue(value, fieldMeta)}
    ); @@ -178,10 +186,7 @@ class QueryResultDataTable extends React.PureComponent { // If no dataKey this is a dummy cell. // It should render nothing, but match the row's style return ( -
    +
    ); @@ -207,7 +212,7 @@ class QueryResultDataTable extends React.PureComponent { if (isRunning) { return ( -
    +
    ); @@ -216,7 +221,8 @@ class QueryResultDataTable extends React.PureComponent { if (queryError) { return (
    {queryError}
    @@ -231,7 +237,7 @@ class QueryResultDataTable extends React.PureComponent { return ( {({ measureRef }) => ( -
    +
    ; + return null; } } diff --git a/client/src/common/Sidebar.js b/client/src/common/Sidebar.js index 7ff95b90a..979b7f060 100644 --- a/client/src/common/Sidebar.js +++ b/client/src/common/Sidebar.js @@ -2,7 +2,16 @@ import React from 'react'; export default function Sidebar({ children }) { return ( -
    +
    {children}
    ); diff --git a/client/src/common/SidebarBody.js b/client/src/common/SidebarBody.js index ff03ec8da..003d0fdea 100644 --- a/client/src/common/SidebarBody.js +++ b/client/src/common/SidebarBody.js @@ -2,7 +2,7 @@ import React from 'react'; export default function SidebarBody({ children }) { return ( -
    +
    {children}
    ); diff --git a/client/src/common/Spacer.js b/client/src/common/Spacer.js new file mode 100644 index 000000000..11e7a78e5 --- /dev/null +++ b/client/src/common/Spacer.js @@ -0,0 +1,5 @@ +import React from 'react'; + +export default function Spacer({ size = 1 }) { + return
    ; +} diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index a8e9bcde5..034969109 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -51,7 +51,7 @@ function SqlpadTauChart({ if (isRunning) { return ( -
    +
    ); @@ -61,14 +61,15 @@ function SqlpadTauChart({ return (
    {queryError}
    ); } - return
    ; + return
    ; } SqlpadTauChart.propTypes = { diff --git a/client/src/css/index.css b/client/src/css/index.css index df7b1a53d..1618c5225 100644 --- a/client/src/css/index.css +++ b/client/src/css/index.css @@ -11,6 +11,30 @@ a:focus { /* Utilities ============================================================================ */ +.truncate { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +.h-100 { + height: 100%; +} + +.w-100 { + width: 100%; +} + +.bg-error { + background-color: #ff725c; +} + .spinning { -webkit-animation: spin 2s linear infinite; -moz-animation: spin 2s linear infinite; diff --git a/client/src/index.js b/client/src/index.js index 6dc37a747..455311a31 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -1,5 +1,4 @@ import 'antd/dist/antd.css'; -import 'tachyons/css/tachyons.min.css'; import './css/index.css'; import './css/react-split-pane.css'; import './css/vendorOverrides.css'; diff --git a/client/src/queries/QueryList.js b/client/src/queries/QueryList.js index 42c1c16a5..64fce2bd7 100644 --- a/client/src/queries/QueryList.js +++ b/client/src/queries/QueryList.js @@ -17,6 +17,7 @@ import getAvailableSearchTags from './getAvailableSearchTags'; import getDecoratedQueries from './getDecoratedQueries'; import IconButtonLink from '../common/IconButtonLink'; import SqlEditor from '../common/SqlEditor'; +import styles from './QueryList.module.css'; const { Option } = Select; const { Title } = Typography; @@ -76,7 +77,7 @@ function QueryList({ return ( setPreview(query)} onMouseLeave={() => setPreview('')} actions={[ @@ -128,7 +129,7 @@ function QueryList({ return ( <> - + +
    +
    -
    +
    @@ -159,16 +156,17 @@ class QueryEditor extends React.Component { ); return ( - - -
    - -
    - {sqlTabPane} -
    -
    -
    -
    +
    + +
    {sqlTabPane}
    +
    ); } } diff --git a/client/src/queryEditor/QueryEditorSqlEditor.js b/client/src/queryEditor/QueryEditorSqlEditor.js index 2ff1c43cd..2fb33bc2d 100644 --- a/client/src/queryEditor/QueryEditorSqlEditor.js +++ b/client/src/queryEditor/QueryEditorSqlEditor.js @@ -19,11 +19,13 @@ function QueryEditorSqlEditor({ ]); return ( - +
    + +
    ); } diff --git a/client/src/queryEditor/QueryResultHeader.js b/client/src/queryEditor/QueryResultHeader.js index 55b88dc51..c344cd1a6 100644 --- a/client/src/queryEditor/QueryResultHeader.js +++ b/client/src/queryEditor/QueryResultHeader.js @@ -1,11 +1,27 @@ import React from 'react'; import PropTypes from 'prop-types'; +import Typography from 'antd/lib/typography'; import { Link } from 'react-router-dom'; import IncompleteDataNotification from '../common/IncompleteDataNotification'; import SecondsTimer from '../common/SecondsTimer.js'; import { connect } from 'unistore/react'; import { actions } from '../stores/unistoreStore'; +const { Text } = Typography; + +const barStyle = { + height: '30px', + borderBottom: '1px solid #ccc', + backgroundColor: '#f4f4f4', + lineHeight: '30px', + paddingLeft: 4 +}; + +const headerItemStyle = { + paddingLeft: 4, + paddingRight: 48 +}; + function QueryResultHeader({ cacheKey, config, @@ -15,16 +31,11 @@ function QueryResultHeader({ }) { if (isRunning || !queryResult) { return ( -
    +
    {isRunning ? ( - - Query Run Time: - - sec. - + + Query time: + sec. ) : null}
    @@ -43,24 +54,21 @@ function QueryResultHeader({ const xlsxDownloadLink = `/download-results/${cacheKey}.xlsx`; return ( -
    - - Query Run Time: +
    + + Query time: {serverSec} - - Rows: + + Rows: {rowCount} - + {config.allowCsvDownload && ( - Download: + Download: )} - - - + + {incomplete && }
    ); } diff --git a/client/src/queryEditor/VisSidebar.js b/client/src/queryEditor/VisSidebar.js index 44921a567..13dfcf089 100644 --- a/client/src/queryEditor/VisSidebar.js +++ b/client/src/queryEditor/VisSidebar.js @@ -75,8 +75,8 @@ function VisSidebar({ queryResult={queryResult} /> -
    -
    diff --git a/client/src/queryEditor/toolbar/AboutContent.js b/client/src/queryEditor/toolbar/AboutContent.js index df0a7edde..c66a40335 100644 --- a/client/src/queryEditor/toolbar/AboutContent.js +++ b/client/src/queryEditor/toolbar/AboutContent.js @@ -19,27 +19,18 @@ function AboutContent({ version }) { target="_blank" rel="noopener noreferrer" > - http://rickbergfalk.github.io/sqlpad{' '} -
      + diff --git a/client/src/queryEditor/toolbar/QueryDetailsModal.js b/client/src/queryEditor/toolbar/QueryDetailsModal.js index d188e5c83..ae6dc123d 100644 --- a/client/src/queryEditor/toolbar/QueryDetailsModal.js +++ b/client/src/queryEditor/toolbar/QueryDetailsModal.js @@ -1,6 +1,5 @@ import Icon from 'antd/lib/icon'; import Modal from 'antd/lib/modal'; -import Tooltip from 'antd/lib/tooltip'; import React from 'react'; import EditableTagGroup from '../../common/EditableTagGroup'; import { Link } from 'react-router-dom'; @@ -47,21 +46,6 @@ function QueryDetailsModal({ ); - } else { - return ( - -
    • - e.preventDefault()} - > - {text} - -
    • -
      - ); } }; @@ -103,7 +87,7 @@ function QueryDetailsModal({

      Run only a portion of a query by highlighting it first.


      -
        +
          {renderNavLink(tableUrl, 'Link to Table')} {renderNavLink(chartUrl, 'Link to Chart')}
        diff --git a/client/src/queryEditor/toolbar/Toolbar.js b/client/src/queryEditor/toolbar/Toolbar.js index 364a04099..c393d3b4a 100644 --- a/client/src/queryEditor/toolbar/Toolbar.js +++ b/client/src/queryEditor/toolbar/Toolbar.js @@ -60,8 +60,15 @@ function Toolbar({ const isAdmin = currentUser.role === 'admin'; return ( -
        -
        +
        + @@ -87,7 +94,7 @@ function Toolbar({ setQueryState('name', e.target.value)} @@ -133,7 +140,7 @@ function Toolbar({ -
        +
        diff --git a/client/src/users/EditUserForm.js b/client/src/users/EditUserForm.js index 7f561d25c..e3338d8cf 100644 --- a/client/src/users/EditUserForm.js +++ b/client/src/users/EditUserForm.js @@ -56,7 +56,7 @@ function EditUserForm({ user }) { Remove - + Password reset link diff --git a/client/src/users/InviteUserForm.js b/client/src/users/InviteUserForm.js index cd8af5506..f6c0688b0 100644 --- a/client/src/users/InviteUserForm.js +++ b/client/src/users/InviteUserForm.js @@ -62,12 +62,7 @@ function InviteUserForm({ onInvited }) { - From 694048e7964ee2098b145b1a5b9b3511c8c2cf29 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 14 May 2019 08:30:35 -0400 Subject: [PATCH 041/855] Replace antd with smaller misc components (#429) * Use own Button implementation * Array of classNames * Use basic Select component * Remove EditableTagGroup * Move tag button out of input * Basic Input component * Add FormExplain component * Add error style to Select component * Create HorizontalFormItem.js * Use regular form element * Install mdi-react for material icons * Use material icons * Install mitt * Use custom message implementation * Handle htmlType submit * Fix htmlFor warning * Install reach tooltip * Add reach tooltip wrapper component * Handle ref passed to Button/IconButtonLink * Ensure tooltip is visible when used within modal * Use reach tooltip * Add TODO * Add disabled button styles and then some * Install reach/dialog * Tweak z-index for reach * Implement various reach dialogs * Remove Spin for something very basic * Allow tooltip to be used in modal * Remove popover in favor of form explain * Remove row/col use * Create common Text component * Use native checkbox * Divider * Remove Tag use * Boxier button * Remove Tab use for config/users/connection button * call the onClose callback I must have missed this earlier * Use react-switch for switches * Instead of disabling the button without changes, make it default style * Unuse antd list * Add reset.css from antd * Uninstall antd (and install moment) * Make success and error message * Tweak inset/border radius styles * Show anchor outlines for accessibility * Improve QueryListDrawer * Fix IncompleteDataNotification tooltip use * Better ButtonLink/IconButton * Let Button own Tooltip * Add proper icon support to Button * Fix button text not centered * Pass query name to delete modal * Remove redundant close button (Modal has one now always) * Wait add close button to Modal * Use Dialog directly for delete button for basic modal * Add intense modal/dialog backdrop/shadows * Menu button using Menu Button * Toolbar tweaks * Darken and pad toolbar * Add Connections to app menu * Smaller title font size * Use icon for refresh schema button * Open in new icon and other style changes * Update and cleanup tags/about modal * Fix divider disappearing display bug * Fix connection form display bug * Schema/vis icon buttons * Install downshift and match-sorter * Initial MultiSelect implementation [WIP] * Don't disable tags modal * fix border radius * Remove unused XIcon * Not really liking downshift to be honest * Consolidate the MultiDownshift component * remove unused * Tags and get sidebar filtering working mostly * cyan and magenta the cube loading thing * Clean up style via a css-module utility classes approach At least all the shadows and things will be consistent. CSS module compose syntax isn't recognized by vscode and this seems more portable and safe and boring. * MultiSelect style tweaks * Organize imports for changed files --- client/package-lock.json | 1058 +++-------------- client/package.json | 10 +- client/src/ForgotPassword.js | 10 +- client/src/PasswordReset.js | 10 +- client/src/QueryChartOnly.js | 6 +- client/src/QueryTableOnly.js | 4 +- client/src/SignIn.js | 16 +- client/src/SignUp.js | 12 +- client/src/common/Button.js | 47 + client/src/common/Button.module.css | 100 ++ client/src/common/ButtonLink.js | 33 + client/src/common/ButtonLink.module.css | 56 + client/src/common/DeleteConfirmButton.js | 69 ++ client/src/common/Divider.js | 18 + client/src/common/Drawer.js | 67 +- client/src/common/EditableTagGroup.js | 101 -- client/src/common/ExportButton.js | 50 +- client/src/common/FormExplain.js | 6 + client/src/common/FormExplain.module.css | 10 + client/src/common/HorizontalFormItem.js | 24 + client/src/common/IconButtonLink.js | 9 - .../src/common/IncompleteDataNotification.js | 21 +- client/src/common/Input.js | 20 + client/src/common/Input.module.css | 53 + client/src/common/ListItem.js | 25 + client/src/common/Modal.js | 37 + client/src/common/MultiSelect.js | 177 +++ client/src/common/MultiSelect.module.css | 92 ++ client/src/common/MultiSelectHelpers.js | 40 + client/src/common/Select.js | 19 + client/src/common/Select.module.css | 47 + client/src/common/SpinKitCube.css | 9 +- client/src/common/Tag.js | 32 + client/src/common/Tag.module.css | 19 + client/src/common/Text.js | 19 + client/src/common/Tooltip.js | 7 + client/src/common/base.module.css | 29 + client/src/common/message.js | 49 + client/src/configuration/ConfigItemInput.js | 31 +- client/src/configuration/ConfigurationForm.js | 47 +- .../src/connections/ConnectionEditDrawer.js | 2 +- client/src/connections/ConnectionForm.js | 125 +- client/src/connections/ConnectionList.js | 121 +- client/src/css/index.css | 39 + client/src/css/reset.css | 311 +++++ client/src/css/vendorOverrides.css | 22 +- client/src/index.js | 18 +- client/src/queries/QueryList.js | 208 ---- client/src/queries/QueryList.module.css | 6 + client/src/queries/QueryListDrawer.js | 201 ++++ client/src/queries/getAvailableSearchTags.js | 28 +- client/src/queryEditor/ChartInputs.js | 42 +- client/src/queryEditor/ConnectionDropdown.js | 45 +- client/src/queryEditor/QueryEditor.js | 9 +- client/src/queryEditor/QueryResultHeader.js | 8 +- client/src/queryEditor/VisSidebar.js | 29 +- client/src/queryEditor/toolbar/AboutButton.js | 45 - .../src/queryEditor/toolbar/AboutContent.js | 83 +- client/src/queryEditor/toolbar/AboutModal.js | 38 + .../src/queryEditor/toolbar/ConfigButton.js | 47 - .../queryEditor/toolbar/QueryDetailsModal.js | 98 -- .../queryEditor/toolbar/QueryListButton.js | 18 +- .../src/queryEditor/toolbar/QueryTagsModal.js | 48 + .../src/queryEditor/toolbar/SignoutButton.js | 28 - client/src/queryEditor/toolbar/Toolbar.js | 264 ++-- client/src/schema/SchemaSidebar.js | 50 +- client/src/stores/unistoreStore.js | 6 +- client/src/users/EditUserForm.js | 68 +- client/src/users/InviteUserForm.js | 64 +- client/src/users/UserList.js | 127 +- client/src/utilities/fetch-json.js | 2 +- 71 files changed, 2591 insertions(+), 2098 deletions(-) create mode 100644 client/src/common/Button.js create mode 100644 client/src/common/Button.module.css create mode 100644 client/src/common/ButtonLink.js create mode 100644 client/src/common/ButtonLink.module.css create mode 100644 client/src/common/DeleteConfirmButton.js create mode 100644 client/src/common/Divider.js delete mode 100644 client/src/common/EditableTagGroup.js create mode 100644 client/src/common/FormExplain.js create mode 100644 client/src/common/FormExplain.module.css create mode 100644 client/src/common/HorizontalFormItem.js delete mode 100644 client/src/common/IconButtonLink.js create mode 100644 client/src/common/Input.js create mode 100644 client/src/common/Input.module.css create mode 100644 client/src/common/ListItem.js create mode 100644 client/src/common/Modal.js create mode 100644 client/src/common/MultiSelect.js create mode 100644 client/src/common/MultiSelect.module.css create mode 100644 client/src/common/MultiSelectHelpers.js create mode 100644 client/src/common/Select.js create mode 100644 client/src/common/Select.module.css create mode 100644 client/src/common/Tag.js create mode 100644 client/src/common/Tag.module.css create mode 100644 client/src/common/Text.js create mode 100644 client/src/common/Tooltip.js create mode 100644 client/src/common/base.module.css create mode 100644 client/src/common/message.js create mode 100644 client/src/css/reset.css delete mode 100644 client/src/queries/QueryList.js create mode 100644 client/src/queries/QueryListDrawer.js delete mode 100644 client/src/queryEditor/toolbar/AboutButton.js create mode 100644 client/src/queryEditor/toolbar/AboutModal.js delete mode 100644 client/src/queryEditor/toolbar/ConfigButton.js delete mode 100644 client/src/queryEditor/toolbar/QueryDetailsModal.js create mode 100644 client/src/queryEditor/toolbar/QueryTagsModal.js delete mode 100644 client/src/queryEditor/toolbar/SignoutButton.js diff --git a/client/package-lock.json b/client/package-lock.json index cb691f39c..9fbf188b6 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -4,29 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@ant-design/create-react-context": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.4.tgz", - "integrity": "sha512-8sw+/w6r+aEbd+OJ62ojoSE4zDt/3yfQydmbWFznoftjr8v/opOswGjM+/MU0rSaREbluqzOmZ6xdecHpSaS2w==", - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" - } - }, - "@ant-design/icons": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-1.2.1.tgz", - "integrity": "sha512-gQx3nH6m1xvebOWh5xibhzVK02aoqHY7JUXUS4doAidSDRWsj5iwKC8Gq9DemDZ4T+bW6xO7jJZN1UsbvcW7Uw==" - }, - "@ant-design/icons-react": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@ant-design/icons-react/-/icons-react-1.1.5.tgz", - "integrity": "sha512-p2ybKfO/r2lC1RZu4rDY2VBDZq2zqAaJzf/B1HrKTxGo8/mM1zOOEoob/LRXZphJ9jD5wCcTdcmcB9YMaAWW4Q==", - "requires": { - "ant-design-palettes": "^1.1.3", - "babel-runtime": "^6.26.0" - } - }, "@babel/code-frame": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", @@ -1150,6 +1127,94 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@reach/auto-id": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.2.0.tgz", + "integrity": "sha512-lVK/svL2HuQdp7jgvlrLkFsUx50Az9chAhxpiPwBqcS83I2pVWvXp98FOcSCCJCV++l115QmzHhFd+ycw1zLBg==" + }, + "@reach/component-component": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@reach/component-component/-/component-component-0.1.3.tgz", + "integrity": "sha512-a1USH7L3bEfDdPN4iNZGvMEFuBfkdG+QNybeyDv8RloVFgZYRoM+KGXyy2KOfEnTUM8QWDRSROwaL3+ts5Angg==" + }, + "@reach/dialog": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@reach/dialog/-/dialog-0.2.8.tgz", + "integrity": "sha512-AcA/XN6h1/Twe3XzU+j/HlRGXJC+UEPU/Bj4POfBjDjFs3BlqG8fcsj+OMAYHF6HfwrP6cDcSUJWoxQKLjOASQ==", + "requires": { + "@reach/component-component": "^0.1.3", + "@reach/portal": "^0.2.1", + "@reach/utils": "^0.2.2", + "react-focus-lock": "^1.17.7", + "react-remove-scroll": "^1.0.2" + } + }, + "@reach/menu-button": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.1.17.tgz", + "integrity": "sha512-PuBuabBjyCapax7hQ5qSWKnQy+qpZkosRV7trnO9YjFIfszn1lp+WTI5AciK+rrlsqK7t4LqNTqffI2XBuy2FA==", + "requires": { + "@reach/component-component": "0.1.3", + "@reach/portal": "^0.2.1", + "@reach/rect": "0.2.1", + "@reach/utils": "^0.2.2", + "@reach/window-size": "^0.1.4", + "warning": "^4.0.2" + } + }, + "@reach/observe-rect": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.0.3.tgz", + "integrity": "sha1-LqPcw2mrIr2fBQqS6jGTITVqYeg=" + }, + "@reach/portal": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.2.1.tgz", + "integrity": "sha512-pUQ0EtCcYm4ormEjJmdk4uzZCxOpaRHB8FDKJXy6q6GqRqQwZ4lAT1f2Tvw0DAmULmyZTpe1/heXY27Tdnct+Q==", + "requires": { + "@reach/component-component": "^0.1.3" + } + }, + "@reach/rect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.2.1.tgz", + "integrity": "sha512-aZ9RsNHDMQ3zETonikqu9/85iXxj+LPqZ9Gr9UAncj3AufYmGeWG3XG6b37B+7ORH+mkhVpLU2ZlIWxmOe9Cqg==", + "requires": { + "@reach/component-component": "^0.1.3", + "@reach/observe-rect": "^1.0.3" + } + }, + "@reach/tooltip": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.2.0.tgz", + "integrity": "sha512-RKJkGR+w3vS+flGjcVL82SK016E6rzjG8wC4ZtFu03VCAxJyhveG0uaB3juv7Rx+u8CEwv2gxfWgfMWgrJ2cRA==", + "requires": { + "@reach/auto-id": "0.2.0", + "@reach/portal": "^0.2.1", + "@reach/rect": "^0.2.1", + "@reach/utils": "^0.2.2", + "@reach/visually-hidden": "^0.1.4", + "prop-types": "^15.7.2" + } + }, + "@reach/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-jYeIi46AA5jh2gfdXD/nInUYfeLp3girRafiajP7AVHF6B4hpYAzUSx/ZH4xmPyf5alut5rml2DHxrv+X+Xu+A==" + }, + "@reach/visually-hidden": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@reach/visually-hidden/-/visually-hidden-0.1.4.tgz", + "integrity": "sha512-QHbzXjflSlCvDd6vJwdwx16mSB+vUCCQMiU/wK/CgVNPibtpEiIbisyxkpZc55DyDFNUIqP91rSUsNae+ogGDQ==" + }, + "@reach/window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@reach/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha512-JZshEuGsLvi6fUIJ7Unx12yNeM5SmqWjber2MLr9tfwf1hpNv73EiPBOIJyV0DjW7GXzjcOEvwnqysm59s2s/A==", + "requires": { + "@reach/component-component": "^0.1.3" + } + }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", @@ -1298,15 +1363,6 @@ "@babel/types": "^7.3.0" } }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, "@types/istanbul-lib-coverage": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz", @@ -1317,33 +1373,11 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.7.tgz", "integrity": "sha512-suFHr6hcA9mp8vFrZTgrmqW2ZU3mbWsryQtQlY/QvwTISCw7nw/j+bCQPPohqmskhmqa5wLNuMHTTsc+xf1MQg==" }, - "@types/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" - }, "@types/q": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, - "@types/react": { - "version": "16.8.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.14.tgz", - "integrity": "sha512-26tFVJ1omGmzIdFTFmnC5zhz1GTaqCjxgUxV4KzWvsybF42P7/j4RBn6UeO3KbHPXqKWZszMXMoI65xIWm954A==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-slick": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.3.tgz", - "integrity": "sha512-B6wU5ynINOolrByhoeJ448qZPjCFPcuhyQI5sjihjG8gQJuoTH6a4YQhuDm4umvbRVielJQANhptc8hmxA85IA==", - "requires": { - "@types/react": "*" - } - }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -1626,14 +1660,6 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" }, - "add-dom-event-listener": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", - "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", - "requires": { - "object-assign": "4.x" - } - }, "address": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", @@ -1693,74 +1719,6 @@ "color-convert": "^1.9.0" } }, - "ant-design-palettes": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ant-design-palettes/-/ant-design-palettes-1.1.3.tgz", - "integrity": "sha512-UpkkTp8egEN21KZNvY7sTcabLlkHvLvS71EVPk4CYi77Z9AaGGCaVn7i72tbOgWDrQp2wjIg8WgMbKBdK7GtWA==", - "requires": { - "tinycolor2": "^1.4.1" - } - }, - "antd": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/antd/-/antd-3.16.5.tgz", - "integrity": "sha512-7oZeEo/wkyH2NexaViI5EJp8HbCpqdonJYsEYOcS16o8QuI86PnK4HgH5dAH8/55WPG3dRO+h9YvZFLEk+uHfQ==", - "requires": { - "@ant-design/create-react-context": "^0.2.4", - "@ant-design/icons": "~1.2.0", - "@ant-design/icons-react": "~1.1.5", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/react-slick": "^0.23.3", - "array-tree-filter": "^2.1.0", - "babel-runtime": "6.x", - "classnames": "~2.2.6", - "copy-to-clipboard": "^3.0.8", - "create-react-class": "^15.6.3", - "css-animation": "^1.5.0", - "dom-closest": "^0.2.0", - "enquire.js": "^2.1.6", - "lodash": "^4.17.11", - "moment": "^2.24.0", - "omit.js": "^1.0.0", - "prop-types": "^15.6.2", - "raf": "^3.4.0", - "rc-animate": "^2.5.4", - "rc-calendar": "~9.12.1", - "rc-cascader": "~0.17.0", - "rc-checkbox": "~2.1.5", - "rc-collapse": "~1.11.1", - "rc-dialog": "~7.3.0", - "rc-drawer": "~1.7.6", - "rc-dropdown": "~2.4.1", - "rc-editor-mention": "^1.1.7", - "rc-form": "^2.4.0", - "rc-input-number": "~4.4.0", - "rc-menu": "~7.4.12", - "rc-notification": "~3.3.0", - "rc-pagination": "~1.17.7", - "rc-progress": "~2.3.0", - "rc-rate": "~2.5.0", - "rc-select": "~9.0.0", - "rc-slider": "~8.6.5", - "rc-steps": "~3.3.0", - "rc-switch": "~1.9.0", - "rc-table": "~6.5.0", - "rc-tabs": "~9.6.0", - "rc-time-picker": "~3.6.1", - "rc-tooltip": "~3.7.3", - "rc-tree": "~1.15.2", - "rc-tree-select": "~2.6.0", - "rc-trigger": "^2.6.2", - "rc-upload": "~2.6.0", - "rc-util": "^4.5.1", - "react-lazy-load": "^3.0.13", - "react-lifecycles-compat": "^3.0.4", - "react-slick": "~0.23.2", - "resize-observer-polyfill": "^1.5.0", - "shallowequal": "^1.1.0", - "warning": "~4.0.2" - } - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -1849,11 +1807,6 @@ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" }, - "array-tree-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -1961,14 +1914,6 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, - "async-validator": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", - "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", - "requires": { - "babel-runtime": "6.x" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3449,24 +3394,11 @@ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==" }, - "component-classes": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", - "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", - "requires": { - "component-indexof": "0.0.3" - } - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "component-indexof": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", - "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" - }, "compressible": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", @@ -3504,6 +3436,11 @@ } } }, + "compute-scroll-into-view": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz", + "integrity": "sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3680,16 +3617,6 @@ "sha.js": "^2.4.8" } }, - "create-react-class": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", - "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", - "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, "create-react-context": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.2.tgz", @@ -3736,15 +3663,6 @@ "randomfill": "^1.0.3" } }, - "css-animation": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.5.0.tgz", - "integrity": "sha512-hWYoWiOZ7Vr20etzLh3kpWgtC454tW5vn4I6rLANDgpzNSkO7UfOqyCEeaoBSG9CYWQpRkFWTWbWW8o3uZrNLw==", - "requires": { - "babel-runtime": "6.x", - "component-classes": "^1.2.5" - } - }, "css-blank-pseudo": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", @@ -3979,11 +3897,6 @@ "cssom": "0.3.x" } }, - "csstype": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.4.tgz", - "integrity": "sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg==" - }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -4561,19 +4474,6 @@ "esutils": "^2.0.2" } }, - "dom-align": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.8.2.tgz", - "integrity": "sha512-17vInOylbB7H4qua7QRsmQT05FFTZemO8BhnOPgF9BPqjAPDyQr/9V8fmJbn05vQ31m2gu3EJSSYN2u94szUZg==" - }, - "dom-closest": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-closest/-/dom-closest-0.2.0.tgz", - "integrity": "sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=", - "requires": { - "dom-matches": ">=1.0.1" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -4582,16 +4482,6 @@ "utila": "~0.4" } }, - "dom-matches": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz", - "integrity": "sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw=" - }, - "dom-scroll-into-view": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", - "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" - }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -4654,21 +4544,15 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" }, - "draft-js": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.10.5.tgz", - "integrity": "sha512-LE6jSCV9nkPhfVX2ggcRLA4FKs6zWq9ceuO/88BpXdNCS7mjRTgs0NsV6piUCJX9YxMsB9An33wnkMmU2sD2Zg==", + "downshift": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-3.2.10.tgz", + "integrity": "sha512-fEYNbV/qDLUHTxF9wALNe51Xe5zauUhy2sqgYG1CtmAfUFMI30UuSaisU8CD0DEsFSIsaEvsVgtabb6nTEhtaA==", "requires": { - "fbjs": "^0.8.15", - "immutable": "~3.7.4", - "object-assign": "^4.1.0" - }, - "dependencies": { - "immutable": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" - } + "@babel/runtime": "^7.1.2", + "compute-scroll-into-view": "^1.0.9", + "prop-types": "^15.6.0", + "react-is": "^16.5.2" } }, "duplexer": { @@ -4767,11 +4651,6 @@ "tapable": "^1.0.0" } }, - "enquire.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", - "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=" - }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", @@ -5304,11 +5183,6 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" }, - "eventlistener": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/eventlistener/-/eventlistener-0.0.1.tgz", - "integrity": "sha1-7Suqu4UiJ68rz4iRUscsY8pTLrg=" - }, "events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", @@ -5790,6 +5664,11 @@ "readable-stream": "^2.3.6" } }, + "focus-lock": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.6.3.tgz", + "integrity": "sha512-EU6ePgEauhWrzJEN5RtG1d1ayrWXhEnfzTjnieHj+jG9tNHDEhKTAnCn1TN3gs9h6XWCDH6cpeX1VXY/lzLwZg==" + }, "follow-redirects": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", @@ -6085,11 +5964,6 @@ "pify": "^3.0.0" } }, - "hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" - }, "handle-thing": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", @@ -6283,14 +6157,6 @@ "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" }, - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", - "requires": { - "react-is": "^16.7.0" - } - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -6500,11 +6366,6 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" - }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -6894,11 +6755,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "ismobilejs": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-0.5.1.tgz", - "integrity": "sha512-QX4STsOcBYqlTjVGuAdP1MiRVxtiUbRHOKH0v7Gn1EvfUVIQnrSdgCM4zB4VCZuIejnb2NUMUx0Bwd3EIG6yyA==" - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -8109,14 +7965,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json2mq": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", - "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", - "requires": { - "string-convert": "^0.2.0" - } - }, "json3": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", @@ -8329,51 +8177,21 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8406,11 +8224,6 @@ "lodash._reinterpolate": "~3.0.0" } }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, "lodash.unescape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", @@ -8502,6 +8315,20 @@ "object-visit": "^1.0.0" } }, + "match-sorter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-3.0.0.tgz", + "integrity": "sha512-EadS8Y3j3RRhrqwoPuyE5zI19tPwQR7cheMd81LpjU66252Mffbdcq5kObfjNrV0GLBXy+scbIjeeOEaNn/srQ==", + "requires": { + "remove-accents": "0.4.2" + }, + "dependencies": { + "remove-accents": { + "version": "0.4.2", + "bundled": true + } + } + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -8512,6 +8339,11 @@ "safe-buffer": "^5.1.2" } }, + "mdi-react": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.3.0.tgz", + "integrity": "sha512-Yf/aZplXLcl+aYlilfcBnCPRBueJMNOl7NxM+layFMRmCOWzxdER8ZsP2GZL7Vjc8U05Anh/mxoVaL0BS6/yCg==" + }, "mdn-data": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", @@ -8655,24 +8487,6 @@ "webpack-sources": "^1.1.0" } }, - "mini-store": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-2.0.0.tgz", - "integrity": "sha512-EG0CuwpQmX+XL4QVS0kxNwHW5ftSbhygu1qxQH0pipugjnPkbvkalCdQbEihMwtQY6d3MTN+MS0q+aurs+RfLQ==", - "requires": { - "hoist-non-react-statics": "^2.3.1", - "prop-types": "^15.6.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -8713,6 +8527,11 @@ "through2": "^2.0.0" } }, + "mitt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", + "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==" + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -8800,11 +8619,6 @@ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, - "mutationobserver-shim": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", - "integrity": "sha512-gciOLNN8Vsf7YzcqRjKzlAJ6y7e+B86u7i3KXes0xfxx/nfLmozlW1Vn+Sc9x3tPIePFgc1AeIFhtRgkqTjzDQ==" - }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -9134,14 +8948,6 @@ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "omit.js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz", - "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==", - "requires": { - "babel-runtime": "^6.23.0" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -10417,11 +10223,6 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, - "prettier": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.0.tgz", - "integrity": "sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==" - }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", @@ -10666,502 +10467,6 @@ } } }, - "rc-align": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", - "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", - "requires": { - "babel-runtime": "^6.26.0", - "dom-align": "^1.7.0", - "prop-types": "^15.5.8", - "rc-util": "^4.0.4" - } - }, - "rc-animate": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.6.0.tgz", - "integrity": "sha512-JXDycchgbOI+7T/VKmFWnAIn042LLScK1fNkmNunb0jz5q5aPGCAybx2bTo7X5t31Jkj9OsxKNb/vZPDPWufCg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "css-animation": "^1.3.2", - "prop-types": "15.x", - "raf": "^3.4.0", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-calendar": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/rc-calendar/-/rc-calendar-9.12.4.tgz", - "integrity": "sha512-AByRVQKcZcxciQDGUFWW4s0mQgb4nS1FMWv0pa5LwER7JP0CFpm1ql2gMPt+2fZ7BZCAv5IRgfmpReRef8e5pw==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "moment": "2.x", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.0", - "rc-util": "^4.1.1", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-cascader": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-0.17.1.tgz", - "integrity": "sha512-JED1iOLpj1+uob+0Asd4zwhhMRp3gLs2iYOY2/0OsdEsPc8Qj6TUwj8+isVtqyXiwGWG3vo8XgO6KCM/i7ZFqQ==", - "requires": { - "array-tree-filter": "^2.1.0", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.0", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.4", - "shallow-equal": "^1.0.0", - "warning": "^4.0.1" - } - }, - "rc-checkbox": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.1.6.tgz", - "integrity": "sha512-+VxQbt2Cwe1PxCvwosrAYXT6EQeGwrbLJB2K+IPGCSRPCKnk9zcub/0eW8A4kxjyyfh60PkwsAUZ7qmB31OmRA==", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "2.x", - "prop-types": "15.x", - "rc-util": "^4.0.4" - } - }, - "rc-collapse": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.11.1.tgz", - "integrity": "sha512-9HA8f7aWE0yabnzfE2v/7IyMb6dTmj052A9cyEMB0aT1sdLESpetMAzT3FkLcPT5fl7YNRkyVZ3zwkC5qMmzmA==", - "requires": { - "classnames": "2.x", - "css-animation": "1.x", - "prop-types": "^15.5.6", - "rc-animate": "2.x", - "react-is": "^16.7.0", - "shallowequal": "^1.1.0" - } - }, - "rc-dialog": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-7.3.1.tgz", - "integrity": "sha512-AlGpAWgz23RtZlmke/JZM7hJxBl5fylwfcp2dn0qS4v5T8nhaKT/t4WEtTGYMQcuXxPE06KGz6tXqhaQDnXw3Q==", - "requires": { - "babel-runtime": "6.x", - "rc-animate": "2.x", - "rc-util": "^4.4.0" - } - }, - "rc-drawer": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-1.7.8.tgz", - "integrity": "sha512-gshd9fG12iSFDHicKzZQf8YbrTPyXA+ubkmaIwrudreI6+ipDUpXByflhEgiaRBhkZyv4L0EkW1srjetyzkfwA==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.0", - "rc-util": "^4.5.1" - } - }, - "rc-dropdown": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-2.4.1.tgz", - "integrity": "sha512-p0XYn0wrOpAZ2fUGE6YJ6U8JBNc5ASijznZ6dkojdaEfQJAeZtV9KMEewhxkVlxGSbbdXe10ptjBlTEW9vEwEg==", - "requires": { - "babel-runtime": "^6.26.0", - "classnames": "^2.2.6", - "prop-types": "^15.5.8", - "rc-trigger": "^2.5.1", - "react-lifecycles-compat": "^3.0.2" - } - }, - "rc-editor-core": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/rc-editor-core/-/rc-editor-core-0.8.9.tgz", - "integrity": "sha512-fGTkTm96Kil/i9n5a3JwAzJcl2TkfjO1r1WBWf6NIOxXiJXpC3Lajkf3j6E5K7iz5AW0QRaSGnNQFBrwvXKKWA==", - "requires": { - "babel-runtime": "^6.26.0", - "classnames": "^2.2.5", - "draft-js": "^0.10.0", - "immutable": "^3.7.4", - "lodash": "^4.16.5", - "prop-types": "^15.5.8", - "setimmediate": "^1.0.5" - } - }, - "rc-editor-mention": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/rc-editor-mention/-/rc-editor-mention-1.1.12.tgz", - "integrity": "sha512-cPm2rQ7P+hXaKMsO0ajVv08QlTDcSPVtw8/lVr9D+QzQKRPChCqLw9rVGOa4YGYTeS3gVe8lBfLr8a9JKFk3gA==", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.0", - "draft-js": "~0.10.0", - "immutable": "^3.7.4", - "prop-types": "^15.5.8", - "rc-animate": "^2.3.0", - "rc-editor-core": "~0.8.3" - } - }, - "rc-form": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.4.tgz", - "integrity": "sha512-AHR2GGYJOlKG5jP6ZjqS+PVBrUUXt+kDJFgJeDw17k6RDVIrG1535MxDPgNmRXp2VM4GQij4sVvjaHvwFsUgCA==", - "requires": { - "async-validator": "~1.8.5", - "babel-runtime": "6.x", - "create-react-class": "^15.5.3", - "dom-scroll-into-view": "1.x", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.4", - "warning": "^4.0.3" - } - }, - "rc-hammerjs": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/rc-hammerjs/-/rc-hammerjs-0.6.9.tgz", - "integrity": "sha512-4llgWO3RgLyVbEqUdGsDfzUDqklRlQW5VEhE3x35IvhV+w//VPRG34SBavK3D2mD/UaLKaohgU41V4agiftC8g==", - "requires": { - "babel-runtime": "6.x", - "hammerjs": "^2.0.8", - "prop-types": "^15.5.9" - } - }, - "rc-input-number": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.4.1.tgz", - "integrity": "sha512-vgMjTNzBwgK6JkGVXfoHtYziTn4aFarYaHCYEwlJpDkLDvBxwcSlfXZ4ZGqS4MpouDKO0B1W1oPiXcJbJWG3zg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.0", - "prop-types": "^15.5.7", - "rc-util": "^4.5.1", - "rmc-feedback": "^2.0.0" - } - }, - "rc-menu": { - "version": "7.4.22", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.4.22.tgz", - "integrity": "sha512-6o/5H7y60O7Q9Yvp3YaqxPQA65zfh0goiWV98Xh2R95qYg2QRGP7aiMdYG0sjVpZR67oTneMMIoyfMudj9iQmA==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "dom-scroll-into-view": "1.x", - "ismobilejs": "^0.5.1", - "mini-store": "^2.0.0", - "mutationobserver-shim": "^0.3.2", - "prop-types": "^15.5.6", - "rc-animate": "2.x", - "rc-trigger": "^2.3.0", - "rc-util": "^4.1.0", - "resize-observer-polyfill": "^1.5.0" - } - }, - "rc-notification": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz", - "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "prop-types": "^15.5.8", - "rc-animate": "2.x", - "rc-util": "^4.0.4" - } - }, - "rc-pagination": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-1.17.14.tgz", - "integrity": "sha512-VnM0VQcXfw4vf30n2GnY8w44ZvjuuY1N8DvjbxDndTiNrX2vH+BFl4enC1yYIIdyv84jYfP8mWCEQZ+QscdY1A==", - "requires": { - "babel-runtime": "6.x", - "prop-types": "^15.5.7", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-progress": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.3.0.tgz", - "integrity": "sha512-hYBKFSsNgD7jsF8j+ZC1J8y5UIC2X/ktCYI/OQhQNSX6mGV1IXnUCjAd9gbLmzmpChPvKyymRNfckScUNiTpFQ==", - "requires": { - "babel-runtime": "6.x", - "prop-types": "^15.5.8" - } - }, - "rc-rate": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.5.0.tgz", - "integrity": "sha512-aXX5klRqbVZxvLghcKnLqqo7LvLVCHswEDteWsm5Gb7NBIPa1YKTcAbvb5SZ4Z4i4EeRoZaPwygRAWsQgGtbKw==", - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.5.8", - "rc-util": "^4.3.0", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-select": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.0.2.tgz", - "integrity": "sha512-lwFz/aINmbznQmKvq/jFipc922h+RhA+iKCicxAglTqC4qmXg2REKWzviT5Tk0kqVe4mHcfNX8PyvMEHSmkaLA==", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "2.x", - "component-classes": "1.x", - "dom-scroll-into-view": "1.x", - "prop-types": "^15.5.8", - "raf": "^3.4.0", - "rc-animate": "2.x", - "rc-menu": "^7.3.0", - "rc-trigger": "^2.5.4", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.2", - "warning": "^4.0.2" - } - }, - "rc-slider": { - "version": "8.6.9", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.9.tgz", - "integrity": "sha512-v5XwSARCyKGkalV7c54jwiuPNh8pGUg0i1opVD8YJVd8zQqbxepRoGmEE4xwRTxjR7Goao6/ARc7l2dGoPwZsg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.4", - "rc-tooltip": "^3.7.0", - "rc-util": "^4.0.4", - "shallowequal": "^1.0.1", - "warning": "^4.0.3" - } - }, - "rc-steps": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-3.3.1.tgz", - "integrity": "sha512-LGzmPYS9ETePo+6YbHlFukCdcKppeBZXO49ZxewaC7Cba00q0zrMXlexquZ4fm+9iz0IkpzwgmenvjsVWCmGOw==", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "^2.2.3", - "lodash": "^4.17.5", - "prop-types": "^15.5.7" - } - }, - "rc-switch": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-1.9.0.tgz", - "integrity": "sha512-Isas+egaK6qSk64jaEw4GgPStY4umYDbT7ZY93bZF1Af+b/JEsKsJdNOU2qG3WI0Z6tXo2DDq0kJCv8Yhu0zww==", - "requires": { - "classnames": "^2.2.1", - "prop-types": "^15.5.6", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-table": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-6.5.0.tgz", - "integrity": "sha512-UXsoTcJIr5Ehyf1GXAKLcc5x0/+cOSgBaKL7wt6vmVEIW5CF6bVJj4iOr7P8LGdoez/omoHmr5GXcW6/AZxR7A==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "component-classes": "^1.2.6", - "lodash": "^4.17.5", - "mini-store": "^2.0.0", - "prop-types": "^15.5.8", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.2", - "shallowequal": "^1.0.2", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "rc-tabs": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.6.3.tgz", - "integrity": "sha512-f4GotOvzfzY4fqj/Y9Npt3pxyyHceyj06yss2uhNlAb+PW25tn22LxgGhhFVn2RyUXrt5WT26HPgtHx9R9sN3Q==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "create-react-context": "0.2.2", - "lodash": "^4.17.5", - "prop-types": "15.x", - "raf": "^3.4.1", - "rc-hammerjs": "~0.6.0", - "rc-util": "^4.0.4", - "resize-observer-polyfill": "^1.5.1", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "rc-time-picker": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.6.4.tgz", - "integrity": "sha512-ZINzzmP1+bvyPt3oamfFTc0vjkqm1B++lIYDZaTbtK5EHpTyAUnaa/ZSAJQ5p36Lbl7Uh9F/U2E3djhP7nkXcQ==", - "requires": { - "classnames": "2.x", - "moment": "2.x", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.0" - } - }, - "rc-tooltip": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.3.tgz", - "integrity": "sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww==", - "requires": { - "babel-runtime": "6.x", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.2" - } - }, - "rc-tree": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-1.15.2.tgz", - "integrity": "sha512-VPXLA/GdV6U9N8evpl4rmjRsBkw5BoweqWjcVBVwYGzBtonNIFpdc+bnb7TDmd6S3mKOM7mXPbiSr2GKYdj4hA==", - "requires": { - "babel-runtime": "^6.23.0", - "classnames": "2.x", - "prop-types": "^15.5.8", - "rc-animate": "^3.0.0-rc.5", - "rc-util": "^4.5.1", - "react-lifecycles-compat": "^3.0.4", - "warning": "^3.0.0" - }, - "dependencies": { - "rc-animate": { - "version": "3.0.0-rc.6", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.0.0-rc.6.tgz", - "integrity": "sha512-oBLPpiT6Q4t6YvD/pkLcmofBP1p01TX0Otse8Q4+Mxt8J+VSDflLZGIgf62EwkvRwsQUkLPjZVFBsldnPKLzjg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "component-classes": "^1.2.6", - "fbjs": "^0.8.16", - "prop-types": "15.x", - "raf": "^3.4.0", - "rc-util": "^4.5.0", - "react-lifecycles-compat": "^3.0.4" - } - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "rc-tree-select": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.6.3.tgz", - "integrity": "sha512-FdOsEPe+1JkxE5+hBYV3qiImpRzZQvSlr0cCWMvCDtveukurhotJ6Dj7whDQhr71EJQrT9/OxEPaINm8reHYJw==", - "requires": { - "classnames": "^2.2.1", - "dom-scroll-into-view": "^1.2.1", - "prop-types": "^15.5.8", - "raf": "^3.4.0", - "rc-animate": "^3.0.0-rc.4", - "rc-tree": "~1.15.0", - "rc-trigger": "^3.0.0-rc.2", - "rc-util": "^4.5.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2", - "warning": "^4.0.1" - }, - "dependencies": { - "rc-animate": { - "version": "3.0.0-rc.6", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.0.0-rc.6.tgz", - "integrity": "sha512-oBLPpiT6Q4t6YvD/pkLcmofBP1p01TX0Otse8Q4+Mxt8J+VSDflLZGIgf62EwkvRwsQUkLPjZVFBsldnPKLzjg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "component-classes": "^1.2.6", - "fbjs": "^0.8.16", - "prop-types": "15.x", - "raf": "^3.4.0", - "rc-util": "^4.5.0", - "react-lifecycles-compat": "^3.0.4" - } - }, - "rc-trigger": { - "version": "3.0.0-rc.3", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-3.0.0-rc.3.tgz", - "integrity": "sha512-4vB6cpxcUdm2qO5VtB9q1TZz0MoWm9BzFLvGknulphGrl1qI6uxUsPDCvqnmujdpDdAKGGfjxntFpA7RtAwkFQ==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "prop-types": "15.x", - "raf": "^3.4.0", - "rc-align": "^2.4.1", - "rc-animate": "^3.0.0-rc.1", - "rc-util": "^4.4.0" - } - } - } - }, - "rc-trigger": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.2.tgz", - "integrity": "sha512-op4xCu95/gdHVaysyxxiYxbY+Z+UcIBSUY9nQfLqm1FlitdtnAN+owD5iMPfnnsRXntgcQ5+RdYKNUFQT5DjzA==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "prop-types": "15.x", - "rc-align": "^2.4.0", - "rc-animate": "2.x", - "rc-util": "^4.4.0" - } - }, - "rc-upload": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-2.6.3.tgz", - "integrity": "sha512-wM57UH/EEqW2/EcWz5nwnU07d4LHDHjBgxRin2Q56TW9JcFVnaQVq/JHycVFumsgSFV5CZfNW8PBROsKT9VFMw==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.7", - "warning": "4.x" - } - }, - "rc-util": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.6.0.tgz", - "integrity": "sha512-rbgrzm1/i8mgfwOI4t1CwWK7wGe+OwX+dNa7PVMgxZYPBADGh86eD4OcJO1UKGeajIMDUUKMluaZxvgraQIOmw==", - "requires": { - "add-dom-event-listener": "^1.1.0", - "babel-runtime": "6.x", - "prop-types": "^15.5.10", - "shallowequal": "^0.2.2" - }, - "dependencies": { - "shallowequal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", - "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", - "requires": { - "lodash.keys": "^3.1.2" - } - } - } - }, "react": { "version": "16.8.6", "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", @@ -11218,6 +10523,15 @@ } } }, + "react-clientside-effect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.0.tgz", + "integrity": "sha512-cVIsGG7SNHsQsCP4+fw7KFUB0HiYiU8hbvL640XaLCbZ31aK8/lj0qOKJ2K+xRjuQz/IM4Q4qclI0aEqTtcXtA==", + "requires": { + "@babel/runtime": "^7.0.0", + "shallowequal": "^1.1.0" + } + }, "react-copy-to-clipboard": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz", @@ -11329,22 +10643,22 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.5.tgz", "integrity": "sha512-O9JRum1Zq/qCPFH5qVEvDDrVun8Jv9vbHtZXCR1EuRj9sKg1xJTlHxBzU6AkCzpvxRLuiY4OKImy3cDLQ+UTdg==" }, + "react-focus-lock": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-1.19.1.tgz", + "integrity": "sha512-TPpfiack1/nF4uttySfpxPk4rGZTLXlaZl7ncZg/ELAk24Iq2B1UUaUioID8H8dneUXqznT83JTNDHDj+kwryw==", + "requires": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.6.3", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.0" + } + }, "react-is": { "version": "16.8.4", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz", "integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==" }, - "react-lazy-load": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/react-lazy-load/-/react-lazy-load-3.0.13.tgz", - "integrity": "sha1-OwqS0zbUPT8Nc8vm81sXBQsIuCQ=", - "requires": { - "eventlistener": "0.0.1", - "lodash.debounce": "^4.0.0", - "lodash.throttle": "^4.0.0", - "prop-types": "^15.5.8" - } - }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", @@ -11376,6 +10690,24 @@ } } }, + "react-remove-scroll": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-1.0.8.tgz", + "integrity": "sha512-AS6gFBO6T2CP0TgmDjq3Ip0Fz1HKyv+lzNrQAkJBSWGyOYaMWLMDy77mQJ7qEyy6fK0pI+Cz5x3X81/ux6SBew==", + "requires": { + "react-remove-scroll-bar": "^1.1.5", + "tslib": "^1.0.0" + } + }, + "react-remove-scroll-bar": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-1.1.5.tgz", + "integrity": "sha512-h2484atf4ayDOQS0rnw6UwWpwEX6abV+fC7ClMOpdNmbE9K0XTcj7YrknSOaP5h9prWT/uhUK7XZbV/17gTJdw==", + "requires": { + "react-style-singleton": "^1.1.0", + "tslib": "^1.0.0" + } + }, "react-router": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.0.tgz", @@ -11475,19 +10807,6 @@ "workbox-webpack-plugin": "4.2.0" } }, - "react-slick": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.23.2.tgz", - "integrity": "sha512-fM6DXX7+22eOcYE9cgaXUfioZL/Zw6fwS6aPMDBt0kLHl4H4fFNEbp4JsJQdEWMLUNFtUytNcvd9KRml22Tp5w==", - "requires": { - "classnames": "^2.2.5", - "enquire.js": "^2.1.6", - "json2mq": "^0.2.0", - "lodash.debounce": "^4.0.8", - "prettier": "^1.14.3", - "resize-observer-polyfill": "^1.5.0" - } - }, "react-split-pane": { "version": "0.1.87", "resolved": "https://registry.npmjs.org/react-split-pane/-/react-split-pane-0.1.87.tgz", @@ -11506,6 +10825,23 @@ "prop-types": "^15.5.4" } }, + "react-style-singleton": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-1.1.1.tgz", + "integrity": "sha512-0JD+XC5veR3oxf7GzIXipr89sM8R3rWnOR/gpzIV0DnoRBrcTvvkqyMu9icDYqM/6CWJhYcH5Jdy6Nim7PmoTQ==", + "requires": { + "invariant": "^2.2.4", + "tslib": "^1.0.0" + } + }, + "react-switch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-5.0.0.tgz", + "integrity": "sha512-+zxY9xj9dMc8Y4gv/kkqQrirfEiIQ+SlQfJDW1Wi81L3xoh1fcbBYyJyh0TnhM/U/b6HxuBmkmU4Ooxgtuoavw==", + "requires": { + "prop-types": "^15.6.2" + } + }, "react-window": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.1.tgz", @@ -11904,15 +11240,6 @@ "inherits": "^2.0.1" } }, - "rmc-feedback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rmc-feedback/-/rmc-feedback-2.0.0.tgz", - "integrity": "sha512-5PWOGOW7VXks/l3JzlOU9NIxRpuaSS8d9zA3UULUCuTKnpwBHNvv1jSJzxgbbCQeYzROWUpgKI4za3X4C/mKmQ==", - "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5" - } - }, "rsvp": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", @@ -12253,11 +11580,6 @@ } } }, - "shallow-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.1.0.tgz", - "integrity": "sha512-0SW1nWo1hnabO62SEeHsl8nmTVVEzguVWZCj5gaQrgWAxz/BaCja4OWdJBWLVPDxdtE/WU7c98uUCCXyPHSCvw==" - }, "shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -12739,11 +12061,6 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, - "string-convert": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", - "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=" - }, "string-length": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", @@ -13050,11 +12367,6 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", diff --git a/client/package.json b/client/package.json index 5826c5dd9..90a62497b 100644 --- a/client/package.json +++ b/client/package.json @@ -4,11 +4,18 @@ "private": true, "proxy": "http://localhost:3010", "dependencies": { - "antd": "^3.16.5", + "@reach/dialog": "^0.2.8", + "@reach/menu-button": "^0.1.17", + "@reach/tooltip": "^0.2.0", "brace": "^0.11.1", "d3": "^5.9.2", + "downshift": "^3.2.10", "keymaster": "^1.6.2", "lodash": "^4.17.11", + "match-sorter": "^3.0.0", + "mdi-react": "^5.3.0", + "mitt": "^1.1.3", + "moment": "^2.24.0", "prop-types": "^15.7.2", "react": "^16.8.6", "react-ace": "^6.5.0", @@ -19,6 +26,7 @@ "react-router-dom": "^5.0.0", "react-scripts": "3.0.0", "react-split-pane": "^0.1.87", + "react-switch": "^5.0.0", "react-window": "^1.8.1", "sql-formatter": "^2.3.2", "taucharts": "^2.7.2", diff --git a/client/src/ForgotPassword.js b/client/src/ForgotPassword.js index 05b355342..1fe0af7f1 100644 --- a/client/src/ForgotPassword.js +++ b/client/src/ForgotPassword.js @@ -1,10 +1,10 @@ -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { Redirect } from 'react-router-dom'; -import fetchJson from './utilities/fetch-json.js'; -import message from 'antd/lib/message'; -import Input from 'antd/lib/input'; +import Button from './common/Button'; +import Input from './common/Input'; +import message from './common/message'; import Spacer from './common/Spacer'; -import Button from 'antd/lib/button'; +import fetchJson from './utilities/fetch-json.js'; function ForgotPassword() { const [email, setEmail] = useState(''); diff --git a/client/src/PasswordReset.js b/client/src/PasswordReset.js index b6f1748de..3ef99cf4c 100644 --- a/client/src/PasswordReset.js +++ b/client/src/PasswordReset.js @@ -1,10 +1,10 @@ -import Button from 'antd/lib/button'; -import Input from 'antd/lib/input'; -import message from 'antd/lib/message'; -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { Redirect } from 'react-router-dom'; -import fetchJson from './utilities/fetch-json.js'; +import Button from './common/Button'; +import Input from './common/Input'; +import message from './common/message'; import Spacer from './common/Spacer'; +import fetchJson from './utilities/fetch-json.js'; function PasswordReset({ passwordResetId }) { const [email, setEmail] = useState(''); diff --git a/client/src/QueryChartOnly.js b/client/src/QueryChartOnly.js index 91d00e670..f8c8ae862 100644 --- a/client/src/QueryChartOnly.js +++ b/client/src/QueryChartOnly.js @@ -1,10 +1,10 @@ import PropTypes from 'prop-types'; -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import ExportButton from './common/ExportButton.js'; import IncompleteDataNotification from './common/IncompleteDataNotification'; import SqlpadTauChart from './common/SqlpadTauChart.js'; -import fetchJson from './utilities/fetch-json.js'; import { exportPng } from './common/tauChartRef'; +import fetchJson from './utilities/fetch-json.js'; function QueryChartOnly({ queryId }) { const [isRunning, setIsRunning] = useState(false); @@ -52,7 +52,7 @@ function QueryChartOnly({ queryId }) { }} >
        - {query ? query.name : ''} + {query ? query.name : ''}
        {incomplete && }
        - {query ? query.name : ''} + {query ? query.name : ''}
        {incomplete && } diff --git a/client/src/SignIn.js b/client/src/SignIn.js index 430e15710..0e2a33737 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -1,13 +1,13 @@ -import Button from 'antd/lib/button'; -import Icon from 'antd/lib/icon'; -import Input from 'antd/lib/input'; -import message from 'antd/lib/message'; -import React, { useState, useEffect } from 'react'; +import GoogleIcon from 'mdi-react/GoogleIcon'; +import React, { useEffect, useState } from 'react'; +import { Link, Redirect } from 'react-router-dom'; import { connect } from 'unistore/react'; +import Button from './common/Button'; +import Input from './common/Input'; +import message from './common/message'; +import Spacer from './common/Spacer'; import { actions } from './stores/unistoreStore'; -import { Link, Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; -import Spacer from './common/Spacer'; function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { const [email, setEmail] = useState(''); @@ -86,7 +86,7 @@ function SignIn({ config, smtpConfigured, passport, refreshAppContext }) {
        diff --git a/client/src/SignUp.js b/client/src/SignUp.js index 8320e72b2..ccc91870e 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -1,12 +1,12 @@ -import Button from 'antd/lib/button'; -import Input from 'antd/lib/input'; -import message from 'antd/lib/message'; -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; +import { Redirect } from 'react-router-dom'; import { connect } from 'unistore/react'; +import Button from './common/Button'; +import Input from './common/Input'; +import message from './common/message'; +import Spacer from './common/Spacer'; import { actions } from './stores/unistoreStore'; -import { Redirect } from 'react-router-dom'; import fetchJson from './utilities/fetch-json.js'; -import Spacer from './common/Spacer'; function SignUp({ adminRegistrationOpen }) { const [email, setEmail] = useState(''); diff --git a/client/src/common/Button.js b/client/src/common/Button.js new file mode 100644 index 000000000..f8840fc42 --- /dev/null +++ b/client/src/common/Button.js @@ -0,0 +1,47 @@ +import React from 'react'; +import styles from './Button.module.css'; +import Tooltip from './Tooltip'; + +const ICON_SIZE = 18; + +const Button = React.forwardRef( + ( + { children, icon, type, htmlType, tooltip, disabled, className, ...rest }, + ref + ) => { + const classNames = [styles.btn]; + + if (type === 'primary') { + classNames.push(styles.primary); + } else if (type === 'danger') { + classNames.push(styles.danger); + } + + if (className) { + classNames.push(className); + } + + const button = ( + + ); + + // If the button is disabled the tooltip gets weird on hover + if (!tooltip || disabled) { + return button; + } + + return {button}; + } +); + +export default Button; diff --git a/client/src/common/Button.module.css b/client/src/common/Button.module.css new file mode 100644 index 000000000..19fa7c3ad --- /dev/null +++ b/client/src/common/Button.module.css @@ -0,0 +1,100 @@ +.btn { + line-height: 1.499; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-weight: 400; + white-space: nowrap; + text-align: center; + background-image: none; + border: 1px solid transparent; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + cursor: pointer; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + user-select: none; + touch-action: manipulation; + height: 32px; + padding: 0 10px; + font-size: 14px; + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: rgb(217, 217, 217); + border-top-color: rgb(217, 217, 217, 0.5); + border-left-color: rgb(217, 217, 217, 0.5); +} + +.btn:hover, +.btn:focus { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; + box-shadow: 0 2px 0 rgba(64, 169, 255, 0.5); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active { + text-decoration: none; + background: #fff; +} + +.btn:focus { + outline: 0; +} + +.primary { + color: #fff; + background-color: #1890ff; + border-color: #1890ff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12); + box-shadow: 0 2px 0 rgb(9, 100, 185, 0.5); +} + +.primary:hover, +.primary:focus { + color: #fff; + background-color: #40a9ff; + border-color: #40a9ff; +} + +.primary:active { + color: #fff; + background-color: #096dd9; + border-color: #096dd9; +} + +.danger { + color: #f5222d; + background-color: #f5f5f5; + border-color: #d9d9d9; +} + +.danger:hover { + color: #fff; + background-color: #ff4d4f; + border-color: #ff4d4f; +} + +.danger:focus { + color: #ff4d4f; + background-color: #fff; + border-color: #ff4d4f; +} + +.danger:active { + color: #fff; + background-color: #cf1322; + border-color: #cf1322; +} + +.btn:disabled, +.btn[disabled] { + color: rgba(0, 0, 0, 0.25); + background-color: #eee; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + border: 1px solid transparent; + border-color: #d9d9d9; +} diff --git a/client/src/common/ButtonLink.js b/client/src/common/ButtonLink.js new file mode 100644 index 000000000..01a3cf408 --- /dev/null +++ b/client/src/common/ButtonLink.js @@ -0,0 +1,33 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import styles from './ButtonLink.module.css'; +import Tooltip from './Tooltip'; + +const ICON_SIZE = 20; + +const ButtonLink = ({ className, children, icon, tooltip, ...rest }) => { + const classNames = [styles.btnLink]; + if (className) { + classNames.push(className); + } + + const link = ( + + {icon && React.cloneElement(icon, { size: ICON_SIZE }, null)} + {children && icon && } + {children} + + ); + + if (tooltip) { + return ( + + {link} + + ); + } + + return link; +}; + +export default ButtonLink; diff --git a/client/src/common/ButtonLink.module.css b/client/src/common/ButtonLink.module.css new file mode 100644 index 000000000..db76f5063 --- /dev/null +++ b/client/src/common/ButtonLink.module.css @@ -0,0 +1,56 @@ +.btnLink { + line-height: 1.499; + position: relative; + display: inline-flex; + align-items: center; + font-weight: 400; + white-space: nowrap; + text-align: center; + background-image: none; + border: 1px solid transparent; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + cursor: pointer; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + user-select: none; + touch-action: manipulation; + height: 32px; + padding: 0 10px; + font-size: 14px; + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: rgb(217, 217, 217); + border-top-color: rgb(217, 217, 217, 0.5); + border-left-color: rgb(217, 217, 217, 0.5); + outline: 0; +} + +.btnLink:hover, +.btnLink:focus { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; + box-shadow: 0 2px 0 rgba(64, 169, 255, 0.5); + outline: 0; +} + +.btnLink:hover, +.btnLink:focus, +.btnLink:active { + text-decoration: none; + background: #fff; + outline: 0; +} + +.btnLink:focus { + outline: 0; +} + +.btnLink:disabled, +.btnLink[disabled] { + color: rgba(0, 0, 0, 0.25); + background-color: #eee; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + border: 1px solid transparent; + border-color: #d9d9d9; +} diff --git a/client/src/common/DeleteConfirmButton.js b/client/src/common/DeleteConfirmButton.js new file mode 100644 index 000000000..fc37d036f --- /dev/null +++ b/client/src/common/DeleteConfirmButton.js @@ -0,0 +1,69 @@ +import { Dialog } from '@reach/dialog'; +import React, { useRef, useState } from 'react'; +import base from './base.module.css'; +import Button from './Button'; + +const dialogStyle = { + width: '500px', + borderRadius: '2px' +}; + +const DeleteConfirmButton = React.forwardRef( + ({ children, confirmMessage, onConfirm, className, ...rest }, ref) => { + const [visible, setVisible] = useState(false); + const cancelEl = useRef(null); + + return ( + <> + + {visible && ( + setVisible(false)} + className={base.shadow2} + style={dialogStyle} + initialFocusRef={cancelEl} + > +
        + {confirmMessage} +
        +
        + + +
        +
        + )} + + ); + } +); + +export default DeleteConfirmButton; diff --git a/client/src/common/Divider.js b/client/src/common/Divider.js new file mode 100644 index 000000000..c4798eb5c --- /dev/null +++ b/client/src/common/Divider.js @@ -0,0 +1,18 @@ +import React from 'react'; + +const Divider = ({ style, ...rest }) => { + const s = Object.assign( + { + height: 16 + }, + style + ); + + return ( +
        +
        +
        + ); +}; + +export default Divider; diff --git a/client/src/common/Drawer.js b/client/src/common/Drawer.js index 0eb0108e9..dc68eb745 100644 --- a/client/src/common/Drawer.js +++ b/client/src/common/Drawer.js @@ -1,5 +1,6 @@ -import Drawer from 'antd/lib/drawer'; -import React, { useEffect } from 'react'; +import { Dialog } from '@reach/dialog'; +import React from 'react'; +import base from './base.module.css'; function DrawerWrapper({ title, @@ -9,35 +10,41 @@ function DrawerWrapper({ placement, children }) { - useEffect(() => { - if (visible) { - function handler(event) { - if (event.code === 'Escape') { - onClose(); - return false; - } - } - window.addEventListener('keydown', handler); - return () => window.removeEventListener('keydown', handler); - } - }, [visible, onClose]); + const style = { + height: '100vh', + margin: '0', + overflow: 'auto', + width, + position: 'absolute', + display: 'flex', + flexDirection: 'column' + }; - return ( - - {children} - - ); + if (placement === 'right') { + style.right = 0; + } + + if (visible) { + return ( + +
        + {title} +
        +
        + {children} +
        +
        + ); + } + return null; } export default DrawerWrapper; diff --git a/client/src/common/EditableTagGroup.js b/client/src/common/EditableTagGroup.js deleted file mode 100644 index ea2a6c3e7..000000000 --- a/client/src/common/EditableTagGroup.js +++ /dev/null @@ -1,101 +0,0 @@ -import AutoComplete from 'antd/lib/auto-complete'; -import Icon from 'antd/lib/icon'; -import Tag from 'antd/lib/tag'; -import PropTypes from 'prop-types'; -import React, { useState, useEffect, useRef } from 'react'; - -function EditableTagGroup({ onChange, tags, tagOptions }) { - const [inputVisible, setInputVisible] = useState(false); - const [inputValue, setInputValue] = useState(''); - const inputEl = useRef(null); - - useEffect(() => { - if (inputVisible && inputValue === '') { - inputEl.current.focus(); - } - }, [inputVisible, inputValue]); - - const handleClose = removedTag => { - const { onChange, tags } = this.props; - const newTags = tags.filter(tag => tag !== removedTag); - onChange(newTags); - }; - - const showInput = () => { - setInputValue(''); - setInputVisible(true); - }; - - const handleInputChange = value => setInputValue(value); - - const handleInputBlur = () => { - setInputValue(''); - setInputVisible(false); - }; - - const handleInputSelect = value => { - if (value && tags.indexOf(value) === -1) { - tags = [...tags, value]; - } - setInputValue(''); - setInputVisible(false); - onChange(tags); // TODO this was done on callback? - }; - - const filterOption = (inputValue, option) => - option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== - -1; - - const dataSource = tagOptions.slice(); - if (inputValue && dataSource.indexOf(inputValue) === -1) { - dataSource.unshift(inputValue); - } - - return ( -
        - {tags.map((tag, index) => { - return ( - handleClose(tag)}> - {tag} - - ); - })} - {inputVisible && ( - - )} - {!inputVisible && ( - - New Tag - - )} -
        - ); -} - -EditableTagGroup.propTypes = { - onChange: PropTypes.func, - tagOptions: PropTypes.array, - tags: PropTypes.array -}; - -EditableTagGroup.defaultProps = { - onChange: () => {}, - tagOptions: [], - tags: [] -}; - -export default EditableTagGroup; diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index a55782c54..88219535f 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -1,11 +1,9 @@ -import Button from 'antd/lib/button'; -import Dropdown from 'antd/lib/dropdown'; -import Icon from 'antd/lib/icon'; -import Menu from 'antd/lib/menu'; import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'unistore/react'; +import Button from '../common/Button'; import { actions } from '../stores/unistoreStore'; +import ButtonLink from './ButtonLink'; function ExportButton({ config, cacheKey, onSaveImageClick }) { if (!config) { @@ -22,33 +20,23 @@ function ExportButton({ config, cacheKey, onSaveImageClick }) { const xlsxDownloadLink = `${baseUrl}/download-results/${cacheKey}.xlsx`; return ( - - {onSaveImageClick && ( - png - )} - - - csv - - - - - xlsx - - -
    - } - > - - + <> + {onSaveImageClick && } + + csv + + + xlsx + + ); } diff --git a/client/src/common/FormExplain.js b/client/src/common/FormExplain.js new file mode 100644 index 000000000..ae19d3397 --- /dev/null +++ b/client/src/common/FormExplain.js @@ -0,0 +1,6 @@ +import React from 'react'; +import styles from './FormExplain.module.css'; + +export default function FormExplain({ children }) { + return {children}; +} diff --git a/client/src/common/FormExplain.module.css b/client/src/common/FormExplain.module.css new file mode 100644 index 000000000..dbad0247d --- /dev/null +++ b/client/src/common/FormExplain.module.css @@ -0,0 +1,10 @@ +.formExplain { + clear: both; + display: inline-block; + min-height: 22px; + margin-top: 4px; + color: rgba(0, 0, 0, 0.45); + font-size: 12px; + line-height: 1.5; + transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); +} diff --git a/client/src/common/HorizontalFormItem.js b/client/src/common/HorizontalFormItem.js new file mode 100644 index 000000000..7712427d2 --- /dev/null +++ b/client/src/common/HorizontalFormItem.js @@ -0,0 +1,24 @@ +import React from 'react'; + +export default function HorizontalFormItem({ + leftWidth = '35%', + rightWidth = '65%', + label, + children +}) { + return ( +
    +
    + +
    +
    {children}
    +
    + ); +} diff --git a/client/src/common/IconButtonLink.js b/client/src/common/IconButtonLink.js deleted file mode 100644 index 9cf3aa11e..000000000 --- a/client/src/common/IconButtonLink.js +++ /dev/null @@ -1,9 +0,0 @@ -import { Link } from 'react-router-dom'; -import React from 'react'; - -function IconButtonLink({ className, ...rest }) { - const cn = 'ant-btn ant-btn-icon-only ' + (className || ''); - return ; -} - -export default IconButtonLink; diff --git a/client/src/common/IncompleteDataNotification.js b/client/src/common/IncompleteDataNotification.js index ce2fc0a59..b2ebd8cda 100644 --- a/client/src/common/IncompleteDataNotification.js +++ b/client/src/common/IncompleteDataNotification.js @@ -1,20 +1,21 @@ -import Icon from 'antd/lib/icon'; -import Tooltip from 'antd/lib/tooltip'; -import Typography from 'antd/lib/typography'; +import AlertIcon from 'mdi-react/AlertCircleIcon'; import React from 'react'; - -const { Text } = Typography; +import Text from './Text'; +import Tooltip from './Tooltip'; function IncompleteDataNotification() { return ( - - - Incomplete - + {/* span use in place of wrapping Text with forwardRef needed by Tooltip */} + + + + Incomplete + + ); } diff --git a/client/src/common/Input.js b/client/src/common/Input.js new file mode 100644 index 000000000..dfde5a855 --- /dev/null +++ b/client/src/common/Input.js @@ -0,0 +1,20 @@ +import React from 'react'; +import styles from './Input.module.css'; + +export default function Input({ children, error, className, ...rest }) { + const classNames = [styles.input]; + + if (error) { + classNames.push(styles.danger); + } + + if (className) { + classNames.push(className); + } + + return ( + + {children} + + ); +} diff --git a/client/src/common/Input.module.css b/client/src/common/Input.module.css new file mode 100644 index 000000000..194d5c61b --- /dev/null +++ b/client/src/common/Input.module.css @@ -0,0 +1,53 @@ +.input { + box-sizing: border-box; + margin: 0; + padding: 0; + font-variant: tabular-nums; + list-style: none; + font-feature-settings: 'tnum'; + position: relative; + display: inline-block; + width: 100%; + height: 32px; + padding: 4px 11px; + color: rgba(0, 0, 0, 0.65); + font-size: 14px; + line-height: 1.5; + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 2px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.29); +} + +.input:focus { + border-color: #40a9ff; + border-right-width: 1px !important; + outline: 0; + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +} + +.input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.danger { + border-color: #f5222d; + box-shadow: inset 0 1px 1px rgba(245, 34, 45, 0.5); +} + +.danger:focus { + border-color: #ff4d4f; + border-right-width: 1px !important; + outline: 0; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); +} + +.danger:hover { + border-color: #ff4d4f; +} + +.danger::placeholder { + color: #f5222d; +} diff --git a/client/src/common/ListItem.js b/client/src/common/ListItem.js new file mode 100644 index 000000000..b80084bb8 --- /dev/null +++ b/client/src/common/ListItem.js @@ -0,0 +1,25 @@ +import React from 'react'; +import base from './base.module.css'; + +const ListItem = ({ children, className, style, ...rest }) => { + const classNames = [base.borderBottom]; + if (className) { + classNames.push(className); + } + const s = Object.assign( + { + display: 'flex', + alignItems: 'center', + width: '100%', + minHeight: 48 + }, + style + ); + return ( +
    + {children} +
    + ); +}; + +export default ListItem; diff --git a/client/src/common/Modal.js b/client/src/common/Modal.js new file mode 100644 index 000000000..4fd1150e9 --- /dev/null +++ b/client/src/common/Modal.js @@ -0,0 +1,37 @@ +import { Dialog } from '@reach/dialog'; +import CloseIcon from 'mdi-react/CloseIcon'; +import React from 'react'; +import base from './base.module.css'; +import Button from './Button'; + +function Modal({ title, visible, onClose, width, children }) { + if (visible) { + return ( + +
    + {title} +
    + + {children} +
    + ); + } + return null; +} + +export default Modal; diff --git a/client/src/common/MultiSelect.js b/client/src/common/MultiSelect.js new file mode 100644 index 000000000..6b08ad454 --- /dev/null +++ b/client/src/common/MultiSelect.js @@ -0,0 +1,177 @@ +import Downshift from 'downshift'; +import React, { useRef } from 'react'; +import styles from './MultiSelect.module.css'; +import { getItems, Item, Menu } from './MultiSelectHelpers'; +import Tag from './Tag'; + +/** + * This component was quickly hacked together using the Downshift multiselect example + * A lot of that example was changed and reduced down to what this is here. + * If anyone out there more familiar with downshift wants to clean this up by all means feel free + */ +function MultiSelect({ selectedItems = [], options, onChange }) { + const input = useRef(); + + const itemToString = item => (item ? item.name : ''); + + const stateReducer = (state, changes) => { + switch (changes.type) { + case Downshift.stateChangeTypes.keyDownArrowUp: + return { + ...changes, + isOpen: state.highlightedIndex === 0 ? false : state.isOpen + }; + case Downshift.stateChangeTypes.keyDownEnter: + case Downshift.stateChangeTypes.clickItem: + return { + ...changes, + highlightedIndex: 0, + isOpen: false, + inputValue: '' + }; + default: + return changes; + } + }; + + const removeItem = item => { + onChange(selectedItems.filter(i => i !== item)); + }; + + const handleSelection = selectedItem => { + const callOnChange = () => { + onChange(selectedItems); + }; + if (selectedItems.includes(selectedItem)) { + removeItem(selectedItem, callOnChange); + } else { + addSelectedItem(selectedItem, callOnChange); + } + }; + + const addSelectedItem = (item, cb) => { + onChange([...selectedItems, item]); + }; + + return ( + + {({ + getInputProps, + getMenuProps, + setState, + selectItem, + isOpen, + inputValue, + getItemProps, + highlightedIndex, + toggleMenu + }) => ( +
    +
    { + toggleMenu(); + !isOpen && input.current.focus(); + }} + > + {selectedItems.length > 0 + ? selectedItems.map(item => ( + removeItem(item)}> + {item.name} + + )) + : null} + i.name === inputValue.toLowerCase() + ); + + // If there isn't an existing item selected already + // try to find the item in the list that would be presented to user + // If we can find it there, select that, otherwise add a new item + if (!existingItem) { + const items = getItems( + options, + selectedItems, + inputValue + ); + const found = items.find( + item => + item.name.toLowerCase() === + inputValue.toLowerCase() || + item.id.toLowerCase() === inputValue.toLowerCase() + ); + + if (found) { + selectItem(found); + } else { + selectItem({ + id: inputValue, + name: inputValue + }); + } + } + + setState({ + inputValue: '', + isOpen: false + }); + } + if (event.key === 'Backspace' && !inputValue) { + removeItem(selectedItems[selectedItems.length - 1]); + } + if (event.key === 'Escape' && !isOpen) { + event.nativeEvent.preventDownshiftDefault = true; + } + } + })} + /> +
    + + {isOpen + ? getItems(options, selectedItems, inputValue).map( + (item, index) => ( + + {item.name} + + ) + ) + : null} + +
    + )} +
    + ); +} + +export default MultiSelect; diff --git a/client/src/common/MultiSelect.module.css b/client/src/common/MultiSelect.module.css new file mode 100644 index 000000000..635aa241c --- /dev/null +++ b/client/src/common/MultiSelect.module.css @@ -0,0 +1,92 @@ +.container { + box-sizing: border-box; + margin: 0; + padding: 0; + font-variant: tabular-nums; + list-style: none; + font-feature-settings: 'tnum'; + position: relative; + /* display: inline-block; */ + width: 100%; + min-height: 32px; + /* padding: 4px 11px; */ + color: rgba(0, 0, 0, 0.65); + font-size: 14px; + line-height: 1.5; + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 2px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.29); + + /* this was in an inner container maybe needs to be moved out */ + display: inline-flex; + flex-wrap: wrap; + align-items: center; +} + +.input { + border: none; + flex-grow: 1; + + box-sizing: border-box; + margin: 2px; + padding: 0; + font-variant: tabular-nums; + list-style: none; + font-feature-settings: 'tnum'; + position: relative; + border-radius: 2px; + + /* width: 100%; */ + height: 28px; + padding: 4px 11px; + color: rgba(0, 0, 0, 0.65); + font-size: 14px; + line-height: 14px; +} + +.item { + position: relative; + cursor: pointer; + display: block; + border: none; + height: auto; + text-align: left; + line-height: 1em; + /* color: rgba(0, 0, 0, 0.95); */ + /* font-size: 1rem; */ + text-transform: none; + /* font-weight: 400; */ + box-shadow: none; + /* padding: 0.8rem 1.1rem; */ + padding: 8px; + white-space: normal; + overflow-wrap: normal; +} + +.itemActive { + background: #1890ff; + color: white; +} + +.itemSelected { + color: rgba(0, 0, 0, 0.95); + font-weight: 700; +} + +.menu { + padding: 0px; + margin-top: 0px; + position: absolute; + background-color: white; + width: 100%; + max-height: 10rem; + overflow: hidden auto; + outline: 0px; + transition: opacity 0.1s ease 0s; + border-radius: 0px 0px 2px 2px; + box-shadow: rgba(34, 36, 38, 0.15) 0px 2px 3px 0px; + z-index: 99999; + border: none; +} diff --git a/client/src/common/MultiSelectHelpers.js b/client/src/common/MultiSelectHelpers.js new file mode 100644 index 000000000..b847e13fe --- /dev/null +++ b/client/src/common/MultiSelectHelpers.js @@ -0,0 +1,40 @@ +import React from 'react'; +import matchSorter from 'match-sorter'; +import styles from './MultiSelect.module.css'; + +const Item = function Item({ isActive, isSelected, ...rest }) { + const classNames = [styles.item]; + if (isActive) { + classNames.push(styles.itemActive); + } + if (isSelected) { + classNames.push(styles.itemSelected); + } + return
  • ; +}; + +const Menu = React.forwardRef(({ isOpen, ...rest }, ref) => { + const classNames = [styles.menu]; + const style = {}; + if (!isOpen) { + style.border = 'none'; + } + return ( +
      + ); +}); + +function getItems(allItems, selectedItems, inputValue) { + const selectedById = {}; + selectedItems.forEach(item => (selectedById[item.id] = item)); + + const unselectedItems = allItems.filter(item => !selectedById[item.id]); + + return inputValue + ? matchSorter(unselectedItems, inputValue, { + keys: ['name'] + }) + : unselectedItems; +} + +export { Menu, Item, getItems }; diff --git a/client/src/common/Select.js b/client/src/common/Select.js new file mode 100644 index 000000000..170bd715a --- /dev/null +++ b/client/src/common/Select.js @@ -0,0 +1,19 @@ +import React from 'react'; +import styles from './Select.module.css'; + +export default function Select({ children, error, className, ...rest }) { + const classNames = [styles.select]; + + if (className) { + classNames.push(className); + } + if (error) { + classNames.push(styles.danger); + } + + return ( + + ); +} diff --git a/client/src/common/Select.module.css b/client/src/common/Select.module.css new file mode 100644 index 000000000..48a124829 --- /dev/null +++ b/client/src/common/Select.module.css @@ -0,0 +1,47 @@ +.select { + box-sizing: border-box; + margin: 0; + padding: 0; + font-variant: tabular-nums; + list-style: none; + -webkit-font-feature-settings: 'tnum'; + font-feature-settings: 'tnum', 'tnum'; + position: relative; + display: inline-block; + width: 100%; + height: 32px; + padding: 4px 11px; + color: rgba(0, 0, 0, 0.65); + font-size: 14px; + line-height: 1.5; + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + /* This isn't even respected because html, css, and select is dumb */ + border-radius: 2px; +} + +.select:focus { + border-color: #40a9ff; + outline: 0; + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +} + +.danger { + border-color: #f5222d; +} + +.danger:focus { + border-color: #ff4d4f; + border-right-width: 1px !important; + outline: 0; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); +} + +.danger:hover { + border-color: #ff4d4f; +} + +.danger::placeholder { + color: #f5222d; +} diff --git a/client/src/common/SpinKitCube.css b/client/src/common/SpinKitCube.css index 2cdf30906..5f6e2f177 100644 --- a/client/src/common/SpinKitCube.css +++ b/client/src/common/SpinKitCube.css @@ -8,7 +8,8 @@ .sk-cube-grid .sk-cube { width: 33%; height: 33%; - background-color: #333; + /* background-color: #333; */ + background-color: magenta; float: left; -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; @@ -57,10 +58,12 @@ 100% { -webkit-transform: scale3D(1, 1, 1); transform: scale3D(1, 1, 1); + background-color: magenta; } 35% { -webkit-transform: scale3D(0, 0, 1); transform: scale3D(0, 0, 1); + background-color: rgb(0, 183, 255); } } @@ -70,9 +73,13 @@ 100% { -webkit-transform: scale3D(1, 1, 1); transform: scale3D(1, 1, 1); + background-color: rgb(0, 183, 255); + box-shadow: rgba(247, 7, 247, 0.5) 2px 2px 20px 2px; } 35% { -webkit-transform: scale3D(0, 0, 1); transform: scale3D(0, 0, 1); + background-color: magenta; + box-shadow: rgba(64, 169, 255, 0.5) 2px 2px 20px 2px; } } diff --git a/client/src/common/Tag.js b/client/src/common/Tag.js new file mode 100644 index 000000000..5f630d7b8 --- /dev/null +++ b/client/src/common/Tag.js @@ -0,0 +1,32 @@ +import React from 'react'; +import styles from './Tag.module.css'; +import base from './base.module.css'; +import CloseIcon from 'mdi-react/CloseIcon'; + +function Tag({ children, onClose }) { + return ( +
      + {children} + {onClose && ( + <> + + + + )} +
      + ); +} + +export default Tag; diff --git a/client/src/common/Tag.module.css b/client/src/common/Tag.module.css new file mode 100644 index 000000000..6a7da2cb0 --- /dev/null +++ b/client/src/common/Tag.module.css @@ -0,0 +1,19 @@ +.tagContainer { + margin: 2px; + padding: 3px 8px; + display: inline-block; + color: #fff; + border-radius: 2px; + display: inline-flex; + flex-wrap: nowrap; + align-items: center; +} + +.tagCloseButton { + cursor: pointer; + line-height: 0.8; + border: none; + background-color: transparent; + padding: 0px; + font-size: 16px; +} diff --git a/client/src/common/Text.js b/client/src/common/Text.js new file mode 100644 index 000000000..09e16898e --- /dev/null +++ b/client/src/common/Text.js @@ -0,0 +1,19 @@ +import React from 'react'; + +const Text = ({ children, type, style, ...rest }) => { + const s = Object.assign({}, style); + + if (type === 'secondary') { + s.color = 'rgba(0,0,0,0.45)'; + } else if (type === 'danger') { + s.color = '#cf1322'; + } + + return ( + + {children} + + ); +}; + +export default Text; diff --git a/client/src/common/Tooltip.js b/client/src/common/Tooltip.js new file mode 100644 index 000000000..041f3a57d --- /dev/null +++ b/client/src/common/Tooltip.js @@ -0,0 +1,7 @@ +import React from 'react'; +import ReachTooltip from '@reach/tooltip'; +import '@reach/tooltip/styles.css'; + +export default function Tooltip({ children, label }) { + return {children}; +} diff --git a/client/src/common/base.module.css b/client/src/common/base.module.css new file mode 100644 index 000000000..8b2bfe89d --- /dev/null +++ b/client/src/common/base.module.css @@ -0,0 +1,29 @@ +/* + Instead of using css module compose, this is going to take the approach of tachyons-like utility classes + Eventually something like styled-system and emotion can be brought in to make proper theming? +*/ +.bgSecondary { + background-color: #fb30ac; +} + +.shadow1 { + box-shadow: rgba(64, 169, 255, 0.7) 1px 1px 1px 1px, + rgb(255, 154, 251, 0.3) 2px 2px 4px 2px; +} + +.shadow2 { + box-shadow: rgba(56, 165, 255, 0.44) 0px 0px 8px 4px; +} + +.bgRadial { + background: rgba(248, 70, 252, 0.5); + background: radial-gradient( + at 50% 300px, + rgba(248, 70, 252, 0.5) 6%, + rgba(0, 169, 253, 0.5) 100% + ); +} + +.borderBottom { + border-bottom: 1px solid rgba(167, 14, 105, 0.2); +} diff --git a/client/src/common/message.js b/client/src/common/message.js new file mode 100644 index 000000000..ec64dfe3b --- /dev/null +++ b/client/src/common/message.js @@ -0,0 +1,49 @@ +import React, { useState, useEffect } from 'react'; +import mitt from 'mitt'; + +const emitter = mitt(); + +export function MessageDisplayer() { + const [messages, setMessages] = useState([]); + + function onMessage(message) { + setMessages(messages => [...messages, message]); + setTimeout(() => setMessages(messages => messages.slice(1)), 3000); + } + + useEffect(() => { + emitter.on('message', onMessage); + return () => emitter.off('message', onMessage); + }, []); + + if (messages && messages.length > 0) { + const msg = messages[messages.length - 1]; + return ( +
      + {msg.message} +
      + ); + } + + return null; +} + +export default { + error: function(message) { + emitter.emit('message', { type: 'error', message }); + }, + success: function(message) { + emitter.emit('message', { type: 'success', message }); + } +}; diff --git a/client/src/configuration/ConfigItemInput.js b/client/src/configuration/ConfigItemInput.js index 674388635..05804807e 100644 --- a/client/src/configuration/ConfigItemInput.js +++ b/client/src/configuration/ConfigItemInput.js @@ -1,11 +1,9 @@ -import Input from 'antd/lib/input'; -import Select from 'antd/lib/select'; -import Form from 'antd/lib/form'; -import Popover from 'antd/lib/popover'; -import Switch from 'antd/lib/switch'; import React from 'react'; - -const { Option } = Select; +import Switch from 'react-switch'; +import FormExplain from '../common/FormExplain'; +import HorizontalFormItem from '../common/HorizontalFormItem'; +import Input from '../common/Input'; +import Select from '../common/Select'; function configIsBoolean(config) { const { options } = config; @@ -70,6 +68,10 @@ function ConfigItemInput({ config, onChange }) { if (configIsBoolean(config)) { input = ( onChange(config.key, value)} /> @@ -77,13 +79,14 @@ function ConfigItemInput({ config, onChange }) { } else if (config.options) { const optionNodes = config.options.map(option => { return ( - + ); }); input = ( - + ); } else if (field.formType === PASSWORD) { const value = connectionEdits[field.key] || ''; // autoComplete='new-password' used to prevent browsers from autofilling username and password // Because we dont return a password, Chrome goes ahead and autofills return ( - + - + ); } else if (field.formType === CHECKBOX) { const checked = connectionEdits[field.key] || false; return ( - - + setConnectionValue(e.target.name, e.target.checked) } - > + /> + - + + ); } return null; @@ -183,30 +159,29 @@ function ConnectionForm({ connectionId, onConnectionSaved }) { const { name = '', driver = '' } = connectionEdits; - const driverSelectOptions = [ + ); } else { drivers .sort((a, b) => a.name > b.name) .forEach(driver => driverSelectOptions.push( - + ) ); } return (
      -
      - + setConnectionValue(e.target.name, e.target.value)} /> - - + + - + {renderDriverFields()}
      @@ -264,22 +235,30 @@ function ConnectionForm({ connectionId, onConnectionSaved }) { > {testing ? 'Testing...' : 'Test'} {!testing && testSuccess && ( - )} {!testing && testFailed && ( - )}
      - +
  • ); } diff --git a/client/src/connections/ConnectionList.js b/client/src/connections/ConnectionList.js index 8e978e76b..97c55d3fb 100644 --- a/client/src/connections/ConnectionList.js +++ b/client/src/connections/ConnectionList.js @@ -1,10 +1,9 @@ -import Button from 'antd/lib/button'; -import List from 'antd/lib/list'; -import Row from 'antd/lib/row'; -import Col from 'antd/lib/col'; -import Popconfirm from 'antd/lib/popconfirm'; -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { connect } from 'unistore/react'; +import Button from '../common/Button'; +import DeleteConfirmButton from '../common/DeleteConfirmButton'; +import ListItem from '../common/ListItem'; +import Text from '../common/Text'; import { actions } from '../stores/unistoreStore'; import ConnectionEditDrawer from './ConnectionEditDrawer'; @@ -73,64 +72,64 @@ function ConnectionList({ return ( <> - - - - - - { - let description = ''; - if (item.user) { - description = item.user + '@'; - } - description += [ - item.displayHost, - item.displayDatabase, - item.displaySchema - ] - .filter(part => part && part.trim()) - .join(' / '); +
    + +
    + {decoratedConnections.map(item => { + let description = ''; + if (item.user) { + description = item.user + '@'; + } + description += [ + item.displayHost, + item.displayDatabase, + item.displaySchema + ] + .filter(part => part && part.trim()) + .join(' / '); - const actions = []; + const actions = []; - if (currentUser.role === 'admin') { - actions.push( - - ); - actions.push( - deleteConnection(item._id)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > -
    - } - /> - + if (currentUser.role === 'admin') { + actions.push( + ); - }} - /> + actions.push( + deleteConnection(item._id)} + style={{ marginLeft: 8 }} + > + Delete + + ); + } + + return ( + +
    + {item.name} +
    + + {item.driver} +
    + {description} +
    +
    + {actions} +
    + ); + })} + - + <> + + + , document.getElementById('root') ); diff --git a/client/src/queries/QueryList.js b/client/src/queries/QueryList.js deleted file mode 100644 index 64fce2bd7..000000000 --- a/client/src/queries/QueryList.js +++ /dev/null @@ -1,208 +0,0 @@ -import Button from 'antd/lib/button'; -import Icon from 'antd/lib/icon'; -import List from 'antd/lib/list'; -import Row from 'antd/lib/row'; -import Col from 'antd/lib/col'; -import Select from 'antd/lib/select'; -import Tooltip from 'antd/lib/tooltip'; -import Typography from 'antd/lib/typography'; -import Tag from 'antd/lib/tag'; -import Divider from 'antd/lib/divider'; -import PropTypes from 'prop-types'; -import React, { useEffect, useState } from 'react'; -import { connect } from 'unistore/react'; -import { actions } from '../stores/unistoreStore'; -import Popconfirm from 'antd/lib/popconfirm'; -import getAvailableSearchTags from './getAvailableSearchTags'; -import getDecoratedQueries from './getDecoratedQueries'; -import IconButtonLink from '../common/IconButtonLink'; -import SqlEditor from '../common/SqlEditor'; -import styles from './QueryList.module.css'; - -const { Option } = Select; -const { Title } = Typography; - -function QueryList({ - queries, - loadQueries, - connections, - deleteQuery, - onSelect -}) { - const [preview, setPreview] = useState(''); - const [searches, setSearches] = useState([]); - useEffect(() => { - loadQueries(); - }, [loadQueries]); - - const availableSearches = getAvailableSearchTags(queries, connections); - const decoratedQueries = getDecoratedQueries(queries, connections); - - let filteredQueries = decoratedQueries; - if (searches && searches.length) { - searches.forEach(search => { - if (search.startsWith('createdBy=')) { - const createdBy = search.substring(10); - filteredQueries = filteredQueries.filter( - query => query.createdBy === createdBy - ); - } else if (search.startsWith('tag=')) { - const sTag = search.substring(4); - filteredQueries = filteredQueries.filter( - query => query.tags && query.tags.includes(sTag) - ); - } else if (search.startsWith('connection=')) { - const connectionName = search.substring(11); - filteredQueries = filteredQueries.filter( - query => query.connectionName === connectionName - ); - } else { - // search is just open text search - const lowerSearch = search.toLowerCase(); - filteredQueries = filteredQueries.filter(q => { - return ( - (q.name && q.name.toLowerCase().search(lowerSearch) !== -1) || - (q.queryText && - q.queryText.toLowerCase().search(lowerSearch) !== -1) - ); - }); - } - }); - } - - const renderItem = query => { - const tableUrl = `/query-table/${query._id}`; - const chartUrl = `/query-chart/${query._id}`; - const queryUrl = `/queries/${query._id}`; - - return ( - setPreview(query)} - onMouseLeave={() => setPreview('')} - actions={[ - - { - onSelect(query); - }} - > - - - , - - - - - , - - - - - , - deleteQuery(query._id)} - onCancel={() => {}} - okText="Yes" - cancelText="No" - > -
    diff --git a/client/src/queryEditor/toolbar/AboutButton.js b/client/src/queryEditor/toolbar/AboutButton.js deleted file mode 100644 index 2210aef49..000000000 --- a/client/src/queryEditor/toolbar/AboutButton.js +++ /dev/null @@ -1,45 +0,0 @@ -import Button from 'antd/lib/button'; -import Tooltip from 'antd/lib/tooltip'; -import Modal from 'antd/lib/modal'; -import { connect } from 'unistore/react'; -import { actions } from '../../stores/unistoreStore'; -import PropTypes from 'prop-types'; -import React from 'react'; -import AboutContent from './AboutContent'; - -function mapStateToProps(state) { - return { - version: state.version || {} - }; -} - -const ConnectedEditorNavBar = connect( - mapStateToProps, - actions -)(React.memo(AboutButton)); - -function AboutButton({ version }) { - return ( - -
    ); } diff --git a/client/src/queryEditor/toolbar/AboutModal.js b/client/src/queryEditor/toolbar/AboutModal.js new file mode 100644 index 000000000..94f6964c9 --- /dev/null +++ b/client/src/queryEditor/toolbar/AboutModal.js @@ -0,0 +1,38 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { connect } from 'unistore/react'; +import Modal from '../../common/Modal'; +import { actions } from '../../stores/unistoreStore'; +import AboutContent from './AboutContent'; + +function mapStateToProps(state) { + return { + version: state.version || {} + }; +} + +const ConnectedAboutModal = connect( + mapStateToProps, + actions +)(React.memo(AboutModal)); + +function AboutModal({ version, visible, onClose }) { + return ( + <> + + + + + ); +} + +AboutModal.propTypes = { + version: PropTypes.object.isRequired +}; + +export default ConnectedAboutModal; diff --git a/client/src/queryEditor/toolbar/ConfigButton.js b/client/src/queryEditor/toolbar/ConfigButton.js deleted file mode 100644 index 6ecbdd27b..000000000 --- a/client/src/queryEditor/toolbar/ConfigButton.js +++ /dev/null @@ -1,47 +0,0 @@ -import Button from 'antd/lib/button'; -import Tabs from 'antd/lib/tabs'; -import Tooltip from 'antd/lib/tooltip'; -import React, { useState, useCallback } from 'react'; -import Drawer from '../../common/Drawer'; -import ConfigurationForm from '../../configuration/ConfigurationForm'; -import UserList from '../../users/UserList'; -import ConnectionList from '../../connections/ConnectionList'; - -const TabPane = Tabs.TabPane; - -function ConfigButton() { - const [showConfig, setShowConfig] = useState(false); - - const onClick = useCallback(() => setShowConfig(true), []); - const onClose = useCallback(() => setShowConfig(false), []); - - return ( - <> - - - setShowQueries(true)}>Queries + setShowQueries(false)} - placement="left" - > - setShowQueries(false)} /> - + /> ); } diff --git a/client/src/queryEditor/toolbar/QueryTagsModal.js b/client/src/queryEditor/toolbar/QueryTagsModal.js new file mode 100644 index 000000000..189a20c77 --- /dev/null +++ b/client/src/queryEditor/toolbar/QueryTagsModal.js @@ -0,0 +1,48 @@ +import React from 'react'; +import { connect } from 'unistore/react'; +import { actions } from '../../stores/unistoreStore'; +import Modal from '../../common/Modal'; +import MultiSelect from '../../common/MultiSelect'; + +function mapStateToProps(state) { + return { + availableTags: state.availableTags || [], + tags: (state.query && state.query.tags) || [] + }; +} + +const ConnectedQueryTagsModal = connect( + mapStateToProps, + actions +)(React.memo(QueryTagsModal)); + +function QueryTagsModal({ + availableTags, + tags, + visible, + onClose, + setQueryState +}) { + const selectedItems = tags.map(tag => ({ name: tag, id: tag })); + + const handleChange = selectedItems => { + setQueryState('tags', selectedItems.map(item => item.name)); + }; + + return ( + + ({ name: tag, id: tag }))} + onChange={handleChange} + /> + + ); +} + +export default ConnectedQueryTagsModal; diff --git a/client/src/queryEditor/toolbar/SignoutButton.js b/client/src/queryEditor/toolbar/SignoutButton.js deleted file mode 100644 index 70a08aad3..000000000 --- a/client/src/queryEditor/toolbar/SignoutButton.js +++ /dev/null @@ -1,28 +0,0 @@ -import Button from 'antd/lib/button'; -import Tooltip from 'antd/lib/tooltip'; -import { Redirect } from 'react-router-dom'; -import React, { useState } from 'react'; -import fetchJson from '../../utilities/fetch-json.js'; - -function SignoutButton() { - const [redirect, setRedirect] = useState(false); - - if (redirect) { - return ; - } - - return ( - - - - - - - - - - - - - +
    + + + } + onClick={() => resetNewQuery()} + />
    - - - + - {isAdmin && ( - - - - )} +
    - - - - + + + + + + {isAdmin && ( + setShowConfig(true)}> + Configuration + + )} + {isAdmin && ( + setShowConnections(true)}> + Connections + + )} + {isAdmin && ( + setShowUsers(true)}>Users + )} +
    + setShowAbout(true)}>About +
    + { + await fetchJson('GET', '/api/signout'); + setRedirectToSignIn(true); + }} + > + Sign out + + +
    + + setShowConfig(false)} + placement={'right'} + > + setShowConfig(false)} /> + + + setShowUsers(false)} + placement={'right'} + > + + + + setShowAbout(false)} /> + + setShowConnections(false)} + /> +
    ); } diff --git a/client/src/schema/SchemaSidebar.js b/client/src/schema/SchemaSidebar.js index e91f14d41..b79911522 100644 --- a/client/src/schema/SchemaSidebar.js +++ b/client/src/schema/SchemaSidebar.js @@ -1,21 +1,22 @@ -import Icon from 'antd/lib/icon'; -import Tooltip from 'antd/lib/tooltip'; -import Typography from 'antd/lib/typography'; -import Input from 'antd/lib/input'; -import Button from 'antd/lib/button'; -import Divider from 'antd/lib/divider'; -import Spin from 'antd/lib/spin'; +import ClosedIcon from 'mdi-react/MenuRightIcon'; +import OpenIcon from 'mdi-react/MenuDownIcon'; +import RefreshIcon from 'mdi-react/RefreshIcon'; import React, { useEffect, useState } from 'react'; import Measure from 'react-measure'; import { FixedSizeList as List } from 'react-window'; import { connect } from 'unistore/react'; import Sidebar from '../common/Sidebar'; +import Button from '../common/Button'; +import Input from '../common/Input'; +import Text from '../common/Text'; +import Divider from '../common/Divider'; import { actions } from '../stores/unistoreStore'; import styles from './SchemaSidebar.module.css'; import searchSchemaInfo from './searchSchemaInfo'; import getSchemaList from './getSchemaList'; -const { Text } = Typography; +const ICON_SIZE = 22; +const ICON_STYLE = { marginBottom: -6, marginRight: -6, marginLeft: -4 }; function mapStateToProps(state, props) { const { loading, schemaInfo, expanded } = @@ -67,7 +68,7 @@ function SchemaSidebar({ const Row = ({ index, style }) => { const row = visibleItems[index]; - const iconType = expanded[row.id] ? 'caret-down' : 'caret-right'; + const Icon = expanded[row.id] ? OpenIcon : ClosedIcon; if (!row) { return null; } @@ -79,7 +80,7 @@ function SchemaSidebar({ style={style} onClick={() => toggleSchemaItem(connectionId, row)} > - {row.name} + {row.name} ); } @@ -91,7 +92,7 @@ function SchemaSidebar({ style={style} onClick={() => toggleSchemaItem(connectionId, row)} > - {row.name} + {row.name} ); } @@ -128,18 +129,17 @@ function SchemaSidebar({ placeholder="Search schema" onChange={event => setSearch(event.target.value)} /> - -
    -
    - +
    + + +
    {loading ? ( - +
    loading...
    ) : (
      { - setRole(role); + const handleRoleChange = async event => { + setRole(event.target.value); const json = await fetchJson('PUT', '/api/users/' + user._id, { - role + role: event.target.value }); if (json.error) { return message.error('Update failed: ' + json.error.toString()); @@ -50,44 +46,44 @@ function EditUserForm({ user }) { const renderReset = () => { if (passwordResetId) { return ( - - +
      +
      - - +
      +
      Password reset link - - +
      +
      ); } return ( - - - - - +
      + +
      ); }; return ( -
      - +
      + + + Admins can manage database connections and users + + {renderReset()} - +
      ); } diff --git a/client/src/users/InviteUserForm.js b/client/src/users/InviteUserForm.js index f6c0688b0..21751ffe6 100644 --- a/client/src/users/InviteUserForm.js +++ b/client/src/users/InviteUserForm.js @@ -1,14 +1,12 @@ -import Button from 'antd/lib/button'; -import Form from 'antd/lib/form'; -import Input from 'antd/lib/input'; -import message from 'antd/lib/message'; -import Select from 'antd/lib/select'; import React, { useState } from 'react'; -import fetchJson from '../utilities/fetch-json.js'; import { Link } from 'react-router-dom'; - -const FormItem = Form.Item; -const { Option } = Select; +import Button from '../common/Button'; +import FormExplain from '../common/FormExplain.js'; +import Input from '../common/Input'; +import message from '../common/message'; +import Select from '../common/Select'; +import Spacer from '../common/Spacer.js'; +import fetchJson from '../utilities/fetch-json.js'; function InviteUserForm({ onInvited }) { const [email, setEmail] = useState(null); @@ -28,7 +26,6 @@ function InviteUserForm({ onInvited }) { } setEmail(null); setRole(null); - message.success('User Whitelisted'); onInvited(); }; @@ -39,33 +36,48 @@ function InviteUserForm({ onInvited }) { them to continue the sign-up process on the{' '} signup page.

      -
      - + + - + + + + - -
      + + Admins can manage database connections and users + + + + +
      + +
      +
    ); } diff --git a/client/src/users/UserList.js b/client/src/users/UserList.js index ffb6fa2fc..f14540181 100644 --- a/client/src/users/UserList.js +++ b/client/src/users/UserList.js @@ -1,16 +1,15 @@ -import Button from 'antd/lib/button'; -import message from 'antd/lib/message'; -import Modal from 'antd/lib/modal'; -import Row from 'antd/lib/row'; -import Col from 'antd/lib/col'; -import Popconfirm from 'antd/lib/popconfirm'; -import List from 'antd/lib/list'; import React, { useEffect, useState } from 'react'; import { connect } from 'unistore/react'; +import Button from '../common/Button'; +import DeleteConfirmButton from '../common/DeleteConfirmButton'; +import ListItem from '../common/ListItem'; +import message from '../common/message'; +import Modal from '../common/Modal'; +import Text from '../common/Text'; import { actions } from '../stores/unistoreStore'; import fetchJson from '../utilities/fetch-json.js'; -import InviteUserForm from './InviteUserForm'; import EditUserForm from './EditUserForm'; +import InviteUserForm from './InviteUserForm'; function UserList({ currentUser }) { const [users, setUsers] = useState([]); @@ -41,7 +40,6 @@ function UserList({ currentUser }) { if (json.error) { return message.error('Delete Failed: ' + json.error.toString()); } - message.success('User Deleted'); loadUsersFromServer(); }; @@ -50,71 +48,68 @@ function UserList({ currentUser }) { setShowAddUser(false); }; - const renderItem = user => { - const actions = []; - - if (currentUser && currentUser._id !== user._id) { - actions.push(); - actions.push( - handleDelete(user)} - onCancel={() => {}} - okText="Delete" - cancelText="cancel" + return ( + <> +
    + +
    - const userSignupInfo = !user.signupDate ? ( - - not signed up yet - ) : ( - '' - ); + {users.map(user => { + const actions = []; - return ( - - - {user.role} {userSignupInfo} -
    - } - /> - - ); - }; + if (currentUser && currentUser._id !== user._id) { + actions.push( + + ); + actions.push( + handleDelete(user)} + style={{ marginLeft: 8 }} + > + Delete + + ); + } - return ( - <> - - - - - + const userSignupInfo = !user.signupDate ? ( + - not signed up yet + ) : ( + '' + ); - + return ( + +
    + {user.email} +
    + + {user.role} {userSignupInfo} + +
    + {actions} +
    + ); + })} setShowAddUser(false)} + onClose={() => setShowAddUser(false)} > @@ -122,10 +117,8 @@ function UserList({ currentUser }) { { + onClose={() => { loadUsersFromServer(); setEditUser(null); }} diff --git a/client/src/utilities/fetch-json.js b/client/src/utilities/fetch-json.js index f55aed5a3..43814f0cb 100644 --- a/client/src/utilities/fetch-json.js +++ b/client/src/utilities/fetch-json.js @@ -1,5 +1,5 @@ import 'whatwg-fetch'; -import message from 'antd/lib/message'; +import message from '../common/message'; export default function fetchJson(method, url, body) { const BASE_URL = window.BASE_URL || ''; From a9929961cc49c86ea41566cf4069427eae7a1d26 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 15 May 2019 00:09:36 -0400 Subject: [PATCH 042/855] Display ISO strings in result grid (Remove moment from client) (#430) * Make distinction between date and datetime ISO strings * Use ISO string instead of moment * Add consideration for datetime datatype * Uninstall moment * Ensure value is a date and not null --- client/package-lock.json | 5 ---- client/package.json | 1 - client/src/common/QueryResultDataTable.js | 7 ++++-- client/src/common/getTauChartConfig.js | 2 +- server/lib/getMeta.js | 29 ++++++++++++++++++++--- server/test/lib/getMeta.js | 29 ++++++++++++++--------- 6 files changed, 50 insertions(+), 23 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 9fbf188b6..f22032dbc 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8582,11 +8582,6 @@ } } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", diff --git a/client/package.json b/client/package.json index 90a62497b..b1df19821 100644 --- a/client/package.json +++ b/client/package.json @@ -15,7 +15,6 @@ "match-sorter": "^3.0.0", "mdi-react": "^5.3.0", "mitt": "^1.1.3", - "moment": "^2.24.0", "prop-types": "^15.7.2", "react": "^16.8.6", "react-ace": "^6.5.0", diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index 691406764..e7081764e 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -5,15 +5,18 @@ import throttle from 'lodash/throttle'; import Draggable from 'react-draggable'; import Measure from 'react-measure'; import SpinKitCube from './SpinKitCube.js'; -import moment from 'moment'; const renderValue = (input, fieldMeta) => { if (input === null || input === undefined) { return null; } else if (input === true || input === false) { return input.toString(); + } else if (fieldMeta.datatype === 'datetime') { + // Remove the letters from ISO string and present as is + return input.replace('T', ' ').replace('Z', ''); } else if (fieldMeta.datatype === 'date') { - return moment.utc(input).format('MM/DD/YYYY HH:mm:ss'); + // Formats ISO string to YYYY-MM-DD + return input.substring(0, 10); } else if (typeof input === 'object') { return JSON.stringify(input, null, 2); } else { diff --git a/client/src/common/getTauChartConfig.js b/client/src/common/getTauChartConfig.js index 7ac43fca8..51103c084 100644 --- a/client/src/common/getTauChartConfig.js +++ b/client/src/common/getTauChartConfig.js @@ -75,7 +75,7 @@ export default function getTauChartConfig( const newRow = {}; Object.keys(row).forEach(col => { const datatype = queryResult.meta[col].datatype; - if (datatype === 'date') { + if (datatype === 'date' || datatype === 'datetime') { newRow[col] = new Date(row[col]); } else if (datatype === 'number') { newRow[col] = Number(row[col]); diff --git a/server/lib/getMeta.js b/server/lib/getMeta.js index a30f0d054..70e79bc5e 100644 --- a/server/lib/getMeta.js +++ b/server/lib/getMeta.js @@ -49,10 +49,18 @@ module.exports = function getMeta(rows) { return; } - // if we don't have a data type and we have a value yet lets try and figure it out + // If we don't have a data type and we have a value yet lets try and figure it out + // For js date object, if there are all zeros for time we'll make assumptions that this is intended as date, not datetime + // Ideally this should come from database result schema, but not all drivers have that and it'd be a lot of work to take on at this point if (!meta[key].datatype) { if (_.isDate(value)) { - meta[key].datatype = 'date'; + const dt = new Date(value); + const isoString = dt.toISOString(); + if (isoString.includes('T00:00:00.000Z')) { + meta[key].datatype = 'date'; + } else { + meta[key].datatype = 'datetime'; + } } else if (isNumeric(value)) { meta[key].datatype = 'number'; } else if (_.isString(value)) { @@ -60,6 +68,18 @@ module.exports = function getMeta(rows) { } } + // If the datatype is date, we should check to see if it changes to datetime + // The distinction between these are: + // * dates will have ISO strings with times of all zeros + // * datetimes will have ISO strings with times + // If all values have 0s for times, we'll assume a date type + if (meta[key].datatype === 'date' && _.isDate(value)) { + const dt = new Date(value); + if (!dt.toISOString().includes('T00:00:00.000Z')) { + meta[key].datatype = 'datetime'; + } + } + // if the datatype is number-like, // we should check to see if it ever changes to a string // this is hacky, but sometimes data will be @@ -99,7 +119,10 @@ module.exports = function getMeta(rows) { } } - if (meta[key].datatype === 'date' && _.isDate(value)) { + if ( + (meta[key].datatype === 'date' || meta[key].datatype === 'datetime') && + _.isDate(value) + ) { // if we haven't yet defined a max and this row contains a number if (!meta[key].max) { meta[key].max = value; diff --git a/server/test/lib/getMeta.js b/server/test/lib/getMeta.js index 492f253e2..a62349f11 100644 --- a/server/test/lib/getMeta.js +++ b/server/test/lib/getMeta.js @@ -3,6 +3,7 @@ const getMeta = require('../../lib/getMeta.js'); const d1 = new Date(); const d2 = new Date(new Date().getTime() + 60000); +const noTime = new Date('2019-01-01T00:00:00.000Z'); describe('lib/getMeta.js', function() { it('returns expected results', function() { @@ -14,8 +15,9 @@ describe('lib/getMeta.js', function() { decimalString: null, number: null, string: null, - date: null, - numberString: null + datetime: null, + numberString: null, + date: noTime }, { alwaysNull: null, @@ -23,8 +25,9 @@ describe('lib/getMeta.js', function() { decimalString: '0.999', number: 30, string: 'abcdefg', - date: d2, - numberString: 100 + datetime: d2, + numberString: 100, + date: null }, { alwaysNull: null, @@ -32,8 +35,9 @@ describe('lib/getMeta.js', function() { decimalString: '0.111', number: 0, string: '0', - date: d1, - numberString: 0 + datetime: d1, + numberString: 0, + date: noTime }, { alwaysNull: null, @@ -41,8 +45,9 @@ describe('lib/getMeta.js', function() { decimalString: null, number: null, string: 'abc', - date: null, - numberString: null + datetime: null, + numberString: null, + date: noTime } ]; @@ -68,12 +73,14 @@ describe('lib/getMeta.js', function() { assert.equal(meta.string.datatype, 'string', 'string.datatype'); assert.equal(meta.string.maxValueLength, 7, 'string.maxValueLength'); - assert.equal(meta.date.datatype, 'date', 'date.datatype'); - assert.equal(meta.date.max.getTime(), d2.getTime(), 'date.max'); - assert.equal(meta.date.min.getTime(), d1.getTime(), 'date.min'); + assert.equal(meta.datetime.datatype, 'datetime', 'datetime.datatype'); + assert.equal(meta.datetime.max.getTime(), d2.getTime(), 'datetime.max'); + assert.equal(meta.datetime.min.getTime(), d1.getTime(), 'datetime.min'); assert.equal(meta.numberString.datatype, 'number', 'numberString.datatype'); assert.equal(meta.numberString.max, 100, 'numberString.max'); assert.equal(meta.numberString.min, 0, 'numberString.min'); + + assert.equal(meta.date.datatype, 'date', 'date.datatype'); }); }); From e1e98db504028de6f2a6b7e28ec4dab6ea961928 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 17 May 2019 23:31:44 -0400 Subject: [PATCH 043/855] Sql format via server API (#431) * Add format-sql API * Use the API for sql formatting * Uninstall sql-formatter --- client/package-lock.json | 8 -------- client/package.json | 1 - client/src/stores/unistoreStore.js | 15 ++++++++++++--- server/app.js | 1 + server/package-lock.json | 8 ++++++++ server/package.json | 1 + server/routes/format-sql.js | 18 ++++++++++++++++++ server/test/api/format-sql.js | 23 +++++++++++++++++++++++ 8 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 server/routes/format-sql.js create mode 100644 server/test/api/format-sql.js diff --git a/client/package-lock.json b/client/package-lock.json index f22032dbc..a7f5b1cf2 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11950,14 +11950,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sql-formatter": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-2.3.2.tgz", - "integrity": "sha512-cffwWdNzQAvzf/JlAv7fnCAR2//ZvmN2e9FWyWI6GCHYvn0U2UrmCOwBr0GO8HPaEm7Bks+a3rQDc+0Z43bhJg==", - "requires": { - "lodash": "^4.16.0" - } - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", diff --git a/client/package.json b/client/package.json index b1df19821..b8e49bed8 100644 --- a/client/package.json +++ b/client/package.json @@ -27,7 +27,6 @@ "react-split-pane": "^0.1.87", "react-switch": "^5.0.0", "react-window": "^1.8.1", - "sql-formatter": "^2.3.2", "taucharts": "^2.7.2", "unistore": "^3.4.1", "whatwg-fetch": "^3.0.0" diff --git a/client/src/stores/unistoreStore.js b/client/src/stores/unistoreStore.js index eaffae2e0..01dde14dc 100644 --- a/client/src/stores/unistoreStore.js +++ b/client/src/stores/unistoreStore.js @@ -1,5 +1,4 @@ import sortBy from 'lodash/sortBy'; -import sqlFormatter from 'sql-formatter'; import createStore from 'unistore'; import uuid from 'uuid'; import message from '../common/message'; @@ -214,10 +213,20 @@ export const actions = store => ({ }, // QUERY - formatQuery(state) { + async formatQuery(state) { const { query } = state; + + const json = await fetchJson('POST', '/api/format-sql', { + query: query.queryText + }); + + if (json.error) { + message.error(json.error); + return; + } + return { - query: { ...query, queryText: sqlFormatter.format(query.queryText) }, + query: { ...query, queryText: json.query }, unsavedChanges: true }; }, diff --git a/server/app.js b/server/app.js index 10d7ede8a..f9ea084d1 100644 --- a/server/app.js +++ b/server/app.js @@ -118,6 +118,7 @@ const routers = [ require('./routes/config-items.js'), require('./routes/config-values.js'), require('./routes/tags.js'), + require('./routes/format-sql.js'), require('./routes/signup-signin-signout.js') ]; diff --git a/server/package-lock.json b/server/package-lock.json index 33407c356..db99ae389 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -3445,6 +3445,14 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "sql-formatter": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-2.3.2.tgz", + "integrity": "sha512-cffwWdNzQAvzf/JlAv7fnCAR2//ZvmN2e9FWyWI6GCHYvn0U2UrmCOwBr0GO8HPaEm7Bks+a3rQDc+0Z43bhJg==", + "requires": { + "lodash": "^4.16.0" + } + }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", diff --git a/server/package.json b/server/package.json index 30af8f623..2ccefeef2 100644 --- a/server/package.json +++ b/server/package.json @@ -72,6 +72,7 @@ "serve-favicon": "^2.5.0", "session-file-store": "^1.2.0", "socksjs": "^0.5.0", + "sql-formatter": "^2.3.2", "uuid": "^3.3.2", "vertica": "^0.5.5" }, diff --git a/server/routes/format-sql.js b/server/routes/format-sql.js new file mode 100644 index 000000000..2a32dd5de --- /dev/null +++ b/server/routes/format-sql.js @@ -0,0 +1,18 @@ +const sqlFormatter = require('sql-formatter'); +const router = require('express').Router(); +const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); +const sendError = require('../lib/sendError'); + +/** + * Returns formatted query in same object format it was sent + */ +router.post('/api/format-sql', mustBeAuthenticated, function(req, res) { + const { body } = req; + if (!body.query) { + return sendError(res, null, 'query property must be provided'); + } + body.query = sqlFormatter.format(body.query); + res.send(body); +}); + +module.exports = router; diff --git a/server/test/api/format-sql.js b/server/test/api/format-sql.js new file mode 100644 index 000000000..498026298 --- /dev/null +++ b/server/test/api/format-sql.js @@ -0,0 +1,23 @@ +const assert = require('assert'); +const utils = require('../utils'); + +describe('api/format-sql', function() { + before(function() { + return utils.resetWithUser(); + }); + + it('format sql query', function() { + return utils + .post('admin', '/api/format-sql', { + query: 'SELECT column_one, column_two FROM sometable' + }) + .then(body => { + console.log(body); + assert.equal( + body.query, + 'SELECT\n column_one,\n column_two\nFROM\n sometable' + ); + assert(!body.error, 'Expect no error'); + }); + }); +}); From 63dc8d0f0e9a6075df1adbe753214e7a2bd24947 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 18 May 2019 12:24:33 -0400 Subject: [PATCH 044/855] Debounce vis pane resizes With datasets > 1000 or so resizes are quire slow --- client/src/queryEditor/QueryEditor.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 4a2314b97..d982eb61a 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -1,18 +1,18 @@ import keymaster from 'keymaster'; +import debounce from 'lodash/debounce'; import PropTypes from 'prop-types'; import React from 'react'; import SplitPane from 'react-split-pane'; import { connect } from 'unistore/react'; +import { resizeChart } from '../common/tauChartRef'; +import SchemaSidebar from '../schema/SchemaSidebar.js'; import { actions } from '../stores/unistoreStore'; +import QueryEditorChart from './QueryEditorChart'; import QueryEditorResult from './QueryEditorResult'; import QueryEditorSqlEditor from './QueryEditorSqlEditor'; -import QueryEditorChart from './QueryEditorChart'; -import Toolbar from './toolbar/Toolbar'; - import QueryResultHeader from './QueryResultHeader.js'; -import SchemaSidebar from '../schema/SchemaSidebar.js'; +import Toolbar from './toolbar/Toolbar'; import VisSidebar from './VisSidebar'; -import { resizeChart } from '../common/tauChartRef'; // TODO FIXME XXX capture unsaved state to local storage // Prompt is removed. It doesn't always work anyways @@ -74,10 +74,10 @@ class QueryEditor extends React.Component { keymaster.unbind('shift+return'); } - handleVisPaneResize = () => { + handleVisPaneResize = debounce(() => { const { queryId } = this.props; resizeChart(queryId); - }; + }, 700); render() { const { From a7b1e6e81280ffa0c2cea62f39f06249917a244b Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 19 May 2019 12:34:37 -0400 Subject: [PATCH 045/855] Store actions organization (#432) * break actions and state into separate files May just reference the actions in the components they are used later * Map actions in components instead of store * export unistoreStore as default --- client/src/Authenticated.js | 6 +- client/src/NotFound.js | 6 +- client/src/Routes.js | 4 +- client/src/SignIn.js | 4 +- client/src/SignUp.js | 6 +- client/src/common/ExportButton.js | 6 +- client/src/common/SqlEditor.js | 6 +- client/src/configuration/ConfigurationForm.js | 4 +- client/src/connections/ConnectionList.js | 14 +- client/src/index.js | 2 +- client/src/queries/QueryListDrawer.js | 7 +- client/src/queryEditor/ConnectionDropdown.js | 4 +- client/src/queryEditor/QueryEditor.js | 20 +- client/src/queryEditor/QueryEditorChart.js | 6 +- client/src/queryEditor/QueryEditorResult.js | 10 +- .../src/queryEditor/QueryEditorSqlEditor.js | 4 +- client/src/queryEditor/QueryResultHeader.js | 12 +- client/src/queryEditor/VisSidebar.js | 7 +- client/src/queryEditor/toolbar/AboutModal.js | 6 +- .../src/queryEditor/toolbar/QueryTagsModal.js | 4 +- client/src/queryEditor/toolbar/Toolbar.js | 21 +- client/src/schema/SchemaSidebar.js | 11 +- client/src/stores/appNav.js | 20 + client/src/stores/config.js | 24 + client/src/stores/connections.js | 85 ++++ client/src/stores/queries.js | 244 ++++++++++ client/src/stores/schema.js | 73 +++ client/src/stores/tags.js | 16 + client/src/stores/unistoreStore.js | 426 +----------------- client/src/users/UserList.js | 6 +- 30 files changed, 579 insertions(+), 485 deletions(-) create mode 100644 client/src/stores/appNav.js create mode 100644 client/src/stores/config.js create mode 100644 client/src/stores/connections.js create mode 100644 client/src/stores/queries.js create mode 100644 client/src/stores/schema.js create mode 100644 client/src/stores/tags.js diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index c12290cb3..451aaee39 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, { useEffect } from 'react'; import { connect } from 'unistore/react'; -import { actions } from './stores/unistoreStore'; +import { refreshAppContext } from './stores/config'; import { Redirect } from 'react-router-dom'; function Authenticated({ children, currentUser, refreshAppContext }) { @@ -22,5 +22,7 @@ Authenticated.propTypes = { export default connect( ['currentUser'], - actions + { + refreshAppContext + } )(Authenticated); diff --git a/client/src/NotFound.js b/client/src/NotFound.js index bc3703a8b..4997534a5 100644 --- a/client/src/NotFound.js +++ b/client/src/NotFound.js @@ -1,6 +1,5 @@ import React, { useEffect } from 'react'; import { connect } from 'unistore/react'; -import { actions } from './stores/unistoreStore'; import FullscreenMessage from './common/FullscreenMessage.js'; function NotFound({ currentUser }) { @@ -18,7 +17,4 @@ function NotFound({ currentUser }) { return Not Found; } -export default connect( - ['currentUser'], - actions -)(NotFound); +export default connect(['currentUser'])(NotFound); diff --git a/client/src/Routes.js b/client/src/Routes.js index 23e50f759..2ae2079ce 100644 --- a/client/src/Routes.js +++ b/client/src/Routes.js @@ -7,7 +7,7 @@ import { } from 'react-router-dom'; import Authenticated from './Authenticated'; import { connect } from 'unistore/react'; -import { actions } from './stores/unistoreStore'; +import { refreshAppContext } from './stores/config'; import ForgotPassword from './ForgotPassword.js'; import NotFound from './NotFound.js'; import PasswordReset from './PasswordReset.js'; @@ -86,5 +86,5 @@ function Routes({ config, refreshAppContext }) { export default connect( ['config'], - actions + { refreshAppContext } )(Routes); diff --git a/client/src/SignIn.js b/client/src/SignIn.js index 0e2a33737..64d152044 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -6,7 +6,7 @@ import Button from './common/Button'; import Input from './common/Input'; import message from './common/message'; import Spacer from './common/Spacer'; -import { actions } from './stores/unistoreStore'; +import { refreshAppContext } from './stores/config'; import fetchJson from './utilities/fetch-json.js'; function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { @@ -104,5 +104,5 @@ function SignIn({ config, smtpConfigured, passport, refreshAppContext }) { export default connect( ['config', 'smtpConfigured', 'passport'], - actions + { refreshAppContext } )(SignIn); diff --git a/client/src/SignUp.js b/client/src/SignUp.js index ccc91870e..b6940e8a9 100644 --- a/client/src/SignUp.js +++ b/client/src/SignUp.js @@ -5,7 +5,6 @@ import Button from './common/Button'; import Input from './common/Input'; import message from './common/message'; import Spacer from './common/Spacer'; -import { actions } from './stores/unistoreStore'; import fetchJson from './utilities/fetch-json.js'; function SignUp({ adminRegistrationOpen }) { @@ -82,7 +81,4 @@ function SignUp({ adminRegistrationOpen }) { ); } -export default connect( - ['adminRegistrationOpen'], - actions -)(SignUp); +export default connect(['adminRegistrationOpen'])(SignUp); diff --git a/client/src/common/ExportButton.js b/client/src/common/ExportButton.js index 88219535f..458ff8289 100644 --- a/client/src/common/ExportButton.js +++ b/client/src/common/ExportButton.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'unistore/react'; import Button from '../common/Button'; -import { actions } from '../stores/unistoreStore'; import ButtonLink from './ButtonLink'; function ExportButton({ config, cacheKey, onSaveImageClick }) { @@ -45,7 +44,4 @@ ExportButton.propTypes = { onSaveImageClick: PropTypes.func }; -export default connect( - ['config'], - actions -)(ExportButton); +export default connect(['config'])(ExportButton); diff --git a/client/src/common/SqlEditor.js b/client/src/common/SqlEditor.js index e2f8ff0d1..7d801140d 100644 --- a/client/src/common/SqlEditor.js +++ b/client/src/common/SqlEditor.js @@ -6,7 +6,6 @@ import 'brace/theme/sqlserver'; import PropTypes from 'prop-types'; import React, { useState, useEffect } from 'react'; import { connect } from 'unistore/react'; -import { actions } from '../stores/unistoreStore'; import Measure from 'react-measure'; import AceEditor from 'react-ace'; @@ -85,7 +84,4 @@ SqlEditor.defaultProps = { value: '' }; -export default connect( - ['config'], - actions -)(React.memo(SqlEditor)); +export default connect(['config'])(React.memo(SqlEditor)); diff --git a/client/src/configuration/ConfigurationForm.js b/client/src/configuration/ConfigurationForm.js index ffe993d81..808280975 100644 --- a/client/src/configuration/ConfigurationForm.js +++ b/client/src/configuration/ConfigurationForm.js @@ -3,7 +3,7 @@ import { connect } from 'unistore/react'; import Button from '../common/Button'; import HorizontalFormItem from '../common/HorizontalFormItem'; import message from '../common/message'; -import { actions } from '../stores/unistoreStore'; +import { refreshAppContext } from '../stores/config'; import fetchJson from '../utilities/fetch-json.js'; import ConfigItemInput from './ConfigItemInput'; @@ -78,5 +78,5 @@ function ConfigurationForm({ refreshAppContext, onClose }) { export default connect( [], - actions + { refreshAppContext } )(React.memo(ConfigurationForm)); diff --git a/client/src/connections/ConnectionList.js b/client/src/connections/ConnectionList.js index 97c55d3fb..d43addc8e 100644 --- a/client/src/connections/ConnectionList.js +++ b/client/src/connections/ConnectionList.js @@ -4,7 +4,12 @@ import Button from '../common/Button'; import DeleteConfirmButton from '../common/DeleteConfirmButton'; import ListItem from '../common/ListItem'; import Text from '../common/Text'; -import { actions } from '../stores/unistoreStore'; +import { + selectConnectionId, + deleteConnection, + addUpdateConnection, + loadConnections +} from '../stores/connections'; import ConnectionEditDrawer from './ConnectionEditDrawer'; function ConnectionList({ @@ -143,5 +148,10 @@ function ConnectionList({ export default connect( ['connections', 'currentUser'], - actions + store => ({ + selectConnectionId, + deleteConnection, + addUpdateConnection, + loadConnections: loadConnections(store) + }) )(ConnectionList); diff --git a/client/src/index.js b/client/src/index.js index 94a525024..4b002f486 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -7,7 +7,7 @@ import './css/vendorOverrides.css'; import React from 'react'; import ReactDOM from 'react-dom'; import Routes from './Routes'; -import { unistoreStore } from './stores/unistoreStore'; +import unistoreStore from './stores/unistoreStore'; import { Provider } from 'unistore/react'; import { MessageDisplayer } from './common/message'; diff --git a/client/src/queries/QueryListDrawer.js b/client/src/queries/QueryListDrawer.js index c4b3d42a9..fd49a7d9c 100644 --- a/client/src/queries/QueryListDrawer.js +++ b/client/src/queries/QueryListDrawer.js @@ -14,7 +14,7 @@ import MultiSelect from '../common/MultiSelect'; import SqlEditor from '../common/SqlEditor'; import Tag from '../common/Tag'; import Text from '../common/Text'; -import { actions } from '../stores/unistoreStore'; +import { loadQueries, deleteQuery } from '../stores/queries'; import getAvailableSearchTags from './getAvailableSearchTags'; import getDecoratedQueries from './getDecoratedQueries'; import styles from './QueryList.module.css'; @@ -197,5 +197,8 @@ QueryListDrawer.propTypes = { export default connect( ['queries', 'connections'], - actions + store => ({ + loadQueries: loadQueries(store), + deleteQuery: deleteQuery(store) + }) )(React.memo(QueryListDrawer)); diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index e6430cf89..a149a890b 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { connect } from 'unistore/react'; -import { actions } from '../stores/unistoreStore'; +import { selectConnectionId, addUpdateConnection } from '../stores/connections'; import ConnectionEditDrawer from '../connections/ConnectionEditDrawer'; import ConnectionListDrawer from '../connections/ConnectionListDrawer'; import Select from '../common/Select'; @@ -72,5 +72,5 @@ function ConnectionDropdown({ export default connect( ['connections', 'currentUser', 'selectedConnectionId'], - actions + { selectConnectionId, addUpdateConnection } )(ConnectionDropdown); diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index d982eb61a..75bafc83f 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -6,7 +6,15 @@ import SplitPane from 'react-split-pane'; import { connect } from 'unistore/react'; import { resizeChart } from '../common/tauChartRef'; import SchemaSidebar from '../schema/SchemaSidebar.js'; -import { actions } from '../stores/unistoreStore'; +import { loadConnections } from '../stores/connections'; +import { loadTags } from '../stores/tags'; +import { + formatQuery, + loadQuery, + runQuery, + saveQuery, + resetNewQuery +} from '../stores/queries'; import QueryEditorChart from './QueryEditorChart'; import QueryEditorResult from './QueryEditorResult'; import QueryEditorSqlEditor from './QueryEditorSqlEditor'; @@ -206,5 +214,13 @@ function mapStateToProps(state, props) { export default connect( mapStateToProps, - actions + store => ({ + loadConnections: loadConnections(store), + loadTags, + formatQuery, + loadQuery, + runQuery: runQuery(store), + saveQuery: saveQuery(store), + resetNewQuery + }) )(QueryEditor); diff --git a/client/src/queryEditor/QueryEditorChart.js b/client/src/queryEditor/QueryEditorChart.js index b42ca9327..46b178fa3 100644 --- a/client/src/queryEditor/QueryEditorChart.js +++ b/client/src/queryEditor/QueryEditorChart.js @@ -1,5 +1,4 @@ import { connect } from 'unistore/react'; -import { actions } from '../stores/unistoreStore'; import SqlpadTauChart from '../common/SqlpadTauChart'; function mapStateToProps(state) { @@ -13,9 +12,6 @@ function mapStateToProps(state) { }; } -const ConnectedChart = connect( - mapStateToProps, - actions -)(SqlpadTauChart); +const ConnectedChart = connect(mapStateToProps)(SqlpadTauChart); export default ConnectedChart; diff --git a/client/src/queryEditor/QueryEditorResult.js b/client/src/queryEditor/QueryEditorResult.js index 0a49a4aad..0cf50c76b 100644 --- a/client/src/queryEditor/QueryEditorResult.js +++ b/client/src/queryEditor/QueryEditorResult.js @@ -1,10 +1,10 @@ import { connect } from 'unistore/react'; -import { actions } from '../stores/unistoreStore'; import QueryResultDataTable from '../common/QueryResultDataTable.js'; -const ConnectedQueryEditorResult = connect( - ['isRunning', 'queryError', 'queryResult'], - actions -)(QueryResultDataTable); +const ConnectedQueryEditorResult = connect([ + 'isRunning', + 'queryError', + 'queryResult' +])(QueryResultDataTable); export default ConnectedQueryEditorResult; diff --git a/client/src/queryEditor/QueryEditorSqlEditor.js b/client/src/queryEditor/QueryEditorSqlEditor.js index 2fb33bc2d..811dc5222 100644 --- a/client/src/queryEditor/QueryEditorSqlEditor.js +++ b/client/src/queryEditor/QueryEditorSqlEditor.js @@ -1,6 +1,6 @@ import React, { useCallback } from 'react'; import { connect } from 'unistore/react'; -import { actions } from '../stores/unistoreStore'; +import { setQueryState, handleQuerySelectionChange } from '../stores/queries'; import SqlEditor from '../common/SqlEditor'; function mapStateToProps(state, props) { @@ -31,7 +31,7 @@ function QueryEditorSqlEditor({ const ConnectedQueryEditorSqlEditor = connect( mapStateToProps, - actions + { setQueryState, handleQuerySelectionChange } )(QueryEditorSqlEditor); export default ConnectedQueryEditorSqlEditor; diff --git a/client/src/queryEditor/QueryResultHeader.js b/client/src/queryEditor/QueryResultHeader.js index 0bbb325f5..8924c9db6 100644 --- a/client/src/queryEditor/QueryResultHeader.js +++ b/client/src/queryEditor/QueryResultHeader.js @@ -5,7 +5,6 @@ import { connect } from 'unistore/react'; import IncompleteDataNotification from '../common/IncompleteDataNotification'; import SecondsTimer from '../common/SecondsTimer.js'; import Text from '../common/Text'; -import { actions } from '../stores/unistoreStore'; const barStyle = { height: '30px', @@ -104,7 +103,10 @@ QueryResultHeader.defaultProps = { isRunning: false }; -export default connect( - ['cacheKey', 'config', 'isRunning', 'queryResult', 'runQueryStartTime'], - actions -)(React.memo(QueryResultHeader)); +export default connect([ + 'cacheKey', + 'config', + 'isRunning', + 'queryResult', + 'runQueryStartTime' +])(React.memo(QueryResultHeader)); diff --git a/client/src/queryEditor/VisSidebar.js b/client/src/queryEditor/VisSidebar.js index 14ccab725..58b726488 100644 --- a/client/src/queryEditor/VisSidebar.js +++ b/client/src/queryEditor/VisSidebar.js @@ -7,7 +7,10 @@ import Select from '../common/Select'; import Sidebar from '../common/Sidebar'; import SidebarBody from '../common/SidebarBody'; import { exportPng } from '../common/tauChartRef'; -import { actions } from '../stores/unistoreStore'; +import { + handleChartConfigurationFieldsChange, + handleChartTypeChange +} from '../stores/queries'; import chartDefinitions from '../utilities/chartDefinitions.js'; import ChartInputs from './ChartInputs.js'; @@ -27,7 +30,7 @@ function mapStateToProps(state) { const ConnectedVisSidebar = connect( mapStateToProps, - actions + { handleChartConfigurationFieldsChange, handleChartTypeChange } )(React.memo(VisSidebar)); function VisSidebar({ diff --git a/client/src/queryEditor/toolbar/AboutModal.js b/client/src/queryEditor/toolbar/AboutModal.js index 94f6964c9..7af1fc627 100644 --- a/client/src/queryEditor/toolbar/AboutModal.js +++ b/client/src/queryEditor/toolbar/AboutModal.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'unistore/react'; import Modal from '../../common/Modal'; -import { actions } from '../../stores/unistoreStore'; import AboutContent from './AboutContent'; function mapStateToProps(state) { @@ -11,10 +10,7 @@ function mapStateToProps(state) { }; } -const ConnectedAboutModal = connect( - mapStateToProps, - actions -)(React.memo(AboutModal)); +const ConnectedAboutModal = connect(mapStateToProps)(React.memo(AboutModal)); function AboutModal({ version, visible, onClose }) { return ( diff --git a/client/src/queryEditor/toolbar/QueryTagsModal.js b/client/src/queryEditor/toolbar/QueryTagsModal.js index 189a20c77..fa789412b 100644 --- a/client/src/queryEditor/toolbar/QueryTagsModal.js +++ b/client/src/queryEditor/toolbar/QueryTagsModal.js @@ -1,6 +1,6 @@ import React from 'react'; import { connect } from 'unistore/react'; -import { actions } from '../../stores/unistoreStore'; +import { setQueryState } from '../../stores/queries'; import Modal from '../../common/Modal'; import MultiSelect from '../../common/MultiSelect'; @@ -13,7 +13,7 @@ function mapStateToProps(state) { const ConnectedQueryTagsModal = connect( mapStateToProps, - actions + { setQueryState } )(React.memo(QueryTagsModal)); function QueryTagsModal({ diff --git a/client/src/queryEditor/toolbar/Toolbar.js b/client/src/queryEditor/toolbar/Toolbar.js index b44e4c57b..0aa38c699 100644 --- a/client/src/queryEditor/toolbar/Toolbar.js +++ b/client/src/queryEditor/toolbar/Toolbar.js @@ -19,7 +19,15 @@ import Drawer from '../../common/Drawer'; import Input from '../../common/Input'; import ConfigurationForm from '../../configuration/ConfigurationForm'; import ConnectionListDrawer from '../../connections/ConnectionListDrawer'; -import { actions } from '../../stores/unistoreStore'; +import { toggleSchema, toggleVisSidebar } from '../../stores/appNav'; +import { + formatQuery, + runQuery, + saveQuery, + handleCloneClick, + resetNewQuery, + setQueryState +} from '../../stores/queries'; import UserList from '../../users/UserList'; import fetchJson from '../../utilities/fetch-json.js'; import ConnectionDropDown from '../ConnectionDropdown'; @@ -41,7 +49,16 @@ function mapStateToProps(state) { const ConnectedEditorNavBar = connect( mapStateToProps, - actions + store => ({ + toggleSchema, + toggleVisSidebar, + formatQuery, + runQuery: runQuery(store), + saveQuery: saveQuery(store), + handleCloneClick, + resetNewQuery, + setQueryState + }) )(React.memo(Toolbar)); function Toolbar({ diff --git a/client/src/schema/SchemaSidebar.js b/client/src/schema/SchemaSidebar.js index b79911522..4bf458b67 100644 --- a/client/src/schema/SchemaSidebar.js +++ b/client/src/schema/SchemaSidebar.js @@ -10,7 +10,7 @@ import Button from '../common/Button'; import Input from '../common/Input'; import Text from '../common/Text'; import Divider from '../common/Divider'; -import { actions } from '../stores/unistoreStore'; +import { loadSchemaInfo, toggleSchemaItem } from '../stores/schema'; import styles from './SchemaSidebar.module.css'; import searchSchemaInfo from './searchSchemaInfo'; import getSchemaList from './getSchemaList'; @@ -29,6 +29,13 @@ function mapStateToProps(state, props) { }; } +function mapActions(store) { + return { + loadSchemaInfo: loadSchemaInfo(store), + toggleSchemaItem + }; +} + function SchemaSidebar({ expanded, connectionId, @@ -179,5 +186,5 @@ function SchemaSidebar({ export default connect( mapStateToProps, - actions + mapActions )(React.memo(SchemaSidebar)); diff --git a/client/src/stores/appNav.js b/client/src/stores/appNav.js new file mode 100644 index 000000000..9907014ac --- /dev/null +++ b/client/src/stores/appNav.js @@ -0,0 +1,20 @@ +export const initialState = { + showSchema: true, + showVisSidebar: false +}; + +export function toggleSchema(state) { + return { + showSchema: !state.showSchema, + showVisSidebar: false + }; +} + +export function toggleVisSidebar(state) { + return { + showVisSidebar: !state.showVisSidebar, + showSchema: false + }; +} + +export default { initialState, toggleSchema, toggleVisSidebar }; diff --git a/client/src/stores/config.js b/client/src/stores/config.js new file mode 100644 index 000000000..3a193ef5f --- /dev/null +++ b/client/src/stores/config.js @@ -0,0 +1,24 @@ +import fetchJson from '../utilities/fetch-json.js'; + +export const refreshAppContext = async () => { + const json = await fetchJson('GET', 'api/app'); + if (!json.config) { + return; + } + // Assign config.baseUrl to global + // It doesn't change and is needed for fetch requests + // This allows us to simplify the fetch() call + window.BASE_URL = json.config.baseUrl; + + return { + config: json.config, + smtpConfigured: json.smtpConfigured, + googleAuthConfigured: json.googleAuthConfigured, + currentUser: json.currentUser, + passport: json.passport, + adminRegistrationOpen: json.adminRegistrationOpen, + version: json.version + }; +}; + +export default { refreshAppContext }; diff --git a/client/src/stores/connections.js b/client/src/stores/connections.js new file mode 100644 index 000000000..45c8629aa --- /dev/null +++ b/client/src/stores/connections.js @@ -0,0 +1,85 @@ +import sortBy from 'lodash/sortBy'; +import message from '../common/message'; +import fetchJson from '../utilities/fetch-json.js'; + +const ONE_HOUR_MS = 1000 * 60 * 60; + +function sortConnections(connections) { + return sortBy(connections, [connection => connection.name.toLowerCase()]); +} + +export const initialState = { + selectedConnectionId: '', + connections: [], + connectionsLastUpdated: null, + connectionsLoading: false +}; + +export const selectConnectionId = (state, selectedConnectionId) => { + return { selectedConnectionId }; +}; + +export const deleteConnection = async (state, connectionId) => { + const { connections } = state; + const json = await fetchJson('DELETE', '/api/connections/' + connectionId); + if (json.error) { + return message.error('Delete failed'); + } + const filtered = connections.filter(c => c._id !== connectionId); + return { connections: sortConnections(filtered) }; +}; + +// Updates store (is not resonponsible for API call) +export const addUpdateConnection = async (state, connection) => { + const { connections } = state; + const found = connections.find(c => c._id === connection._id); + if (found) { + const mappedConnections = connections.map(c => { + if (c._id === connection._id) { + return connection; + } + return c; + }); + return { connections: sortConnections(mappedConnections) }; + } + return { connections: sortConnections([connection].concat(connections)) }; +}; + +export const loadConnections = store => async (state, force) => { + const { connections, connectionsLoading, connectionsLastUpdated } = state; + if (connectionsLoading) { + return; + } + + if ( + force || + !connections.length || + (connectionsLastUpdated && + new Date() - connectionsLastUpdated > ONE_HOUR_MS) + ) { + store.setState({ connectionsLoading: true }); + const { error, connections } = await fetchJson('GET', '/api/connections/'); + if (error) { + message.error(error); + } + const update = { + connectionsLoading: false, + connectionsLastUpdated: new Date(), + connections: sortConnections(connections) + }; + + if (connections && connections.length === 1) { + update.selectedConnectionId = connections[0]._id; + } + + store.setState(update); + } +}; + +export default { + initialState, + selectConnectionId, + deleteConnection, + addUpdateConnection, + loadConnections +}; diff --git a/client/src/stores/queries.js b/client/src/stores/queries.js new file mode 100644 index 000000000..72e0cf977 --- /dev/null +++ b/client/src/stores/queries.js @@ -0,0 +1,244 @@ +import uuid from 'uuid'; +import message from '../common/message'; +import fetchJson from '../utilities/fetch-json.js'; + +const ONE_HOUR_MS = 1000 * 60 * 60; + +export const NEW_QUERY = { + _id: '', + name: '', + tags: [], + connectionId: '', + queryText: '', + chartConfiguration: { + chartType: '', + fields: {} // key value for chart + } +}; + +export const initialState = { + cacheKey: uuid.v1(), + isRunning: false, + isSaving: false, + queries: [], + query: Object.assign({}, NEW_QUERY), + queryResult: undefined, + queryError: null, + runQueryStartTime: undefined, + selectedText: '', + showValidation: false, + unsavedChanges: false +}; + +export const formatQuery = async state => { + const { query } = state; + + const json = await fetchJson('POST', '/api/format-sql', { + query: query.queryText + }); + + if (json.error) { + message.error(json.error); + return; + } + + return { + query: { ...query, queryText: json.query }, + unsavedChanges: true + }; +}; + +export const loadQueries = store => async state => { + const { queriesLastUpdated, queries } = state; + if ( + !queries.length || + (queriesLastUpdated && new Date() - queriesLastUpdated > ONE_HOUR_MS) + ) { + store.setState({ queriesLoading: true }); + const json = await fetchJson('GET', '/api/queries'); + if (json.error) { + message.error(json.error); + } + store.setState({ + queriesLoading: false, + queriesLastUpdated: new Date(), + queries: json.queries || [] + }); + } +}; + +export const deleteQuery = store => async (state, queryId) => { + const { queries } = state; + const filteredQueries = queries.filter(q => { + return q._id !== queryId; + }); + store.setState({ queries: filteredQueries }); + const json = await fetchJson('DELETE', '/api/queries/' + queryId); + if (json.error) { + message.error(json.error); + store.setState({ queries }); + } +}; + +export const loadQuery = async (state, queryId) => { + const { error, query } = await fetchJson('GET', `/api/queries/${queryId}`); + if (error) { + message.error(error); + } + return { query, selectedConnectionId: query.connectionId }; +}; + +export const runQuery = store => async state => { + const { cacheKey, query, selectedText, selectedConnectionId } = state; + + store.setState({ + isRunning: true, + runQueryStartTime: new Date() + }); + const postData = { + connectionId: selectedConnectionId, + cacheKey, + queryName: query.name, + queryText: selectedText || query.queryText + }; + const { queryResult, error } = await fetchJson( + 'POST', + '/api/query-result', + postData + ); + if (error) { + message.error(error); + } + store.setState({ + isRunning: false, + queryError: error, + queryResult + }); +}; + +export const saveQuery = store => async state => { + const { query, selectedConnectionId } = state; + if (!query.name) { + message.error('Query name required'); + store.setState({ showValidation: true }); + return; + } + store.setState({ isSaving: true }); + const queryData = Object.assign({}, query, { + connectionId: selectedConnectionId + }); + if (query._id) { + fetchJson('PUT', `/api/queries/${query._id}`, queryData).then(json => { + const { error, query } = json; + const { queries } = store.getState(); + if (error) { + message.error(error); + store.setState({ isSaving: false }); + return; + } + message.success('Query Saved'); + const updatedQueries = queries.map(q => { + return q._id === query._id ? query : q; + }); + store.setState({ + isSaving: false, + unsavedChanges: false, + query, + queries: updatedQueries + }); + }); + } else { + fetchJson('POST', `/api/queries`, queryData).then(json => { + const { error, query } = json; + const { queries } = store.getState(); + if (error) { + message.error(error); + store.setState({ isSaving: false }); + return; + } + window.history.replaceState( + {}, + query.name, + `${window.BASE_URL}/queries/${query._id}` + ); + message.success('Query Saved'); + store.setState({ + isSaving: false, + unsavedChanges: false, + query, + queries: [query].concat(queries) + }); + }); + } +}; + +export const handleCloneClick = state => { + const { query } = state; + delete query._id; + const name = 'Copy of ' + query.name; + window.history.replaceState({}, name, `${window.BASE_URL}/queries/new`); + return { query: { ...query, name }, unsavedChanges: true }; +}; + +export const resetNewQuery = state => { + return { + queryResult: undefined, + query: Object.assign({}, NEW_QUERY), + unsavedChanges: false + }; +}; + +export const setQueryState = (state, field, value) => { + const { query } = state; + return { query: { ...query, [field]: value }, unsavedChanges: true }; +}; + +export const handleChartConfigurationFieldsChange = ( + state, + chartFieldId, + queryResultField +) => { + const { query } = state; + const { fields } = query.chartConfiguration; + return { + query: { + ...query, + chartConfiguration: { + ...query.chartConfiguration, + fields: { ...fields, [chartFieldId]: queryResultField } + } + }, + unsavedChanges: true + }; +}; + +export const handleChartTypeChange = (state, chartType) => { + const { query } = state; + return { + query: { + ...query, + chartConfiguration: { ...query.chartConfiguration, chartType } + }, + unsavedChanges: true + }; +}; + +export const handleQuerySelectionChange = (state, selectedText) => { + return { selectedText }; +}; + +export default { + initialState, + formatQuery, + loadQueries, + deleteQuery, + loadQuery, + runQuery, + saveQuery, + handleCloneClick, + resetNewQuery, + setQueryState, + handleChartConfigurationFieldsChange, + handleChartTypeChange, + handleQuerySelectionChange +}; diff --git a/client/src/stores/schema.js b/client/src/stores/schema.js new file mode 100644 index 000000000..fe8b79466 --- /dev/null +++ b/client/src/stores/schema.js @@ -0,0 +1,73 @@ +import message from '../common/message'; +import fetchJson from '../utilities/fetch-json.js'; +import updateCompletions from '../utilities/updateCompletions.js'; + +export const initialState = { + schema: {} // schema..loading / schemaInfo / lastUpdated +}; + +export const loadSchemaInfo = store => async (state, connectionId, reload) => { + const { schema } = state; + if (!schema[connectionId] || reload) { + store.setState({ + schema: { + ...schema, + [connectionId]: { + loading: true, + expanded: {} + } + } + }); + + const qs = reload ? '?reload=true' : ''; + const json = await fetchJson( + 'GET', + `/api/schema-info/${connectionId}${qs}` + ); + const { error, schemaInfo } = json; + if (error) { + return message.error(error); + } + updateCompletions(schemaInfo); + + // Pre-expand schemas + const expanded = {}; + if (schemaInfo) { + Object.keys(schemaInfo).forEach(schemaName => { + expanded[schemaName] = true; + }); + } + + return { + schema: { + ...schema, + [connectionId]: { + loading: false, + schemaInfo, + expanded + } + } + }; + } +}; + +export const toggleSchemaItem = (state, connectionId, item) => { + const { schema } = state; + const connectionSchema = schema[connectionId]; + const open = !connectionSchema.expanded[item.id]; + return { + schema: { + ...schema, + [connectionId]: { + ...connectionSchema, + expanded: { ...connectionSchema.expanded, [item.id]: open } + } + } + }; +}; + +export default { + initialState, + loadSchemaInfo, + toggleSchemaItem +}; diff --git a/client/src/stores/tags.js b/client/src/stores/tags.js new file mode 100644 index 000000000..d46497ed1 --- /dev/null +++ b/client/src/stores/tags.js @@ -0,0 +1,16 @@ +import message from '../common/message'; +import fetchJson from '../utilities/fetch-json.js'; + +export const initialState = { + availableTags: [] +}; + +export const loadTags = async state => { + const { error, tags } = await fetchJson('GET', '/api/tags'); + if (error) { + message.error(error); + } + return { availableTags: tags }; +}; + +export default { initialState, loadTags }; diff --git a/client/src/stores/unistoreStore.js b/client/src/stores/unistoreStore.js index 01dde14dc..877d9c95a 100644 --- a/client/src/stores/unistoreStore.js +++ b/client/src/stores/unistoreStore.js @@ -1,416 +1,16 @@ -import sortBy from 'lodash/sortBy'; import createStore from 'unistore'; -import uuid from 'uuid'; -import message from '../common/message'; -import fetchJson from '../utilities/fetch-json.js'; -import updateCompletions from '../utilities/updateCompletions.js'; - -const ONE_HOUR_MS = 1000 * 60 * 60; - -function sortConnections(connections) { - return sortBy(connections, [connection => connection.name.toLowerCase()]); -} - -const NEW_QUERY = { - _id: '', - name: '', - tags: [], - connectionId: '', - queryText: '', - chartConfiguration: { - chartType: '', - fields: {} // key value for chart - } -}; - -export const unistoreStore = createStore({ - selectedConnectionId: '', - connections: [], - connectionsLastUpdated: null, - connectionsLoading: false, - availableTags: [], - cacheKey: uuid.v1(), - isRunning: false, - isSaving: false, - queries: [], - query: Object.assign({}, NEW_QUERY), - queryResult: undefined, - queryError: null, - runQueryStartTime: undefined, - selectedText: '', - showValidation: false, - showSchema: true, - showVisSidebar: false, - unsavedChanges: false, - schema: {} // schema..loading / schemaInfo / lastUpdated +import appNav from './appNav'; +import connections from './connections'; +import queries from './queries'; +import schema from './schema'; +import tags from './tags'; + +const unistoreStore = createStore({ + ...queries.initialState, + ...appNav.initialState, + ...schema.initialState, + ...connections.initialState, + ...tags.initialState }); -// If actions is a function, it gets passed the store: -// Actions receive current state as first parameter and any other params next -// Actions can just return a state update: -export const actions = store => ({ - // APP NAV - toggleSchema(state) { - return { - showSchema: !state.showSchema, - showVisSidebar: false - }; - }, - - toggleVisSidebar(state) { - return { - showVisSidebar: !state.showVisSidebar, - showSchema: false - }; - }, - - // CONFIG - async refreshAppContext() { - const json = await fetchJson('GET', 'api/app'); - if (!json.config) { - return; - } - // Assign config.baseUrl to global - // It doesn't change and is needed for fetch requests - // This allows us to simplify the fetch() call - window.BASE_URL = json.config.baseUrl; - - return { - config: json.config, - smtpConfigured: json.smtpConfigured, - googleAuthConfigured: json.googleAuthConfigured, - currentUser: json.currentUser, - passport: json.passport, - adminRegistrationOpen: json.adminRegistrationOpen, - version: json.version - }; - }, - - // SCHEMA - async loadSchemaInfo(state, connectionId, reload) { - const { schema } = state; - if (!schema[connectionId] || reload) { - store.setState({ - schema: { - ...schema, - [connectionId]: { - loading: true, - expanded: {} - } - } - }); - - const qs = reload ? '?reload=true' : ''; - const json = await fetchJson( - 'GET', - `/api/schema-info/${connectionId}${qs}` - ); - const { error, schemaInfo } = json; - if (error) { - return message.error(error); - } - updateCompletions(schemaInfo); - - // Pre-expand schemas - const expanded = {}; - if (schemaInfo) { - Object.keys(schemaInfo).forEach(schemaName => { - expanded[schemaName] = true; - }); - } - - return { - schema: { - ...schema, - [connectionId]: { - loading: false, - schemaInfo, - expanded - } - } - }; - } - }, - - toggleSchemaItem(state, connectionId, item) { - const { schema } = state; - const connectionSchema = schema[connectionId]; - const open = !connectionSchema.expanded[item.id]; - return { - schema: { - ...schema, - [connectionId]: { - ...connectionSchema, - expanded: { ...connectionSchema.expanded, [item.id]: open } - } - } - }; - }, - - // CONNECTIONS - selectConnectionId(state, selectedConnectionId) { - return { selectedConnectionId }; - }, - - async deleteConnection(state, connectionId) { - const { connections } = state; - const json = await fetchJson('DELETE', '/api/connections/' + connectionId); - if (json.error) { - return message.error('Delete failed'); - } - const filtered = connections.filter(c => c._id !== connectionId); - return { connections: sortConnections(filtered) }; - }, - - // Updates store (is not resonponsible for API call) - async addUpdateConnection(state, connection) { - const { connections } = state; - const found = connections.find(c => c._id === connection._id); - if (found) { - const mappedConnections = connections.map(c => { - if (c._id === connection._id) { - return connection; - } - return c; - }); - return { connections: sortConnections(mappedConnections) }; - } - return { connections: sortConnections([connection].concat(connections)) }; - }, - - async loadConnections(state, force) { - const { connections, connectionsLoading, connectionsLastUpdated } = state; - if (connectionsLoading) { - return; - } - - if ( - force || - !connections.length || - (connectionsLastUpdated && - new Date() - connectionsLastUpdated > ONE_HOUR_MS) - ) { - store.setState({ connectionsLoading: true }); - const { error, connections } = await fetchJson( - 'GET', - '/api/connections/' - ); - if (error) { - message.error(error); - } - const update = { - connectionsLoading: false, - connectionsLastUpdated: new Date(), - connections: sortConnections(connections) - }; - - if (connections && connections.length === 1) { - update.selectedConnectionId = connections[0]._id; - } - - store.setState(update); - } - }, - - // QUERY - async formatQuery(state) { - const { query } = state; - - const json = await fetchJson('POST', '/api/format-sql', { - query: query.queryText - }); - - if (json.error) { - message.error(json.error); - return; - } - - return { - query: { ...query, queryText: json.query }, - unsavedChanges: true - }; - }, - - async loadQueries(state) { - const { queriesLastUpdated, queries } = state; - if ( - !queries.length || - (queriesLastUpdated && new Date() - queriesLastUpdated > ONE_HOUR_MS) - ) { - store.setState({ queriesLoading: true }); - const json = await fetchJson('GET', '/api/queries'); - if (json.error) { - message.error(json.error); - } - store.setState({ - queriesLoading: false, - queriesLastUpdated: new Date(), - queries: json.queries || [] - }); - } - }, - - async deleteQuery(state, queryId) { - const { queries } = state; - const filteredQueries = queries.filter(q => { - return q._id !== queryId; - }); - store.setState({ queries: filteredQueries }); - const json = await fetchJson('DELETE', '/api/queries/' + queryId); - if (json.error) { - message.error(json.error); - store.setState({ queries }); - } - }, - - async loadQuery(state, queryId) { - const { error, query } = await fetchJson('GET', `/api/queries/${queryId}`); - if (error) { - message.error(error); - } - return { query, selectedConnectionId: query.connectionId }; - }, - - async loadTags(state) { - const { error, tags } = await fetchJson('GET', '/api/tags'); - if (error) { - message.error(error); - } - return { availableTags: tags }; - }, - - async runQuery(state) { - const { cacheKey, query, selectedText, selectedConnectionId } = state; - - store.setState({ - isRunning: true, - runQueryStartTime: new Date() - }); - const postData = { - connectionId: selectedConnectionId, - cacheKey, - queryName: query.name, - queryText: selectedText || query.queryText - }; - const { queryResult, error } = await fetchJson( - 'POST', - '/api/query-result', - postData - ); - if (error) { - message.error(error); - } - store.setState({ - isRunning: false, - queryError: error, - queryResult - }); - }, - - saveQuery(state) { - const { query, selectedConnectionId } = state; - if (!query.name) { - message.error('Query name required'); - store.setState({ showValidation: true }); - return; - } - store.setState({ isSaving: true }); - const queryData = Object.assign({}, query, { - connectionId: selectedConnectionId - }); - if (query._id) { - fetchJson('PUT', `/api/queries/${query._id}`, queryData).then(json => { - const { error, query } = json; - const { queries } = store.getState(); - if (error) { - message.error(error); - store.setState({ isSaving: false }); - return; - } - message.success('Query Saved'); - const updatedQueries = queries.map(q => { - return q._id === query._id ? query : q; - }); - store.setState({ - isSaving: false, - unsavedChanges: false, - query, - queries: updatedQueries - }); - }); - } else { - fetchJson('POST', `/api/queries`, queryData).then(json => { - const { error, query } = json; - const { queries } = store.getState(); - if (error) { - message.error(error); - store.setState({ isSaving: false }); - return; - } - window.history.replaceState( - {}, - query.name, - `${window.BASE_URL}/queries/${query._id}` - ); - message.success('Query Saved'); - store.setState({ - isSaving: false, - unsavedChanges: false, - query, - queries: [query].concat(queries) - }); - }); - } - }, - - handleCloneClick(state) { - const { query } = state; - delete query._id; - const name = 'Copy of ' + query.name; - window.history.replaceState({}, name, `${window.BASE_URL}/queries/new`); - return { query: { ...query, name }, unsavedChanges: true }; - }, - - resetNewQuery(state) { - return { - queryResult: undefined, - query: Object.assign({}, NEW_QUERY), - unsavedChanges: false - }; - }, - - setQueryState(state, field, value) { - const { query } = state; - return { query: { ...query, [field]: value }, unsavedChanges: true }; - }, - - handleChartConfigurationFieldsChange(state, chartFieldId, queryResultField) { - const { query } = state; - const { fields } = query.chartConfiguration; - return { - query: { - ...query, - chartConfiguration: { - ...query.chartConfiguration, - fields: { ...fields, [chartFieldId]: queryResultField } - } - }, - unsavedChanges: true - }; - }, - - handleChartTypeChange(state, chartType) { - const { query } = state; - return { - query: { - ...query, - chartConfiguration: { ...query.chartConfiguration, chartType } - }, - unsavedChanges: true - }; - }, - - handleQuerySelectionChange(state, selectedText) { - return { selectedText }; - } -}); +export default unistoreStore; diff --git a/client/src/users/UserList.js b/client/src/users/UserList.js index f14540181..87ec1f455 100644 --- a/client/src/users/UserList.js +++ b/client/src/users/UserList.js @@ -6,7 +6,6 @@ import ListItem from '../common/ListItem'; import message from '../common/message'; import Modal from '../common/Modal'; import Text from '../common/Text'; -import { actions } from '../stores/unistoreStore'; import fetchJson from '../utilities/fetch-json.js'; import EditUserForm from './EditUserForm'; import InviteUserForm from './InviteUserForm'; @@ -129,7 +128,4 @@ function UserList({ currentUser }) { ); } -export default connect( - ['currentUser'], - actions -)(React.memo(UserList)); +export default connect(['currentUser'])(React.memo(UserList)); From 3adcc7797bcf5d248f33badbf079313686506e3e Mon Sep 17 00:00:00 2001 From: Jacob Magnusson Date: Sat, 1 Jun 2019 21:07:56 +0200 Subject: [PATCH 046/855] Fix that docker image could not be built from a clean repo (#434) Also: * Support graceful shutdowns of server (SIGINT and SIGTERM) * Remove dependency on bash to run scripts/build.sh * Allow for docker auto builds --- .dockerignore | 13 +++++++++++++ Dockerfile | 17 +++++++++++++++++ docker-entrypoint | 2 ++ scripts/build.sh | 28 +++++++++++++++++----------- server/.dockerignore | 7 ------- server/Dockerfile | 17 ----------------- server/docker-entrypoint | 3 --- server/docker-publish.sh | 9 --------- server/server.js | 30 ++++++++++++++++++++++++------ 9 files changed, 73 insertions(+), 53 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-entrypoint delete mode 100644 server/.dockerignore delete mode 100644 server/Dockerfile delete mode 100644 server/docker-entrypoint delete mode 100755 server/docker-publish.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..9f2327422 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +.DS_Store +.env +.idea/ +/client/build +/client/node_modules +/db +/docker-validation +/docs +/docs-source +/node_modules +/server/node_modules +/server/public +/server/test diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..a1c0e6fb7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM node:12.3.1-alpine + +ENV NODE_ENV production +ENTRYPOINT ["/docker-entrypoint"] + +WORKDIR /sqlpad + +COPY . . + +RUN scripts/build.sh && \ + npm cache clean --force && \ + cp -r /sqlpad/server /usr/app && \ + cp /sqlpad/docker-entrypoint / && \ + chmod +x /docker-entrypoint && \ + rm -rf /sqlpad + +WORKDIR /var/lib/sqlpad diff --git a/docker-entrypoint b/docker-entrypoint new file mode 100644 index 000000000..a2e06af7e --- /dev/null +++ b/docker-entrypoint @@ -0,0 +1,2 @@ +#!/bin/sh +exec node /usr/app/server.js --dir /var/lib/sqlpad --port 3000 $@ diff --git a/scripts/build.sh b/scripts/build.sh index bbce60fe6..3f205e2e8 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,19 +1,25 @@ -#!/bin/bash +#!/usr/bin/env sh +SQLPAD_CLIENT_DIR=$(pwd)/client +SQLPAD_SERVER_DIR=$(pwd)/server +SCRIPTS_DIR=$(pwd)/scripts -# Get directory script is in -SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -cd $SCRIPTS_DIR/.. -SQLPAD_DIR=`pwd` +if [[ ! -d $SCRIPTS_DIR ]] || \ + [[ ! -d $SQLPAD_CLIENT_DIR ]] || \ + [[ ! -d $SQLPAD_SERVER_DIR ]] +then + echo This script must be executed from the sqlpad project directory + exit 1 +fi # Install node modules per package-lock.json npm ci -npm ci --prefix "$SQLPAD_DIR/client" -npm ci --prefix "$SQLPAD_DIR/server" +npm ci --prefix $SQLPAD_CLIENT_DIR +npm ci --prefix $SQLPAD_SERVER_DIR # Build front-end -npm run build --prefix "$SQLPAD_DIR/client" +npm run build --prefix $SQLPAD_CLIENT_DIR # Copy front-end build to server directory -rm -rf server/public -mkdir server/public -cp -r ./client/build/* ./server/public +rm -rf ${SQLPAD_SERVER_DIR}/public +mkdir ${SQLPAD_SERVER_DIR}/public +cp -r ${SQLPAD_CLIENT_DIR}/build/* ${SQLPAD_SERVER_DIR}/public diff --git a/server/.dockerignore b/server/.dockerignore deleted file mode 100644 index cac0fffb3..000000000 --- a/server/.dockerignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -.env -.idea/ -public/static/css/*.map -public/static/js/*.map -node_modules/ -test/ \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile deleted file mode 100644 index a7bcc58c2..000000000 --- a/server/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM node:8-alpine - -ENV DEBIAN_FRONTEND noninteractive -ENV NODE_ENV production - -WORKDIR /usr/app - -COPY . . - -RUN npm ci \ - && npm cache clean --force - -WORKDIR /var/lib/sqlpad - -COPY docker-entrypoint / -RUN chmod +x /docker-entrypoint -ENTRYPOINT ["/docker-entrypoint"] diff --git a/server/docker-entrypoint b/server/docker-entrypoint deleted file mode 100644 index 4b66c9d81..000000000 --- a/server/docker-entrypoint +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec node /usr/app/server.js --dir /var/lib/sqlpad --port 3000 $@ diff --git a/server/docker-publish.sh b/server/docker-publish.sh deleted file mode 100755 index 42a0055f9..000000000 --- a/server/docker-publish.sh +++ /dev/null @@ -1,9 +0,0 @@ -DOCKER_NAME=sqlpad/sqlpad -SQLPAD_VERSION=$(node -pe "require('./package.json').version") - -docker build -t $DOCKER_NAME:latest . - -docker tag $DOCKER_NAME:latest $DOCKER_NAME:$SQLPAD_VERSION - -docker push $DOCKER_NAME:latest -docker push $DOCKER_NAME:$SQLPAD_VERSION \ No newline at end of file diff --git a/server/server.js b/server/server.js index 4fb9ae34d..9cc5ac698 100755 --- a/server/server.js +++ b/server/server.js @@ -58,6 +58,7 @@ function detectPortOrSystemd(port) { /* Start the Server ============================================================================= */ +let server; db.onLoad(function(err) { if (err) throw err; @@ -83,11 +84,13 @@ db.onLoad(function(err) { passphrase: certPassphrase }; - https.createServer(httpsOptions, app).listen(_port, ip, function() { - const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; - const url = `https://${hostIp}:${_port}${baseUrl}`; - console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); - }); + server = https + .createServer(httpsOptions, app) + .listen(_port, ip, function() { + const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; + const url = `https://${hostIp}:${_port}${baseUrl}`; + console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); + }); }); } else { // http only @@ -101,7 +104,7 @@ db.onLoad(function(err) { // TODO FIXME XXX Persist the new port to the in-memory store. // config.set('port', _port) } - http.createServer(app).listen(_port, ip, function() { + server = http.createServer(app).listen(_port, ip, function() { const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; const url = `http://${hostIp}:${_port}${baseUrl}`; console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); @@ -109,3 +112,18 @@ db.onLoad(function(err) { }); } }); + +function handleShutdownSignal(signal) { + if (!server) { + console.log(`Received ${signal}, but no server to shutdown`); + process.exit(0); + } else { + console.log(`Received ${signal}, shutting down server...`); + server.close(function() { + process.exit(0); + }); + } +} + +process.on('SIGTERM', handleShutdownSignal); +process.on('SIGINT', handleShutdownSignal); From 0a426cfbf3b04d6b296c3095957627bde5a61f1e Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 15:13:05 -0400 Subject: [PATCH 047/855] Move chart config from sidebar to vis pane (#435) * Add IconButton component * Implement QueryEditorChartToolbar [WIP] * Remove configure icon button * Remove unnecessary queryId reference * Add active (pressed) button style for schema/vis * Fix line height for link icon buttons * Isolate ChartTypeSelect component * Move vis config from sidebar to vis pane * Consistent icon button border/outline * No visualization * Remove active button prop/style * Remove advanced field distinction * Cleanup QueryEditorChartToolbar The config inputs were going to be overlayed on chart, with a semi-transparent background. That was too confusing though, and it might be best to not have the chart rendered behind the config so that it doesn't try to rerender until after the user is finished making config edits * Disable chart link if query not yet saved --- client/src/common/Button.module.css | 12 +-- client/src/common/IconButton.js | 55 +++++++++++ client/src/common/IconButton.module.css | 43 +++++++++ client/src/common/SidebarBody.js | 9 -- client/src/css/reset.css | 2 +- client/src/queryEditor/ChartInputs.js | 45 ++++----- .../src/queryEditor/ChartInputsContainer.js | 44 +++++++++ client/src/queryEditor/ChartTypeSelect.js | 48 ++++++++++ client/src/queryEditor/ConnectionDropdown.js | 4 +- client/src/queryEditor/QueryEditor.js | 24 ++--- .../queryEditor/QueryEditorChartToolbar.js | 95 +++++++++++++++++++ client/src/queryEditor/VisSidebar.js | 90 ------------------ client/src/queryEditor/toolbar/Toolbar.js | 21 ++-- client/src/stores/appNav.js | 15 +-- client/src/utilities/chartDefinitions.js | 18 ++-- 15 files changed, 334 insertions(+), 191 deletions(-) create mode 100644 client/src/common/IconButton.js create mode 100644 client/src/common/IconButton.module.css delete mode 100644 client/src/common/SidebarBody.js create mode 100644 client/src/queryEditor/ChartInputsContainer.js create mode 100644 client/src/queryEditor/ChartTypeSelect.js create mode 100644 client/src/queryEditor/QueryEditorChartToolbar.js delete mode 100644 client/src/queryEditor/VisSidebar.js diff --git a/client/src/common/Button.module.css b/client/src/common/Button.module.css index 19fa7c3ad..6546bb28f 100644 --- a/client/src/common/Button.module.css +++ b/client/src/common/Button.module.css @@ -33,12 +33,12 @@ box-shadow: 0 2px 0 rgba(64, 169, 255, 0.5); } -.btn:hover, -.btn:focus, -.btn:active, -.btn.active { - text-decoration: none; - background: #fff; +.btn:active { + margin-top: 2px; + margin-bottom: -2px; + box-shadow: none; + background-color: #1890ff; + color: #fff; } .btn:focus { diff --git a/client/src/common/IconButton.js b/client/src/common/IconButton.js new file mode 100644 index 000000000..a19cf7f0a --- /dev/null +++ b/client/src/common/IconButton.js @@ -0,0 +1,55 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import styles from './IconButton.module.css'; +import Tooltip from './Tooltip'; + +const ICON_SIZE = 18; + +const IconButton = React.forwardRef( + ({ children, to, icon, tooltip, disabled, className, ...rest }, ref) => { + const classNames = [styles.btn]; + + if (className) { + classNames.push(className); + } + + let button; + + // If to is supplied this is a link + // IMPORTANT: Link is wrapped in
    to handle tooltip ref passing + // lineHeight set to initial to fix div/Link being slightly higher than buttons + if (to && !disabled) { + button = ( +
    + + {React.Children.map(children, child => { + return React.cloneElement(child, { size: ICON_SIZE }, null); + })} + +
    + ); + } else { + button = ( + + ); + } + + // If the button is disabled the tooltip gets weird on hover + if (!tooltip || disabled) { + return button; + } + + return {button}; + } +); + +export default IconButton; diff --git a/client/src/common/IconButton.module.css b/client/src/common/IconButton.module.css new file mode 100644 index 000000000..1041c5265 --- /dev/null +++ b/client/src/common/IconButton.module.css @@ -0,0 +1,43 @@ +.btn { + line-height: 1.499; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-weight: 400; + white-space: nowrap; + text-align: center; + background-image: none; + cursor: pointer; + user-select: none; + touch-action: manipulation; + padding: 4px; + font-size: 14px; + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); + background-color: transparent; + border: none; + border-color: rgb(217, 217, 217); +} + +.btn:active, +.btn:hover, +.btn:focus { + text-decoration: none; + outline: 2px solid #40a9ff; +} + +.btn:hover { + color: #40a9ff; +} + +.btn:active { + color: #096dd9; + transform: scale(0.95); +} + +.btn:disabled, +.btn[disabled] { + color: rgba(0, 0, 0, 0.25); + background-color: #eee; +} diff --git a/client/src/common/SidebarBody.js b/client/src/common/SidebarBody.js deleted file mode 100644 index 003d0fdea..000000000 --- a/client/src/common/SidebarBody.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; - -export default function SidebarBody({ children }) { - return ( -
    - {children} -
    - ); -} diff --git a/client/src/css/reset.css b/client/src/css/reset.css index 293c5edad..dcfc6ecf5 100644 --- a/client/src/css/reset.css +++ b/client/src/css/reset.css @@ -166,7 +166,7 @@ a:active, a:hover, a:focus { text-decoration: none; - outline: 3px solid #40a9ff; + outline: 2px solid #40a9ff; } a[disabled] { color: rgba(0, 0, 0, 0.25); diff --git a/client/src/queryEditor/ChartInputs.js b/client/src/queryEditor/ChartInputs.js index e4ee76d84..6b6ab3548 100644 --- a/client/src/queryEditor/ChartInputs.js +++ b/client/src/queryEditor/ChartInputs.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types'; -import React, { useState } from 'react'; +import React from 'react'; import Input from '../common/Input'; import Select from '../common/Select'; import chartDefinitions from '../utilities/chartDefinitions.js'; @@ -16,8 +16,8 @@ function cleanBoolean(value) { } const inputStyle = { - marginTop: 16, - marginBottom: 16 + margin: 8, + width: 200 }; function ChartInputs({ @@ -26,13 +26,6 @@ function ChartInputs({ queryResult, chartType }) { - const [showAdvanced, setShowAdvanced] = useState(false); - - const handleAdvancedClick = e => { - e.preventDefault(); - setShowAdvanced(!showAdvanced); - }; - const changeChartConfigurationField = (chartFieldId, queryResultField) => { onChartConfigurationFieldsChange(chartFieldId, queryResultField); }; @@ -82,7 +75,6 @@ function ChartInputs({ } else if (field.inputType === 'checkbox') { const checked = cleanBoolean(queryChartConfigurationFields[field.fieldId]) || false; - console.log(field); return (
    field.advanced == null || field.advanced === false - ); - - const advancedFields = chartDefinition.fields.filter( - field => field.advanced === true - ); - - const advancedLink = advancedFields.length ? ( - - {showAdvanced ? 'hide advanced settings' : 'show advanced settings'} - - ) : null; - return ( -
    - {renderFormGroup(regularFields)} - {advancedLink} - {showAdvanced && renderFormGroup(advancedFields)} +
    + {renderFormGroup(chartDefinition.fields)}
    ); } diff --git a/client/src/queryEditor/ChartInputsContainer.js b/client/src/queryEditor/ChartInputsContainer.js new file mode 100644 index 000000000..09d59b8a5 --- /dev/null +++ b/client/src/queryEditor/ChartInputsContainer.js @@ -0,0 +1,44 @@ +import React from 'react'; +import { connect } from 'unistore/react'; +import { + handleChartConfigurationFieldsChange, + handleChartTypeChange +} from '../stores/queries'; +import ChartInputs from './ChartInputs.js'; + +function mapStateToProps(state) { + return { + queryResult: state.queryResult, + chartType: + state.query && + state.query.chartConfiguration && + state.query.chartConfiguration.chartType, + fields: + state.query && + state.query.chartConfiguration && + state.query.chartConfiguration.fields + }; +} + +const Connected = connect( + mapStateToProps, + { handleChartConfigurationFieldsChange, handleChartTypeChange } +)(React.memo(ChartInputsContainer)); + +function ChartInputsContainer({ + chartType, + fields, + queryResult, + handleChartConfigurationFieldsChange +}) { + return ( + + ); +} + +export default Connected; diff --git a/client/src/queryEditor/ChartTypeSelect.js b/client/src/queryEditor/ChartTypeSelect.js new file mode 100644 index 000000000..429308791 --- /dev/null +++ b/client/src/queryEditor/ChartTypeSelect.js @@ -0,0 +1,48 @@ +import React from 'react'; +import { connect } from 'unistore/react'; +import { handleChartTypeChange } from '../stores/queries'; +import Select from '../common/Select'; +import chartDefinitions from '../utilities/chartDefinitions.js'; + +function mapStateToProps(state) { + return { + chartType: + state.query && + state.query.chartConfiguration && + state.query.chartConfiguration.chartType + }; +} + +const ConnectedVisSidebar = connect( + mapStateToProps, + { handleChartTypeChange } +)(React.memo(ChartTypeSelect)); + +function ChartTypeSelect({ + chartType, + handleChartTypeChange, + className, + style +}) { + const chartOptions = chartDefinitions.map(d => { + return ( + + ); + }); + + return ( + + ); +} + +export default ConnectedVisSidebar; diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index a149a890b..06742038c 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -32,8 +32,8 @@ function ConnectionDropdown({ }; const style = !selectedConnectionId - ? { color: '#777', width: 260 } - : { width: 260 }; + ? { color: '#777', width: 220 } + : { width: 220 }; return ( <> diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 75bafc83f..452b94a2c 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -20,7 +20,7 @@ import QueryEditorResult from './QueryEditorResult'; import QueryEditorSqlEditor from './QueryEditorSqlEditor'; import QueryResultHeader from './QueryResultHeader.js'; import Toolbar from './toolbar/Toolbar'; -import VisSidebar from './VisSidebar'; +import QueryEditorChartToolbar from './QueryEditorChartToolbar'; // TODO FIXME XXX capture unsaved state to local storage // Prompt is removed. It doesn't always work anyways @@ -88,13 +88,7 @@ class QueryEditor extends React.Component { }, 700); render() { - const { - chartType, - queryName, - showSchema, - showVisSidebar, - queryId - } = this.props; + const { chartType, queryName, showSchema } = this.props; document.title = queryName; @@ -107,13 +101,10 @@ class QueryEditor extends React.Component { onChange={this.handleVisPaneResize} > -
    -
    +
    + -
    +
    ) : ( @@ -149,8 +140,6 @@ class QueryEditor extends React.Component { let sidebar = null; if (showSchema) { sidebar = ; - } else if (showVisSidebar) { - sidebar = ; } const sqlTabPane = sidebar ? ( @@ -207,8 +196,7 @@ function mapStateToProps(state, props) { state.query.chartConfiguration && state.query.chartConfiguration.chartType, queryName: state.query && state.query.name, - showSchema: state.showSchema, - showVisSidebar: state.showVisSidebar + showSchema: state.showSchema }; } diff --git a/client/src/queryEditor/QueryEditorChartToolbar.js b/client/src/queryEditor/QueryEditorChartToolbar.js new file mode 100644 index 000000000..42dd77c96 --- /dev/null +++ b/client/src/queryEditor/QueryEditorChartToolbar.js @@ -0,0 +1,95 @@ +import 'd3'; +import DownloadIcon from 'mdi-react/DownloadIcon'; +import OpenInNewIcon from 'mdi-react/OpenInNewIcon'; +import SettingsIcon from 'mdi-react/SettingsIcon'; +import CloseIcon from 'mdi-react/CloseIcon'; +import React, { useState } from 'react'; +import { connect } from 'unistore/react'; +import IconButton from '../common/IconButton'; +import { exportPng } from '../common/tauChartRef'; +import ChartInputsContainer from './ChartInputsContainer'; + +function mapStateToProps(state) { + return { + chartType: + state.query && + state.query.chartConfiguration && + state.query.chartConfiguration.chartType, + queryId: (state.query && state.query._id) || 'new', + queryResult: state.queryResult + }; +} + +const Connected = connect(mapStateToProps)(QueryEditorChartToolbar); + +function QueryEditorChartToolbar({ + chartType, + queryResult, + queryId, + children +}) { + const [showConfig, setShowConfig] = useState(false); + + const downloadEnabled = + !showConfig && queryResult && queryResult.rows && queryResult.rows.length; + + const settingsDisabled = !Boolean(chartType); + + const backgroundColor = showConfig ? '#f5f5f5' : 'transparent'; + + return ( +
    +
    + + + + exportPng(queryId)} + tooltip="Save chart image" + > + + + setShowConfig(!showConfig)} + tooltip="Configure" + > + {showConfig ? : } + +
    + + {showConfig ? ( +
    + +
    + ) : ( +
    + {children} +
    + )} +
    + ); +} + +export default Connected; diff --git a/client/src/queryEditor/VisSidebar.js b/client/src/queryEditor/VisSidebar.js deleted file mode 100644 index 58b726488..000000000 --- a/client/src/queryEditor/VisSidebar.js +++ /dev/null @@ -1,90 +0,0 @@ -import DownloadIcon from 'mdi-react/DownloadIcon'; -import PropTypes from 'prop-types'; -import React from 'react'; -import { connect } from 'unistore/react'; -import Button from '../common/Button'; -import Select from '../common/Select'; -import Sidebar from '../common/Sidebar'; -import SidebarBody from '../common/SidebarBody'; -import { exportPng } from '../common/tauChartRef'; -import { - handleChartConfigurationFieldsChange, - handleChartTypeChange -} from '../stores/queries'; -import chartDefinitions from '../utilities/chartDefinitions.js'; -import ChartInputs from './ChartInputs.js'; - -function mapStateToProps(state) { - return { - queryResult: state.queryResult, - chartType: - state.query && - state.query.chartConfiguration && - state.query.chartConfiguration.chartType, - fields: - state.query && - state.query.chartConfiguration && - state.query.chartConfiguration.fields - }; -} - -const ConnectedVisSidebar = connect( - mapStateToProps, - { handleChartConfigurationFieldsChange, handleChartTypeChange } -)(React.memo(VisSidebar)); - -function VisSidebar({ - chartType, - fields, - queryResult, - handleChartTypeChange, - handleChartConfigurationFieldsChange, - queryId -}) { - const chartOptions = chartDefinitions.map(d => { - return ( - - ); - }); - - return ( - - - - - -
    - -
    -
    - ); -} - -VisSidebar.propTypes = { - onChartConfigurationFieldsChange: PropTypes.func, - onChartTypeChange: PropTypes.func, - onSaveImageClick: PropTypes.func, - query: PropTypes.object, - queryId: PropTypes.string, - queryResult: PropTypes.object -}; - -export default ConnectedVisSidebar; diff --git a/client/src/queryEditor/toolbar/Toolbar.js b/client/src/queryEditor/toolbar/Toolbar.js index 0aa38c699..798c8df59 100644 --- a/client/src/queryEditor/toolbar/Toolbar.js +++ b/client/src/queryEditor/toolbar/Toolbar.js @@ -1,5 +1,4 @@ import { Menu, MenuButton, MenuItem, MenuList } from '@reach/menu-button'; -import VisIcon from 'mdi-react/ChartBarIcon'; import CopyIcon from 'mdi-react/ContentCopyIcon'; import UnsavedIcon from 'mdi-react/ContentSaveEditIcon'; import SaveIcon from 'mdi-react/ContentSaveIcon'; @@ -19,13 +18,13 @@ import Drawer from '../../common/Drawer'; import Input from '../../common/Input'; import ConfigurationForm from '../../configuration/ConfigurationForm'; import ConnectionListDrawer from '../../connections/ConnectionListDrawer'; -import { toggleSchema, toggleVisSidebar } from '../../stores/appNav'; +import { toggleSchema } from '../../stores/appNav'; import { formatQuery, - runQuery, - saveQuery, handleCloneClick, resetNewQuery, + runQuery, + saveQuery, setQueryState } from '../../stores/queries'; import UserList from '../../users/UserList'; @@ -34,6 +33,7 @@ import ConnectionDropDown from '../ConnectionDropdown'; import AboutModal from './AboutModal'; import QueryListButton from './QueryListButton'; import QueryTagsModal from './QueryTagsModal'; +import ChartTypeSelect from '../ChartTypeSelect'; function mapStateToProps(state) { return { @@ -51,7 +51,6 @@ const ConnectedEditorNavBar = connect( mapStateToProps, store => ({ toggleSchema, - toggleVisSidebar, formatQuery, runQuery: runQuery(store), saveQuery: saveQuery(store), @@ -75,7 +74,6 @@ function Toolbar({ setQueryState, showValidation, toggleSchema, - toggleVisSidebar, unsavedChanges }) { const [showTags, setShowTags] = useState(false); @@ -100,7 +98,7 @@ function Toolbar({ width: '100%', backgroundColor: 'rgba(0, 0, 0, 0.04)', padding: 6, - borderBottom: '1px solid #eee' + borderBottom: '1px solid rgb(204, 204, 204)' }} >
    @@ -120,11 +118,6 @@ function Toolbar({ onClick={toggleSchema} icon={} /> - +
    + + +
    diff --git a/client/src/stores/appNav.js b/client/src/stores/appNav.js index 9907014ac..cc4a908e4 100644 --- a/client/src/stores/appNav.js +++ b/client/src/stores/appNav.js @@ -1,20 +1,11 @@ export const initialState = { - showSchema: true, - showVisSidebar: false + showSchema: false }; export function toggleSchema(state) { return { - showSchema: !state.showSchema, - showVisSidebar: false + showSchema: !state.showSchema }; } -export function toggleVisSidebar(state) { - return { - showVisSidebar: !state.showVisSidebar, - showSchema: false - }; -} - -export default { initialState, toggleSchema, toggleVisSidebar }; +export default { initialState, toggleSchema }; diff --git a/client/src/utilities/chartDefinitions.js b/client/src/utilities/chartDefinitions.js index 787aba8eb..f11b7b985 100644 --- a/client/src/utilities/chartDefinitions.js +++ b/client/src/utilities/chartDefinitions.js @@ -47,29 +47,25 @@ const chartDefinitions = [ fieldId: 'filter', required: false, label: 'Quick Filter', - inputType: 'checkbox', - advanced: true + inputType: 'checkbox' }, { fieldId: 'trendline', required: false, label: 'Show Trendline', - inputType: 'checkbox', - advanced: true + inputType: 'checkbox' }, { fieldId: 'yMin', required: false, label: 'y Axis Min', - inputType: 'textbox', - advanced: true + inputType: 'textbox' }, { fieldId: 'yMax', required: false, label: 'y Axis Max', - inputType: 'textbox', - advanced: true + inputType: 'textbox' } ] }, @@ -186,15 +182,13 @@ const chartDefinitions = [ fieldId: 'filter', required: false, label: 'Quick Filter', - inputType: 'checkbox', - advanced: true + inputType: 'checkbox' }, { fieldId: 'trendline', required: false, label: 'Show Trendline', - inputType: 'checkbox', - advanced: true + inputType: 'checkbox' } ] }, From e324286ab54a8700ced0b41b0ef920ec2f01787a Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 15:19:35 -0400 Subject: [PATCH 048/855] Clear query results on query select/load --- client/src/stores/queries.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/src/stores/queries.js b/client/src/stores/queries.js index 72e0cf977..73707c75b 100644 --- a/client/src/stores/queries.js +++ b/client/src/stores/queries.js @@ -85,7 +85,12 @@ export const loadQuery = async (state, queryId) => { if (error) { message.error(error); } - return { query, selectedConnectionId: query.connectionId }; + return { + query, + queryResult: undefined, + selectedConnectionId: query.connectionId, + unsavedChanges: false + }; }; export const runQuery = store => async state => { From 4a9312d831e99c1d3c0fe3719c8b6d8357539aaf Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 17:26:33 -0400 Subject: [PATCH 049/855] Tweak IconButton styles Ensure sizing is consistent. Switch to using border instead of outline to prevent adjacent elements from covering outline. --- client/src/common/IconButton.module.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/src/common/IconButton.module.css b/client/src/common/IconButton.module.css index 1041c5265..d4f9393f0 100644 --- a/client/src/common/IconButton.module.css +++ b/client/src/common/IconButton.module.css @@ -18,13 +18,18 @@ background-color: transparent; border: none; border-color: rgb(217, 217, 217); + flex: 0 0 auto; + width: 32px; + height: 32px; } .btn:active, .btn:hover, .btn:focus { text-decoration: none; - outline: 2px solid #40a9ff; + outline: none; + border: 2px solid #40a9ff; + background-color: #f3f3f3; } .btn:hover { From b5c843464bc39c45c35ccbd929e4b6959e0b698f Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 17:26:50 -0400 Subject: [PATCH 050/855] Use IconButton for Modal close button --- client/src/common/Modal.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/common/Modal.js b/client/src/common/Modal.js index 4fd1150e9..6f2ccf2ac 100644 --- a/client/src/common/Modal.js +++ b/client/src/common/Modal.js @@ -2,7 +2,7 @@ import { Dialog } from '@reach/dialog'; import CloseIcon from 'mdi-react/CloseIcon'; import React from 'react'; import base from './base.module.css'; -import Button from './Button'; +import IconButton from './IconButton'; function Modal({ title, visible, onClose, width, children }) { if (visible) { @@ -24,7 +24,9 @@ function Modal({ title, visible, onClose, width, children }) { }} > {title} -
    {children} From 37c05b3b8f4977c7bce9a7ec9c2886ab7258cc89 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 17:27:18 -0400 Subject: [PATCH 051/855] Use IconButtons --- client/src/queries/QueryListDrawer.js | 18 +++--- client/src/queryEditor/toolbar/Toolbar.js | 73 +++++++++++++---------- 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/client/src/queries/QueryListDrawer.js b/client/src/queries/QueryListDrawer.js index fd49a7d9c..553ad623b 100644 --- a/client/src/queries/QueryListDrawer.js +++ b/client/src/queries/QueryListDrawer.js @@ -5,16 +5,16 @@ import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { connect } from 'unistore/react'; import base from '../common/base.module.css'; -import ButtonLink from '../common/ButtonLink'; import DeleteConfirmButton from '../common/DeleteConfirmButton'; import Divider from '../common/Divider'; import Drawer from '../common/Drawer'; +import IconButton from '../common/IconButton'; import ListItem from '../common/ListItem'; import MultiSelect from '../common/MultiSelect'; import SqlEditor from '../common/SqlEditor'; import Tag from '../common/Tag'; import Text from '../common/Text'; -import { loadQueries, deleteQuery } from '../stores/queries'; +import { deleteQuery, loadQueries } from '../stores/queries'; import getAvailableSearchTags from './getAvailableSearchTags'; import getDecoratedQueries from './getDecoratedQueries'; import styles from './QueryList.module.css'; @@ -88,22 +88,24 @@ function QueryListDrawer({ const queryUrl = `/queries/${query._id}`; const actions = [ - } - />, - + + , + } - />, + > + + , ; + } + return
    ; +} function mapStateToProps(state) { return { @@ -104,26 +114,23 @@ function Toolbar({
    - } onClick={() => resetNewQuery()} - /> - -
    + > + + - -
    + -
    + - + From ecc4637e950e4af707312460ee96b9eada4ce33e Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 20:09:41 -0400 Subject: [PATCH 052/855] Decrease error message font size --- client/src/common/QueryResultDataTable.js | 2 +- client/src/common/SqlpadTauChart.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/common/QueryResultDataTable.js b/client/src/common/QueryResultDataTable.js index e7081764e..78d867b1d 100644 --- a/client/src/common/QueryResultDataTable.js +++ b/client/src/common/QueryResultDataTable.js @@ -224,7 +224,7 @@ class QueryResultDataTable extends React.PureComponent { if (queryError) { return (
    {queryError} diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index 034969109..1717a8e52 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -61,7 +61,7 @@ function SqlpadTauChart({ return (
    {queryError} From 759b9148e1efc58af116e94f28ef051acf853c96 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 20:10:00 -0400 Subject: [PATCH 053/855] Use gray border --- client/src/common/base.module.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/common/base.module.css b/client/src/common/base.module.css index 8b2bfe89d..f3f86d37c 100644 --- a/client/src/common/base.module.css +++ b/client/src/common/base.module.css @@ -25,5 +25,5 @@ } .borderBottom { - border-bottom: 1px solid rgba(167, 14, 105, 0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.15); } From 5aa396126dd5daa577ad2c6e09bdcafebeb4d463 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 1 Jun 2019 20:13:29 -0400 Subject: [PATCH 054/855] Replace red with magenta secondary color May not be final but at least it is consistent --- client/src/common/Button.module.css | 14 +++++++------- client/src/common/message.js | 5 ++++- client/src/css/index.css | 4 +++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/client/src/common/Button.module.css b/client/src/common/Button.module.css index 6546bb28f..b2901d1bb 100644 --- a/client/src/common/Button.module.css +++ b/client/src/common/Button.module.css @@ -67,27 +67,27 @@ } .danger { - color: #f5222d; + color: #fb30ac; background-color: #f5f5f5; border-color: #d9d9d9; } .danger:hover { color: #fff; - background-color: #ff4d4f; - border-color: #ff4d4f; + background-color: #fb30ac; + border-color: #fb30ac; } .danger:focus { - color: #ff4d4f; + color: #fb30ac; background-color: #fff; - border-color: #ff4d4f; + border-color: #fb30ac; } .danger:active { color: #fff; - background-color: #cf1322; - border-color: #cf1322; + background-color: #fb30ac; + border-color: #fb30ac; } .btn:disabled, diff --git a/client/src/common/message.js b/client/src/common/message.js index ec64dfe3b..ed5b814f9 100644 --- a/client/src/common/message.js +++ b/client/src/common/message.js @@ -1,4 +1,5 @@ import React, { useState, useEffect } from 'react'; +import baseStyles from './base.module.css'; import mitt from 'mitt'; const emitter = mitt(); @@ -20,11 +21,13 @@ export function MessageDisplayer() { const msg = messages[messages.length - 1]; return (
    Date: Mon, 3 Jun 2019 00:00:10 -0400 Subject: [PATCH 055/855] Query list improvements (react-window, sorting) (#436) * Only focus on SQL editor if it is not set to readOnly * Add placeholder support to MultiSelect * Move styles to css.module, use react-window * Move Measure closer to what is being measured * Sort filtered queries by date * Delete confirm button is an icon * Lighten secondary text just a bit * Fix weird scroll/grow behavior in FireFox --- client/src/common/DeleteConfirmButton.js | 31 ++-- client/src/common/IconButton.js | 9 +- client/src/common/IconButton.module.css | 9 ++ client/src/common/MultiSelect.js | 3 +- client/src/common/SqlEditor.js | 2 +- client/src/common/Text.js | 2 +- client/src/queries/QueryList.module.css | 40 ++++- client/src/queries/QueryListDrawer.js | 186 ++++++++++++++--------- 8 files changed, 189 insertions(+), 93 deletions(-) diff --git a/client/src/common/DeleteConfirmButton.js b/client/src/common/DeleteConfirmButton.js index fc37d036f..b8a691ff0 100644 --- a/client/src/common/DeleteConfirmButton.js +++ b/client/src/common/DeleteConfirmButton.js @@ -1,7 +1,9 @@ import { Dialog } from '@reach/dialog'; +import DeleteIcon from 'mdi-react/DeleteIcon'; import React, { useRef, useState } from 'react'; import base from './base.module.css'; import Button from './Button'; +import IconButton from './IconButton'; const dialogStyle = { width: '500px', @@ -9,20 +11,31 @@ const dialogStyle = { }; const DeleteConfirmButton = React.forwardRef( - ({ children, confirmMessage, onConfirm, className, ...rest }, ref) => { + ({ children, confirmMessage, onConfirm, className, icon, ...rest }, ref) => { const [visible, setVisible] = useState(false); const cancelEl = useRef(null); return ( <> - + {icon ? ( + setVisible(true)} + ref={ref} + type="danger" + {...rest} + > + + + ) : ( + + )} {visible && ( setVisible(false)} diff --git a/client/src/common/IconButton.js b/client/src/common/IconButton.js index a19cf7f0a..c585e17cd 100644 --- a/client/src/common/IconButton.js +++ b/client/src/common/IconButton.js @@ -6,13 +6,20 @@ import Tooltip from './Tooltip'; const ICON_SIZE = 18; const IconButton = React.forwardRef( - ({ children, to, icon, tooltip, disabled, className, ...rest }, ref) => { + ( + { children, type, to, icon, tooltip, disabled, className, ...rest }, + ref + ) => { const classNames = [styles.btn]; if (className) { classNames.push(className); } + if (type === 'danger') { + classNames.push(styles.danger); + } + let button; // If to is supplied this is a link diff --git a/client/src/common/IconButton.module.css b/client/src/common/IconButton.module.css index d4f9393f0..4fd880607 100644 --- a/client/src/common/IconButton.module.css +++ b/client/src/common/IconButton.module.css @@ -46,3 +46,12 @@ color: rgba(0, 0, 0, 0.25); background-color: #eee; } + +.danger:hover, +.danger:focus { + color: #fb30ac; +} + +.danger:active { + color: #ff009d; +} diff --git a/client/src/common/MultiSelect.js b/client/src/common/MultiSelect.js index 6b08ad454..c656c0305 100644 --- a/client/src/common/MultiSelect.js +++ b/client/src/common/MultiSelect.js @@ -9,7 +9,7 @@ import Tag from './Tag'; * A lot of that example was changed and reduced down to what this is here. * If anyone out there more familiar with downshift wants to clean this up by all means feel free */ -function MultiSelect({ selectedItems = [], options, onChange }) { +function MultiSelect({ selectedItems = [], options, onChange, placeholder }) { const input = useRef(); const itemToString = item => (item ? item.name : ''); @@ -96,6 +96,7 @@ function MultiSelect({ selectedItems = [], options, onChange }) { : null} (
    { const s = Object.assign({}, style); if (type === 'secondary') { - s.color = 'rgba(0,0,0,0.45)'; + s.color = 'rgba(0,0,0,0.4)'; } else if (type === 'danger') { s.color = '#cf1322'; } diff --git a/client/src/queries/QueryList.module.css b/client/src/queries/QueryList.module.css index fdbb1c9ee..cff9740cf 100644 --- a/client/src/queries/QueryList.module.css +++ b/client/src/queries/QueryList.module.css @@ -1,10 +1,42 @@ +/* Padding of 2 added to show link outline when focused */ +.ListItem { + padding: 2px; +} + .ListItem:hover { background-color: #f4f4f4; transition: background-color 0.15s ease-in-out; } -.outlined:hover, -.outlined:active, -.outlined:focus { - outline: 1px solid #40a9ff; +.listItemActions { + position: absolute; + right: 8px; + display: flex; + align-items: center; +} + +.queryLink { + width: 100%; + padding: 8px; +} + +.preview { + position: fixed; + left: 640px; + top: 40px; + right: 40px; + bottom: 40px; + background-color: white; + display: flex; + flex-direction: column; + padding: 16px; +} + +.previewQueryName { + font-size: 1.25rem; +} + +.newWindowLink { + display: inline-flex; + align-items: center; } diff --git a/client/src/queries/QueryListDrawer.js b/client/src/queries/QueryListDrawer.js index 553ad623b..da2a2cb52 100644 --- a/client/src/queries/QueryListDrawer.js +++ b/client/src/queries/QueryListDrawer.js @@ -1,14 +1,14 @@ -import ChartIcon from 'mdi-react/FinanceIcon'; -import TableIcon from 'mdi-react/TableIcon'; +import OpenInNewIcon from 'mdi-react/OpenInNewIcon'; import PropTypes from 'prop-types'; import React, { useEffect, useState } from 'react'; +import Measure from 'react-measure'; import { Link } from 'react-router-dom'; +import { FixedSizeList as List } from 'react-window'; import { connect } from 'unistore/react'; import base from '../common/base.module.css'; import DeleteConfirmButton from '../common/DeleteConfirmButton'; import Divider from '../common/Divider'; import Drawer from '../common/Drawer'; -import IconButton from '../common/IconButton'; import ListItem from '../common/ListItem'; import MultiSelect from '../common/MultiSelect'; import SqlEditor from '../common/SqlEditor'; @@ -29,6 +29,11 @@ function QueryListDrawer({ }) { const [preview, setPreview] = useState(''); const [searches, setSearches] = useState([]); + const [dimensions, setDimensions] = useState({ + width: -1, + height: -1 + }); + useEffect(() => { loadQueries(); }, [loadQueries]); @@ -65,104 +70,133 @@ function QueryListDrawer({ }); } - // TODO FIXME XXX searches select is meant to be multi value + open text string! - // Figure out what to do about this later after antd removal - return ( - -
    - setSearches(items)} - /> -
    - {filteredQueries.map(query => { - const tableUrl = `/query-table/${query._id}`; - const chartUrl = `/query-chart/${query._id}`; - const queryUrl = `/queries/${query._id}`; + // For now sort by last modified + filteredQueries = filteredQueries.sort((a, b) => { + const aDate = a.modifiedDate || a.createdDate; + const bDate = b.modifiedDate || b.createdDate; + if (aDate < bDate) return 1; + if (bDate < aDate) return -1; + return 0; + }); + + const Row = ({ index, style }) => { + const query = filteredQueries[index]; + const tableUrl = `/query-table/${query._id}`; + const chartUrl = `/query-chart/${query._id}`; + const queryUrl = `/queries/${query._id}`; - const actions = [ - setPreview(query)} + onMouseLeave={() => setPreview('')} + style={style} + > + + {query.name} +
    + {query.connectionName} + +
    + - - , - + +
    + - - , + chart + deleteQuery(query._id)} > Delete - ]; +
    + + ); + }; - return ( - setPreview(query)} - onMouseLeave={() => setPreview('')} - style={{ position: 'relative' }} - > - - {query.name} -
    - {query.connectionName} - + // TODO: Move Measure and this vertical flex stuff into separate component + // This was copied from schema sidebar + return ( + +
    +
    + setSearches(items)} + placeholder="search queries" + /> +
    +
    + +
    + + { + setDimensions(contentRect.bounds); + }} + > + {({ measureRef }) => (
    - {actions} + + {Row} +
    - - ); - })} + )} +
    +
    {preview && ( -
    -
    {preview.name}
    +
    +
    {preview.name}
    Connection {preview.connectionName}
    By {preview.createdBy}
    From 8f655d04ea4f1015dd9ee0feba45568f445331d9 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 3 Jun 2019 00:20:23 -0400 Subject: [PATCH 056/855] Update UI dependencies --- client/package-lock.json | 2306 +++++++++++++++++++++----------------- client/package.json | 16 +- 2 files changed, 1289 insertions(+), 1033 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index a7f5b1cf2..4a59a0d0e 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -41,11 +41,11 @@ } }, "@babel/generator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", - "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", "requires": { - "@babel/types": "^7.4.0", + "@babel/types": "^7.4.4", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -79,35 +79,35 @@ } }, "@babel/helper-call-delegate": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz", - "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", "requires": { - "@babel/helper-hoist-variables": "^7.4.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0" + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.3.tgz", - "integrity": "sha512-UMl3TSpX11PuODYdWGrUeW6zFkdYhDn7wRLrOuNVM6f9L+S9CzmDXYyrp3MTHcwWjnzur1f/Op8A7iYZWya2Yg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", + "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", "requires": { "@babel/helper-function-name": "^7.1.0", "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0" + "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-split-export-declaration": "^7.4.4" } }, "@babel/helper-define-map": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz", - "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", + "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.0", + "@babel/types": "^7.4.4", "lodash": "^4.17.11" } }, @@ -139,11 +139,11 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", - "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", "requires": { - "@babel/types": "^7.4.0" + "@babel/types": "^7.4.4" } }, "@babel/helper-member-expression-to-functions": { @@ -163,15 +163,15 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.3.tgz", - "integrity": "sha512-H88T9IySZW25anu5uqyaC1DaQre7ofM+joZtAaO2F8NBdFfupH0SZ4gKjgSFVcvtx/aAirqA9L9Clio2heYbZA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", + "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.2.2", - "@babel/types": "^7.2.2", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.4.4", "lodash": "^4.17.11" } }, @@ -189,9 +189,9 @@ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, "@babel/helper-regex": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.3.tgz", - "integrity": "sha512-hnoq5u96pLCfgjXuj8ZLX3QQ+6nAulS+zSgi6HulUwFbEruRAKwbGLU5OvXkE14L8XW6XsQEKsIDfgthKLRAyA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", + "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", "requires": { "lodash": "^4.17.11" } @@ -209,14 +209,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", - "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", + "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", "requires": { "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0" + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/helper-simple-access": { @@ -229,11 +229,11 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", - "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "requires": { - "@babel/types": "^7.4.0" + "@babel/types": "^7.4.4" } }, "@babel/helper-wrap-function": { @@ -248,13 +248,13 @@ } }, "@babel/helpers": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.3.tgz", - "integrity": "sha512-BMh7X0oZqb36CfyhvtbSmcWc3GXocfxv3yNsAEuM0l+fAqSO22rQrUpijr3oE/10jCTrB6/0b9kzmG4VetCj8Q==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", "requires": { - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0" + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/highlight": { @@ -268,9 +268,9 @@ } }, "@babel/parser": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.3.tgz", - "integrity": "sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ==" + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -311,9 +311,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz", - "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", + "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -329,12 +329,12 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz", - "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", + "@babel/helper-regex": "^7.4.4", "regexpu-core": "^4.5.4" } }, @@ -419,9 +419,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz", - "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", + "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -437,26 +437,26 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz", - "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", + "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "lodash": "^4.17.11" } }, "@babel/plugin-transform-classes": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz", - "integrity": "sha512-PUaIKyFUDtG6jF5DUJOfkBdwAS/kFFV3XFk7Nn0a6vR7ZT8jYw5cGtIlat77wcnd0C6ViGqo/wyNf4ZHytF/nQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", + "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.0", + "@babel/helper-define-map": "^7.4.4", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0", + "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" } }, @@ -469,20 +469,20 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz", - "integrity": "sha512-rVTLLZpydDFDyN4qnXdzwoVpk1oaXHIvPEOkOLyr88o7oHxVc/LyrnDx+amuBWGOwUb7D1s/uLsKBNTx08htZg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", + "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.3.tgz", - "integrity": "sha512-9Arc2I0AGynzXRR/oPdSALv3k0rM38IMFyto7kOCwb5F9sLUt2Ykdo3V9yUPR+Bgr4kb6bVEyLkPEiBhzcTeoA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.3", + "@babel/helper-regex": "^7.4.4", "regexpu-core": "^4.5.4" } }, @@ -513,17 +513,17 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.3.tgz", - "integrity": "sha512-UselcZPwVWNSURnqcfpnxtMehrb8wjXYOimlYQPBnup/Zld426YzIhNEvuRsEWVHfESIECGrxoI6L5QqzuLH5Q==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.3.tgz", - "integrity": "sha512-uT5J/3qI/8vACBR9I1GlAuU/JqBtWdfCrynuOkrWG6nCDieZd5przB1vfP59FRHBZQ9DC2IUfqr/xKqzOD5x0A==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", "requires": { "@babel/helper-function-name": "^7.1.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -555,21 +555,21 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.3.tgz", - "integrity": "sha512-sMP4JqOTbMJMimqsSZwYWsMjppD+KRyDIUVW91pd7td0dZKAvPmhCaxhOzkzLParKwgQc7bdL9UNv+rpJB0HfA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", + "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", "requires": { - "@babel/helper-module-transforms": "^7.4.3", + "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-simple-access": "^7.1.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz", - "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", + "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", "requires": { - "@babel/helper-hoist-variables": "^7.4.0", + "@babel/helper-hoist-variables": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0" } }, @@ -583,17 +583,17 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz", - "integrity": "sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", + "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", "requires": { - "regexp-tree": "^0.1.0" + "regexp-tree": "^0.1.6" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz", - "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -608,11 +608,11 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.3.tgz", - "integrity": "sha512-ULJYC2Vnw96/zdotCZkMGr2QVfKpIT/4/K+xWWY0MbOJyMZuk660BGkr3bEKWQrrciwz6xpmft39nA4BF7hJuA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", "requires": { - "@babel/helper-call-delegate": "^7.4.0", + "@babel/helper-call-delegate": "^7.4.4", "@babel/helper-get-function-arity": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" } @@ -671,11 +671,11 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.3.tgz", - "integrity": "sha512-kEzotPuOpv6/iSlHroCDydPkKYw7tiJGKlmYp6iJn4a6C/+b2FdttlJsLKYxolYHgotTJ5G5UY5h0qey5ka3+A==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", "requires": { - "regenerator-transform": "^0.13.4" + "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { @@ -730,9 +730,9 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -747,74 +747,95 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz", - "integrity": "sha512-U7/+zKnRZg04ggM/Bm+xmu2B/PrwyDQTT/V89FXWYWNMxBDwSx56u6jtk9SEbfLFbZaEI72L+5LPvQjeZgFCrQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz", + "integrity": "sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.3.tgz", - "integrity": "sha512-lnSNgkVjL8EMtnE8eSS7t2ku8qvKH3eqNf/IwIfnSPUqzgqYmRwzdsQWv4mNQAN9Nuo6Gz1Y0a4CSmdpu1Pp6g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.3", + "@babel/helper-regex": "^7.4.4", "regexpu-core": "^4.5.4" } }, + "@babel/polyfill": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", + "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + }, + "dependencies": { + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + } + } + }, "@babel/preset-env": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.3.tgz", - "integrity": "sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", + "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.3", + "@babel/plugin-proposal-object-rest-spread": "^7.4.4", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.0", + "@babel/plugin-transform-async-to-generator": "^7.4.4", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.0", - "@babel/plugin-transform-classes": "^7.4.3", + "@babel/plugin-transform-block-scoping": "^7.4.4", + "@babel/plugin-transform-classes": "^7.4.4", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.3", - "@babel/plugin-transform-dotall-regex": "^7.4.3", + "@babel/plugin-transform-destructuring": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/plugin-transform-duplicate-keys": "^7.2.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.3", - "@babel/plugin-transform-function-name": "^7.4.3", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-member-expression-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.3", - "@babel/plugin-transform-modules-systemjs": "^7.4.0", + "@babel/plugin-transform-modules-commonjs": "^7.4.4", + "@babel/plugin-transform-modules-systemjs": "^7.4.4", "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", - "@babel/plugin-transform-new-target": "^7.4.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.3", + "@babel/plugin-transform-parameters": "^7.4.4", "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.3", + "@babel/plugin-transform-regenerator": "^7.4.5", "@babel/plugin-transform-reserved-words": "^7.2.0", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.3", - "@babel/types": "^7.4.0", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" @@ -864,35 +885,35 @@ } }, "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/traverse": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.3.tgz", - "integrity": "sha512-HmA01qrtaCwwJWpSKpA948cBvU5BrmviAief/b3AVw936DtcdsTexlbyzNuDnthwhOQ37xshn7hvQaEQk7ISYQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", + "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", + "@babel/generator": "^7.4.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/types": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/types": "^7.4.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" } }, "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "requires": { "esutils": "^2.0.2", "lodash": "^4.17.11", @@ -918,6 +939,34 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-9.0.1.tgz", "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" }, + "@hapi/address": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", + "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==" + }, + "@hapi/hoek": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", + "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==" + }, + "@hapi/joi": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.0.3.tgz", + "integrity": "sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/hoek": "6.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.0.tgz", + "integrity": "sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww==", + "requires": { + "@hapi/hoek": "6.x.x" + } + }, "@jest/console": { "version": "24.7.1", "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", @@ -929,31 +978,31 @@ } }, "@jest/core": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.7.1.tgz", - "integrity": "sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", + "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.7.1", - "@jest/test-result": "^24.7.1", - "@jest/transform": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/reporters": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.7.0", - "jest-config": "^24.7.1", - "jest-haste-map": "^24.7.1", - "jest-message-util": "^24.7.1", + "jest-changed-files": "^24.8.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.7.1", - "jest-runner": "^24.7.1", - "jest-runtime": "^24.7.1", - "jest-snapshot": "^24.7.1", - "jest-util": "^24.7.1", - "jest-validate": "^24.7.0", - "jest-watcher": "^24.7.1", + "jest-resolve-dependencies": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "jest-watcher": "^24.8.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", "pirates": "^4.0.1", @@ -978,46 +1027,47 @@ } }, "@jest/environment": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.7.1.tgz", - "integrity": "sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", + "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", "requires": { - "@jest/fake-timers": "^24.7.1", - "@jest/transform": "^24.7.1", - "@jest/types": "^24.7.0", - "jest-mock": "^24.7.0" + "@jest/fake-timers": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0" } }, "@jest/fake-timers": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.7.1.tgz", - "integrity": "sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", + "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", "requires": { - "@jest/types": "^24.7.0", - "jest-message-util": "^24.7.1", - "jest-mock": "^24.7.0" + "@jest/types": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0" } }, "@jest/reporters": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.7.1.tgz", - "integrity": "sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw==", - "requires": { - "@jest/environment": "^24.7.1", - "@jest/test-result": "^24.7.1", - "@jest/transform": "^24.7.1", - "@jest/types": "^24.7.0", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", + "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "requires": { + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", - "istanbul-api": "^2.1.1", "istanbul-lib-coverage": "^2.0.2", "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "jest-haste-map": "^24.7.1", - "jest-resolve": "^24.7.1", - "jest-runtime": "^24.7.1", - "jest-util": "^24.7.1", + "istanbul-reports": "^2.1.1", + "jest-haste-map": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", "jest-worker": "^24.6.0", "node-notifier": "^5.2.1", "slash": "^2.0.0", @@ -1025,6 +1075,18 @@ "string-length": "^2.0.0" }, "dependencies": { + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1055,41 +1117,41 @@ } }, "@jest/test-result": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.7.1.tgz", - "integrity": "sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", + "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", "requires": { "@jest/console": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz", - "integrity": "sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", + "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", "requires": { - "@jest/test-result": "^24.7.1", - "jest-haste-map": "^24.7.1", - "jest-runner": "^24.7.1", - "jest-runtime": "^24.7.1" + "@jest/test-result": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0" } }, "@jest/transform": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.7.1.tgz", - "integrity": "sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", + "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.7.1", + "jest-haste-map": "^24.8.0", "jest-regex-util": "^24.3.0", - "jest-util": "^24.7.1", + "jest-util": "^24.8.0", "micromatch": "^3.1.10", "realpath-native": "^1.1.0", "slash": "^2.0.0", @@ -1105,11 +1167,12 @@ } }, "@jest/types": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.7.0.tgz", - "integrity": "sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", + "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", "@types/yargs": "^12.0.9" } }, @@ -1236,9 +1299,9 @@ "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.2.0.tgz", - "integrity": "sha512-gH2qItapwCUp6CCqbxvzBbc4dh4OyxdYKsW3EOkYexr0XUmQL0ScbdNh6DexkZ01T+sdClniIbnCObsXcnx3sQ==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.0.tgz", + "integrity": "sha512-3eI17Pb3jlg3oqV4Tie069n1SelYKBUpI90txDcnBWk4EGFW+YQGyQjy6iuJAReH0RnpUJ9jUExrt/xniGvhqw==" }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "4.2.0", @@ -1256,26 +1319,26 @@ "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" }, "@svgr/babel-preset": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.2.0.tgz", - "integrity": "sha512-iLetHpRCQXfK47voAs5/uxd736cCyocEdorisjAveZo8ShxJ/ivSZgstBmucI1c8HyMF5tOrilJLoFbhpkPiKw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.0.tgz", + "integrity": "sha512-Lgy1RJiZumGtv6yJroOxzFuL64kG/eIcivJQ7y9ljVWL+0QXvFz4ix1xMrmjMD+rpJWwj50ayCIcFelevG/XXg==", "requires": { "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.2.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.0", "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", "@svgr/babel-plugin-transform-svg-component": "^4.2.0" } }, "@svgr/core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.2.0.tgz", - "integrity": "sha512-nvzXaf2VavqjMCTTfsZfjL4o9035KedALkMzk82qOlHOwBb8JT+9+zYDgBl0oOunbVF94WTLnvGunEg0csNP3Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.0.tgz", + "integrity": "sha512-Ycu1qrF5opBgKXI0eQg3ROzupalCZnSDETKCK/3MKN4/9IEmt3jPX/bbBjftklnRW+qqsCEpO0y/X9BTRw2WBg==", "requires": { - "@svgr/plugin-jsx": "^4.2.0", + "@svgr/plugin-jsx": "^4.3.0", "camelcase": "^5.3.1", "cosmiconfig": "^5.2.0" } @@ -1289,12 +1352,12 @@ } }, "@svgr/plugin-jsx": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.2.0.tgz", - "integrity": "sha512-AM1YokmZITgveY9bulLVquqNmwiFo2Px2HL+IlnTCR01YvWDfRL5QKdnF7VjRaS5MNP938mmqvL0/8oz3zQMkg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.0.tgz", + "integrity": "sha512-0ab8zJdSOTqPfjZtl89cjq2IOmXXUYV3Fs7grLT9ur1Al3+x3DSp2+/obrYKUGbQUnLq96RMjSZ7Icd+13vwlQ==", "requires": { "@babel/core": "^7.4.3", - "@svgr/babel-preset": "^4.2.0", + "@svgr/babel-preset": "^4.3.0", "@svgr/hast-util-to-babel-ast": "^4.2.0", "rehype-parse": "^6.0.0", "unified": "^7.1.0", @@ -1327,9 +1390,9 @@ } }, "@types/babel__core": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz", - "integrity": "sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -1364,14 +1427,31 @@ } }, "@types/istanbul-lib-coverage": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz", - "integrity": "sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } }, "@types/node": { - "version": "11.13.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.7.tgz", - "integrity": "sha512-suFHr6hcA9mp8vFrZTgrmqW2ZU3mbWsryQtQlY/QvwTISCw7nw/j+bCQPPohqmskhmqa5wLNuMHTTsc+xf1MQg==" + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.4.tgz", + "integrity": "sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw==" }, "@types/q": { "version": "1.5.2", @@ -1623,12 +1703,12 @@ "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==" }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { @@ -1728,14 +1808,6 @@ "normalize-path": "^2.1.1" } }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "requires": { - "default-require-extensions": "^2.0.0" - } - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -1854,10 +1926,11 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -1897,12 +1970,9 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "async-each": { "version": "1.0.3", @@ -2040,12 +2110,12 @@ } }, "babel-jest": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.7.1.tgz", - "integrity": "sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", + "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", "requires": { - "@jest/transform": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", "babel-preset-jest": "^24.6.0", @@ -2073,13 +2143,13 @@ } }, "babel-plugin-istanbul": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.2.tgz", - "integrity": "sha512-U3ZVajC+Z69Gim7ZzmD4Wcsq76i/1hqDamBfowc1tWzWjybRy70iWfngP2ME+1CrgcgZ/+muIbPY/Yi0dxdIkQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", + "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", "requires": { "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.2.0", - "test-exclude": "^5.2.2" + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" } }, "babel-plugin-jest-hoist": { @@ -2101,17 +2171,12 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", + "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", "requires": { "regenerator-runtime": "^0.13.2" } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, @@ -2149,9 +2214,9 @@ } }, "babel-preset-react-app": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-8.0.0.tgz", - "integrity": "sha512-6Dmj7e8l7eWE+R6sKKLRrGEQXMfcBqBYlphaAgT1ml8qT1NEP+CyTZyfjmgKGqHZfwH3RQCUOuP6y4mpGc7tgg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.0.tgz", + "integrity": "sha512-YVsDA8HpAKklhFLJtl9+AgaxrDaor8gGvDFlsg1ByOS0IPGUovumdv4/gJiAnLcDmZmKlH6+9sVOz4NVW7emAg==", "requires": { "@babel/core": "7.4.3", "@babel/plugin-proposal-class-properties": "7.4.0", @@ -2173,6 +2238,93 @@ "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz", + "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz", + "integrity": "sha512-PUaIKyFUDtG6jF5DUJOfkBdwAS/kFFV3XFk7Nn0a6vR7ZT8jYw5cGtIlat77wcnd0C6ViGqo/wyNf4ZHytF/nQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.4.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz", + "integrity": "sha512-rVTLLZpydDFDyN4qnXdzwoVpk1oaXHIvPEOkOLyr88o7oHxVc/LyrnDx+amuBWGOwUb7D1s/uLsKBNTx08htZg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/preset-env": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.3.tgz", + "integrity": "sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.4.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.4.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.4.0", + "@babel/plugin-transform-classes": "^7.4.3", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.4.3", + "@babel/plugin-transform-dotall-regex": "^7.4.3", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.3", + "@babel/plugin-transform-function-name": "^7.4.3", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.4.3", + "@babel/plugin-transform-modules-systemjs": "^7.4.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", + "@babel/plugin-transform-new-target": "^7.4.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.4.3", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.3", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.3", + "@babel/types": "^7.4.0", + "browserslist": "^4.5.2", + "core-js-compat": "^3.0.0", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, "@babel/runtime": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", @@ -2181,10 +2333,10 @@ "regenerator-runtime": "^0.13.2" } }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -2195,6 +2347,18 @@ "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } } }, "babylon": { @@ -2203,9 +2367,9 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", + "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==" }, "balanced-match": { "version": "1.0.0", @@ -2296,9 +2460,9 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" }, "bn.js": { "version": "4.11.8", @@ -2306,22 +2470,27 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2330,18 +2499,15 @@ "ms": "2.0.0" } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, @@ -2495,13 +2661,13 @@ } }, "browserslist": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.5.tgz", - "integrity": "sha512-0QFO1r/2c792Ohkit5XI8Cm8pDtZxgNl2H6HU4mHrpYz7314pEYcsAVVatM0l/YmxPnEzh9VygXouj4gkFUTKA==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.1.tgz", + "integrity": "sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ==", "requires": { - "caniuse-lite": "^1.0.30000960", - "electron-to-chromium": "^1.3.124", - "node-releases": "^1.1.14" + "caniuse-lite": "^1.0.30000971", + "electron-to-chromium": "^1.3.137", + "node-releases": "^1.1.21" } }, "bser": { @@ -2649,9 +2815,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000962", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000962.tgz", - "integrity": "sha512-WXYsW38HK+6eaj5IZR16Rn91TGhU3OhbwjKZvJ4HN/XBIABLKfbij9Mnd3pM0VEwZSlltWjoWg3I8FQ0DGgNOA==" + "version": "1.0.30000971", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", + "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==" }, "capture-exit": { "version": "2.0.0", @@ -2672,9 +2838,9 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", + "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==" }, "chalk": { "version": "2.4.2", @@ -2692,9 +2858,9 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -2711,9 +2877,9 @@ }, "dependencies": { "fsevents": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", - "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "optional": true, "requires": { "nan": "^2.12.1", @@ -3204,9 +3370,9 @@ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" }, "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "requires": { "tslib": "^1.9.0" } @@ -3331,9 +3497,9 @@ } }, "color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", - "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", + "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", "requires": { "color-convert": "^1.9.1", "color-string": "^1.5.2" @@ -3362,17 +3528,17 @@ } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, "comma-separated-tokens": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.6.tgz", - "integrity": "sha512-f20oA7jsrrmERTS70r3tmRSxR8IJV2MTN7qe6hzgX+3ARfXrdMJFvGWvWQK0xpcBurg9j9eO2MiqzZ8Y+/UPCA==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz", + "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==" }, "commander": { "version": "2.19.0", @@ -3389,22 +3555,17 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "compare-versions": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", - "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==" - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "requires": { - "mime-db": ">= 1.38.0 < 2" + "mime-db": ">= 1.40.0 < 2" } }, "compression": { @@ -3486,9 +3647,12 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -3504,9 +3668,9 @@ } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-signature": { "version": "1.0.6", @@ -3540,32 +3704,31 @@ } }, "core-js": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", - "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", + "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" }, "core-js-compat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", - "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.3.tgz", + "integrity": "sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==", "requires": { - "browserslist": "^4.5.4", - "core-js": "3.0.1", - "core-js-pure": "3.0.1", - "semver": "^6.0.0" + "browserslist": "^4.6.0", + "core-js-pure": "3.1.3", + "semver": "^6.1.0" }, "dependencies": { - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" + "semver": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" } } }, "core-js-pure": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", - "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.3.tgz", + "integrity": "sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==" }, "core-util-is": { "version": "1.0.2", @@ -3573,13 +3736,13 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", - "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.13.0", + "js-yaml": "^3.13.1", "parse-json": "^4.0.0" } }, @@ -4183,9 +4346,9 @@ } }, "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==" }, "dashdash": { "version": "1.14.1", @@ -4259,14 +4422,6 @@ "ip-regex": "^2.1.0" } }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "requires": { - "strip-bom": "^3.0.0" - } - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4460,12 +4615,6 @@ "buffer-indexof": "^1.0.0" } }, - "docopt": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", - "dev": true - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4592,9 +4741,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.125", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz", - "integrity": "sha512-XxowpqQxJ4nDwUXHtVtmEhRqBpm2OnjBomZmZtHD0d2Eo0244+Ojezhk3sD/MBSSe2nxCdGQFRXHIsf/LUTL9A==" + "version": "1.3.143", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.143.tgz", + "integrity": "sha512-J9jOpxIljQZlV6GIP2fwAWq0T69syawU0sH3EW3O2Bgxquiy+veeIT5mBDRz+i3oHUSL1tvVgRKH3/4QiQh9Pg==" }, "elliptic": { "version": "6.4.1", @@ -4795,18 +4944,18 @@ } }, "eslint-config-prettier": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz", - "integrity": "sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz", + "integrity": "sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA==", "dev": true, "requires": { "get-stdin": "^6.0.0" } }, "eslint-config-react-app": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-4.0.0.tgz", - "integrity": "sha512-SeFxaI+0NAzWPFAI9AT+Vp9Xe2u5RCnn0JVEXkE338HgoPujc38Bc0upCJw4BWmavvIN/ODmE6EuzHoAEn3ozw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-4.0.1.tgz", + "integrity": "sha512-ZsaoXUIGsK8FCi/x4lT2bZR5mMkL/Kgj+Lnw690rbvvUr/uiwgFiD8FcfAhkCycm7Xte6O5lYz4EqMx2vX7jgw==", "requires": { "confusing-browser-globals": "^1.0.7" } @@ -5076,9 +5225,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", - "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", + "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -5179,9 +5328,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, "events": { "version": "3.0.0", @@ -5275,51 +5424,51 @@ } }, "expect": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.7.1.tgz", - "integrity": "sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", + "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.3.0", - "jest-matcher-utils": "^24.7.0", - "jest-message-util": "^24.7.1", + "jest-get-type": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", "jest-regex-util": "^24.3.0" } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, @@ -5346,6 +5495,11 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, @@ -5464,9 +5618,9 @@ "dev": true }, "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", "@nodelib/fs.stat": "^1.1.2", @@ -5553,15 +5707,6 @@ "schema-utils": "^1.0.0" } }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" - } - }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -5589,16 +5734,16 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "dependencies": { @@ -5706,9 +5851,9 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-ts-checker-webpack-plugin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.0.1.tgz", - "integrity": "sha512-RrVxSiNtngsFDLQpP2QlrVaJK1zqRdwhtwslmDUWQTg3t3GW8QN7D3EpW/EAI+oqTqL0dGvLyluyYQ/eIrIHvQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-gqWAEMLlae/oeVnN6RWCAhesOJMswAN1MaKNqhhjXHV5O0/rTUjWI4UbgQHdlrVbCnb+xLotXmJbBlC66QmpFw==", "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", @@ -5716,7 +5861,8 @@ "micromatch": "^3.1.10", "minimatch": "^3.0.4", "semver": "^5.6.0", - "tapable": "^1.0.0" + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" }, "dependencies": { "semver": { @@ -5910,9 +6056,9 @@ } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { "version": "8.0.2", @@ -6092,9 +6238,9 @@ } }, "hast-util-from-parse5": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.0.tgz", - "integrity": "sha512-A7ev5OseS/J15214cvDdcI62uwovJO2PB60Xhnq7kaxvvQRFDEccuqbkrFXU03GPBGopdPqlpQBRqIcDS/Fjbg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.1.tgz", + "integrity": "sha512-UfPzdl6fbxGAxqGYNThRUhRlDYY7sXu6XU9nQeX4fFZtV+IHbyEJtd+DUuwOqNV4z3K05E/1rIkoVr/JHmeWWA==", "requires": { "ccount": "^1.0.3", "hastscript": "^5.0.0", @@ -6104,14 +6250,14 @@ } }, "hast-util-parse-selector": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz", - "integrity": "sha512-Xyh0v+nHmQvrOqop2Jqd8gOdyQtE8sIP9IQf7mlVDqp924W4w/8Liuguk2L2qei9hARnQSG2m+wAOCxM7npJVw==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz", + "integrity": "sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw==" }, "hastscript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.0.0.tgz", - "integrity": "sha512-xJtuJ8D42Xtq5yJrnDg/KAIxl2cXBXKoiIJwmWX9XMf8113qHTGl/Bf7jEsxmENJ4w6q4Tfl8s/Y6mEZo8x8qw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.0.tgz", + "integrity": "sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ==", "requires": { "comma-separated-tokens": "^1.0.0", "hast-util-parse-selector": "^2.2.0", @@ -6152,11 +6298,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -6249,9 +6390,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6266,14 +6407,15 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, "http-parser-js": { @@ -6331,9 +6473,9 @@ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" }, "icss-utils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.0.tgz", - "integrity": "sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "requires": { "postcss": "^7.0.14" } @@ -6742,14 +6884,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "requires": { - "punycode": "2.x.x" - } - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6774,61 +6908,33 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "istanbul-api": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.5.tgz", - "integrity": "sha512-meYk1BwDp59Pfse1TvPrkKYgVqAufbdBLEVoqvu/hLLKSaQ054ZTksbNepyc223tMnWdm6AdK2URIJJRqdP87g==", - "requires": { - "async": "^2.6.1", - "compare-versions": "^3.2.1", - "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.4", - "istanbul-lib-hook": "^2.0.6", - "istanbul-lib-instrument": "^3.2.0", - "istanbul-lib-report": "^2.0.7", - "istanbul-lib-source-maps": "^3.0.5", - "istanbul-reports": "^2.2.3", - "js-yaml": "^3.13.0", - "make-dir": "^2.1.0", - "minimatch": "^3.0.4", - "once": "^1.4.0" - } - }, "istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-LXTBICkMARVgo579kWDm8SqfB6nvSDKNqIOBEjmJRnL04JvoMHCYGWaMddQnseJYtkEuEvO/sIcOxPLk9gERug==" - }, - "istanbul-lib-hook": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.6.tgz", - "integrity": "sha512-829DKONApZ7UCiPXcOYWSgkFXa4+vNYoNOt3F+4uDJLKL1OotAoVwvThoEj1i8jmOj7odbYcR3rnaHu+QroaXg==", - "requires": { - "append-transform": "^1.0.0" - } + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" }, "istanbul-lib-instrument": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.2.0.tgz", - "integrity": "sha512-06IM3xShbNW4NgZv5AP4QH0oHqf1/ivFo8eFys0ZjPXHGldHJQWb3riYOKXqmOqfxXBfxu4B+g/iuhOPZH0RJg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.4", + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" } }, "istanbul-lib-report": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.7.tgz", - "integrity": "sha512-wLH6beJBFbRBLiTlMOBxmb85cnVM1Vyl36N48e4e/aTKSM3WbOx7zbVIH1SQ537fhhsPbX0/C5JB4qsmyRXXyA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "requires": { - "istanbul-lib-coverage": "^2.0.4", + "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", - "supports-color": "^6.0.0" + "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { @@ -6842,14 +6948,14 @@ } }, "istanbul-lib-source-maps": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.5.tgz", - "integrity": "sha512-eDhZ7r6r1d1zQPVZehLc3D0K14vRba/eBYkz3rw16DLOrrTzve9RmnkcwrrkWVgO1FL3EK5knujVe5S8QHE9xw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "requires": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.4", + "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { @@ -6861,11 +6967,11 @@ } }, "istanbul-reports": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.3.tgz", - "integrity": "sha512-T6EbPuc8Cb620LWAYyZ4D8SSn06dY9i1+IgUX2lTH8gbwflMc9Obd33zHTyNX653ybjpamAHS9toKS3E6cGhTw==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "requires": { - "handlebars": "^4.1.0" + "handlebars": "^4.1.2" } }, "jest": { @@ -6878,20 +6984,20 @@ }, "dependencies": { "jest-cli": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.7.1.tgz", - "integrity": "sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", + "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", "requires": { - "@jest/core": "^24.7.1", - "@jest/test-result": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/core": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.7.1", - "jest-util": "^24.7.1", - "jest-validate": "^24.7.0", + "jest-config": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", "yargs": "^12.0.2" @@ -6900,48 +7006,62 @@ } }, "jest-changed-files": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.7.0.tgz", - "integrity": "sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", + "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.7.1.tgz", - "integrity": "sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", + "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.7.1", - "@jest/types": "^24.7.0", - "babel-jest": "^24.7.1", + "@jest/test-sequencer": "^24.8.0", + "@jest/types": "^24.8.0", + "babel-jest": "^24.8.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.7.1", - "jest-environment-node": "^24.7.1", - "jest-get-type": "^24.3.0", - "jest-jasmine2": "^24.7.1", + "jest-environment-jsdom": "^24.8.0", + "jest-environment-node": "^24.8.0", + "jest-get-type": "^24.8.0", + "jest-jasmine2": "^24.8.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.7.1", - "jest-util": "^24.7.1", - "jest-validate": "^24.7.0", + "jest-resolve": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", "micromatch": "^3.1.10", - "pretty-format": "^24.7.0", + "pretty-format": "^24.8.0", "realpath-native": "^1.1.0" + }, + "dependencies": { + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + } } }, "jest-diff": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.7.0.tgz", - "integrity": "sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", + "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", "requires": { "chalk": "^2.0.1", "diff-sequences": "^24.3.0", - "jest-get-type": "^24.3.0", - "pretty-format": "^24.7.0" + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" } }, "jest-docblock": { @@ -6953,27 +7073,27 @@ } }, "jest-each": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.7.1.tgz", - "integrity": "sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", + "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", - "jest-get-type": "^24.3.0", - "jest-util": "^24.7.1", - "pretty-format": "^24.7.0" + "jest-get-type": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0" } }, "jest-environment-jsdom": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz", - "integrity": "sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg==", - "requires": { - "@jest/environment": "^24.7.1", - "@jest/fake-timers": "^24.7.1", - "@jest/types": "^24.7.0", - "jest-mock": "^24.7.0", - "jest-util": "^24.7.1", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", + "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "requires": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0", "jsdom": "^11.5.1" } }, @@ -7041,35 +7161,35 @@ } }, "jest-environment-node": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.7.1.tgz", - "integrity": "sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", + "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", "requires": { - "@jest/environment": "^24.7.1", - "@jest/fake-timers": "^24.7.1", - "@jest/types": "^24.7.0", - "jest-mock": "^24.7.0", - "jest-util": "^24.7.1" + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0" } }, "jest-get-type": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.3.0.tgz", - "integrity": "sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==" + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", + "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==" }, "jest-haste-map": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.7.1.tgz", - "integrity": "sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", + "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", "jest-serializer": "^24.4.0", - "jest-util": "^24.7.1", + "jest-util": "^24.8.0", "jest-worker": "^24.6.0", "micromatch": "^3.1.10", "sane": "^4.0.3", @@ -7077,9 +7197,9 @@ }, "dependencies": { "fsevents": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", - "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "optional": true, "requires": { "nan": "^2.12.1", @@ -7560,55 +7680,55 @@ } }, "jest-jasmine2": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz", - "integrity": "sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", + "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.7.1", - "@jest/test-result": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.7.1", + "expect": "^24.8.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.7.1", - "jest-matcher-utils": "^24.7.0", - "jest-message-util": "^24.7.1", - "jest-runtime": "^24.7.1", - "jest-snapshot": "^24.7.1", - "jest-util": "^24.7.1", - "pretty-format": "^24.7.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", "throat": "^4.0.0" } }, "jest-leak-detector": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz", - "integrity": "sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", + "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", "requires": { - "pretty-format": "^24.7.0" + "pretty-format": "^24.8.0" } }, "jest-matcher-utils": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz", - "integrity": "sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", + "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.7.0", - "jest-get-type": "^24.3.0", - "pretty-format": "^24.7.0" + "jest-diff": "^24.8.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" } }, "jest-message-util": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.7.1.tgz", - "integrity": "sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", + "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -7617,11 +7737,11 @@ } }, "jest-mock": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.7.0.tgz", - "integrity": "sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", + "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", "requires": { - "@jest/types": "^24.7.0" + "@jest/types": "^24.8.0" } }, "jest-pnp-resolver": { @@ -7647,69 +7767,97 @@ } }, "jest-resolve-dependencies": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz", - "integrity": "sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", + "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.7.1" + "jest-snapshot": "^24.8.0" } }, "jest-runner": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.7.1.tgz", - "integrity": "sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", + "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.7.1", - "@jest/test-result": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.7.1", + "jest-config": "^24.8.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.7.1", - "jest-jasmine2": "^24.7.1", - "jest-leak-detector": "^24.7.0", - "jest-message-util": "^24.7.1", - "jest-resolve": "^24.7.1", - "jest-runtime": "^24.7.1", - "jest-util": "^24.7.1", + "jest-haste-map": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-leak-detector": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" + }, + "dependencies": { + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + } } }, "jest-runtime": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.7.1.tgz", - "integrity": "sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", + "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.7.1", + "@jest/environment": "^24.8.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", "@types/yargs": "^12.0.2", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.7.1", - "jest-haste-map": "^24.7.1", - "jest-message-util": "^24.7.1", - "jest-mock": "^24.7.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.7.1", - "jest-snapshot": "^24.7.1", - "jest-util": "^24.7.1", - "jest-validate": "^24.7.0", + "jest-resolve": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", "yargs": "^12.0.2" + }, + "dependencies": { + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + } } }, "jest-serializer": { @@ -7718,24 +7866,36 @@ "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==" }, "jest-snapshot": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.7.1.tgz", - "integrity": "sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", + "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", - "expect": "^24.7.1", - "jest-diff": "^24.7.0", - "jest-matcher-utils": "^24.7.0", - "jest-message-util": "^24.7.1", - "jest-resolve": "^24.7.1", + "expect": "^24.8.0", + "jest-diff": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.7.0", + "pretty-format": "^24.8.0", "semver": "^5.5.0" }, "dependencies": { + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", @@ -7744,15 +7904,15 @@ } }, "jest-util": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.7.1.tgz", - "integrity": "sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", + "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", "requires": { "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.7.1", + "@jest/fake-timers": "^24.8.0", "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -7775,16 +7935,16 @@ } }, "jest-validate": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.7.0.tgz", - "integrity": "sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", + "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "camelcase": "^5.0.0", "chalk": "^2.0.1", - "jest-get-type": "^24.3.0", + "jest-get-type": "^24.8.0", "leven": "^2.1.0", - "pretty-format": "^24.7.0" + "pretty-format": "^24.8.0" } }, "jest-watch-typeahead": { @@ -7816,16 +7976,16 @@ } }, "jest-watcher": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.7.1.tgz", - "integrity": "sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", + "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", "requires": { - "@jest/test-result": "^24.7.1", - "@jest/types": "^24.7.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "@types/yargs": "^12.0.9", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.7.1", + "jest-util": "^24.8.0", "string-length": "^2.0.0" } }, @@ -7848,16 +8008,6 @@ } } }, - "joi": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", - "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", - "requires": { - "hoek": "6.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - } - }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -7966,9 +8116,9 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" }, "json5": { "version": "2.1.0", @@ -8235,9 +8385,9 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=" + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.2.tgz", + "integrity": "sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg==" }, "loose-envify": { "version": "1.4.0", @@ -8340,9 +8490,9 @@ } }, "mdi-react": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.3.0.tgz", - "integrity": "sha512-Yf/aZplXLcl+aYlilfcBnCPRBueJMNOl7NxM+layFMRmCOWzxdER8ZsP2GZL7Vjc8U05Anh/mxoVaL0BS6/yCg==" + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.4.0.tgz", + "integrity": "sha512-Y4eUHbbEiiQC8og6ofMM7ukUIiD+NnIQRpJHj2aVzle918aUCJh4Du9sjXw+yJ+wi8Nh7TdNvFptJD3WIdlbNw==" }, "mdn-data": { "version": "1.1.4", @@ -8418,6 +8568,11 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -8455,9 +8610,9 @@ } }, "mime": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", - "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==" }, "mime-db": { "version": "1.40.0", @@ -8620,9 +8775,9 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "optional": true }, "nanomatch": { @@ -8656,14 +8811,14 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, "nice-try": { "version": "1.0.5", @@ -8759,9 +8914,9 @@ } }, "node-releases": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.15.tgz", - "integrity": "sha512-cKV097BQaZr8LTSRUa2+oc/aX5L8UkZtPQrMSTgiJEeaW7ymTDCoRaGCoaTqk0lqnalcoSHu4wjSl0Cmj2+bMw==", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.22.tgz", + "integrity": "sha512-O6XpteBuntW1j86mw6LlovBIwTe+sO2+7vi9avQffNeIW4upgnaCVm6xrBWH+KATz7mNNRNNeEpuWB7dT6Cr3w==", "requires": { "semver": "^5.3.0" }, @@ -8836,9 +8991,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz", - "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==" }, "oauth-sign": { "version": "0.9.0", @@ -8972,6 +9127,15 @@ "mimic-fn": "^1.0.0" } }, + "open": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", + "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "opn": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", @@ -9353,11 +9517,6 @@ "mkdirp": "0.5.x" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9379,9 +9538,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", + "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10228,9 +10387,9 @@ } }, "pretty-bytes": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", - "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.2.0.tgz", + "integrity": "sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w==" }, "pretty-error": { "version": "2.1.1", @@ -10242,11 +10401,11 @@ } }, "pretty-format": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", - "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", + "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" @@ -10293,9 +10452,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", - "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", + "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", "requires": { "kleur": "^3.0.2", "sisteransi": "^1.0.0" @@ -10312,9 +10471,9 @@ } }, "property-information": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.0.1.tgz", - "integrity": "sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.1.0.tgz", + "integrity": "sha512-tODH6R3+SwTkAQckSp2S9xyYX8dEKYkeXw+4TmJzTxnNzd6mQPu1OD4f9zPrvw/Rm4wpPgI+Zp63mNSGNzUgHg==", "requires": { "xtend": "^4.0.1" } @@ -10334,9 +10493,9 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", + "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==" }, "public-encrypt": { "version": "4.0.3", @@ -10437,28 +10596,25 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" } } }, @@ -10474,21 +10630,22 @@ } }, "react-ace": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-6.5.0.tgz", - "integrity": "sha512-W8iA6669Tf3sfjCsBg8gKs2pUVMy6BroX6O6GZcgadnLN+MTq7jhs6Q2Rsjq3E3SrWjyA9vZgs1Uzjy8XgWX5w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-7.0.1.tgz", + "integrity": "sha512-79SNgh05mbJDVJcSrhWHMdkU1ChZbq1aw8liEcDwAfOS4+m+RS4++G+ZGZ0AV+EPApqCwLUTA86m49lLeF+niQ==", "requires": { + "@babel/polyfill": "^7.4.4", "brace": "^0.11.1", "diff-match-patch": "^1.0.4", "lodash.get": "^4.4.2", "lodash.isequal": "^4.5.0", - "prop-types": "^15.6.2" + "prop-types": "^15.7.2" } }, "react-app-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.0.tgz", - "integrity": "sha512-fbZxEZdfx+rVENMvGTFjUcDDOZGKHaiavA8Y+FwM2I/o8gJT6pCYZk19XfeOntVzGZH2F1qqH7SLjXMhUM+YJw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.1.tgz", + "integrity": "sha512-LbVpT1NdzTdDDs7xEZdebjDrqsvKi5UyVKUQqtTYYNyC1JJYVAwNQWe4ybWvoT2V2WW9PGVO2u5Y6aVj4ER/Ow==", "requires": { "core-js": "3.0.1", "object-assign": "4.1.1", @@ -10498,11 +10655,6 @@ "whatwg-fetch": "3.0.0" }, "dependencies": { - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" - }, "promise": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", @@ -10510,11 +10662,6 @@ "requires": { "asap": "~2.0.6" } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, @@ -10537,9 +10684,9 @@ } }, "react-dev-utils": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.0.tgz", - "integrity": "sha512-HXvxOnABzIQH804ros5dBFryw4x0FU7Tl5KU2xg71jKx0EDsJYK0LuVVdj9qoLIgD1pmjzpjl7q7pjwXKIe37A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz", + "integrity": "sha512-pnaeMo/Pxel8aZpxk1WwxT3uXxM3tEwYvsjCYn5R7gNxjhN1auowdcLDzFB8kr7rafAj2rxmvfic/fbac5CzwQ==", "requires": { "@babel/code-frame": "7.0.0", "address": "1.0.3", @@ -10550,7 +10697,7 @@ "escape-string-regexp": "1.0.5", "filesize": "3.6.1", "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.0.1", + "fork-ts-checker-webpack-plugin": "1.1.1", "global-modules": "2.0.0", "globby": "8.0.2", "gzip-size": "5.0.0", @@ -10560,7 +10707,7 @@ "loader-utils": "1.2.3", "opn": "5.4.0", "pkg-up": "2.0.0", - "react-error-overlay": "^5.1.5", + "react-error-overlay": "^5.1.6", "recursive-readdir": "2.2.2", "shell-quote": "1.6.1", "sockjs-client": "1.3.0", @@ -10634,9 +10781,9 @@ } }, "react-error-overlay": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.5.tgz", - "integrity": "sha512-O9JRum1Zq/qCPFH5qVEvDDrVun8Jv9vbHtZXCR1EuRj9sKg1xJTlHxBzU6AkCzpvxRLuiY4OKImy3cDLQ+UTdg==" + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz", + "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==" }, "react-focus-lock": { "version": "1.19.1", @@ -10745,25 +10892,26 @@ } }, "react-scripts": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.0.tgz", - "integrity": "sha512-F4HegoBuUKZvEzXYksQu05Y6vJqallhHkQUEL6M7OQ5rYLBQC/4MTK6km9ZZvEK9TqMy1XA8SSEJGJgTEr6bSQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz", + "integrity": "sha512-LKEjBhVpEB+c312NeJhzF+NATxF7JkHNr5GhtwMeRS1cMeLElMeIu8Ye7WGHtDP7iz7ra4ryy48Zpo6G/cwWUw==", "requires": { "@babel/core": "7.4.3", "@svgr/webpack": "4.1.0", "@typescript-eslint/eslint-plugin": "1.6.0", "@typescript-eslint/parser": "1.6.0", "babel-eslint": "10.0.1", - "babel-jest": "24.7.1", + "babel-jest": "^24.8.0", "babel-loader": "8.0.5", "babel-plugin-named-asset-import": "^0.3.2", - "babel-preset-react-app": "^8.0.0", + "babel-preset-react-app": "^9.0.0", + "camelcase": "^5.2.0", "case-sensitive-paths-webpack-plugin": "2.2.0", "css-loader": "2.1.1", "dotenv": "6.2.0", "dotenv-expand": "4.2.0", "eslint": "^5.16.0", - "eslint-config-react-app": "^4.0.0", + "eslint-config-react-app": "^4.0.1", "eslint-loader": "2.1.2", "eslint-plugin-flowtype": "2.50.1", "eslint-plugin-import": "2.16.0", @@ -10788,13 +10936,14 @@ "postcss-normalize": "7.0.1", "postcss-preset-env": "6.6.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.0", - "react-dev-utils": "^9.0.0", + "react-app-polyfill": "^1.0.1", + "react-dev-utils": "^9.0.1", "resolve": "1.10.0", "sass-loader": "7.1.0", "semver": "6.0.0", "style-loader": "0.23.1", "terser-webpack-plugin": "1.2.3", + "ts-pnp": "1.1.2", "url-loader": "1.1.2", "webpack": "4.29.6", "webpack-dev-server": "3.2.1", @@ -10838,9 +10987,9 @@ } }, "react-window": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.1.tgz", - "integrity": "sha512-iNzekymggL9zAnil3QbmRG74RDMfIbO+plE/soP3M/zskicA1DwoLthC6/QA6xu9dr+A5UoawCTsEYcva2mfeA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.2.tgz", + "integrity": "sha512-Qo9Z5qYvigRbSlCaWTor53G3EWVtHxXXny86EYsMG57H+4LJEEyh22PuWW6ECCkOh7sY6wWF78+wNGwPnMBCAg==", "requires": { "@babel/runtime": "^7.0.0", "memoize-one": ">=3.1.1 <6" @@ -10918,22 +11067,22 @@ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerate-unicode-properties": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", - "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" }, "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", + "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", "requires": { "private": "^0.1.6" } @@ -10948,9 +11097,9 @@ } }, "regexp-tree": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", - "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", + "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==" }, "regexpp": { "version": "2.0.1", @@ -11262,9 +11411,9 @@ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "requires": { "tslib": "^1.9.0" } @@ -11415,9 +11564,9 @@ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -11426,12 +11575,12 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { "debug": { @@ -11440,17 +11589,19 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" } } }, @@ -11481,22 +11632,38 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -11531,9 +11698,9 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "sha.js": { "version": "2.4.11", @@ -11807,29 +11974,125 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-explorer": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-1.8.0.tgz", - "integrity": "sha512-1Q0lNSw5J7pChKmjqniOCLbvLFi4KJfrtixk99CzvRcqFiGBJvRHMrw0PjLwKOvbuAo8rNOukJhEPA0Nj85xDw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.0.0.tgz", + "integrity": "sha512-xACLMz3wJTQuDFH/p0Cv4zQgCx5v5wGVeD7Y1ZHCHI7I6u9cbOm+6UJSz3iD9f8kAKga57twXIEaLbkba+S7Ng==", "dev": true, "requires": { "btoa": "^1.2.1", + "chalk": "^2.4.2", "convert-source-map": "^1.6.0", - "docopt": "^0.6.2", "ejs": "^2.6.1", - "fs-extra": "^7.0.1", - "glob": "^7.1.3", - "opn": "^5.5.0", - "source-map": "^0.5.1", - "temp": "^0.9.0" + "escape-html": "^1.0.3", + "glob": "^7.1.4", + "lodash": "^4.17.11", + "open": "^6.3.0", + "source-map": "^0.7.3", + "temp": "^0.9.0", + "yargs": "^13.2.4" }, "dependencies": { - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -11868,9 +12131,9 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "space-separated-tokens": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.3.tgz", - "integrity": "sha512-/M5RAdBuQlSDPNfA5ube+fkHbHyY08pMuADLmsAQURzo56w90r681oiOoz3o3ZQyWdSeNucpTFjL+Ggd5qui3w==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz", + "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==" }, "spdx-correct": { "version": "3.1.0", @@ -11926,9 +12189,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12004,9 +12267,9 @@ } }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "stealthy-require": { "version": "1.1.1", @@ -12182,9 +12445,9 @@ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" }, "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", + "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", "requires": { "ajv": "^6.9.1", "lodash": "^4.17.11", @@ -12223,9 +12486,9 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "taucharts": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.2.tgz", - "integrity": "sha512-oLO6SpQSfHTwinaLVManGmg+FzyipeFyXamfY2A7QpiFcOWzAxMvBnQM4ecnPgieBkq0r8mbuBPwJe1xmLo/IQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.3.tgz", + "integrity": "sha512-0rI2ZO6RCNv/VBQSM/FBE2U53QtxAYMDO1bYEVIBZZNsoj3D6M3UUDtR7HXVIDU1vDGGyS93cIJ9b5lMT9Xyzg==", "requires": { "d3-array": "^1.2.1", "d3-axis": "^1.0.12", @@ -12292,9 +12555,9 @@ } }, "test-exclude": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.2.tgz", - "integrity": "sha512-N2pvaLpT8guUpb5Fe1GJlmvmzH3x+DAKmmyEQmFP792QcLYoGE1syxztSvPD1V8yPe6VrcCt6YGQVjSRjCASsA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", @@ -12410,13 +12673,10 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "requires": { - "hoek": "6.x.x" - } + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "topojson-client": { "version": "3.0.0", @@ -12449,9 +12709,9 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "trough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", - "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", + "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==" }, "ts-pnp": { "version": "1.1.2", @@ -12464,9 +12724,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tsutils": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.10.0.tgz", - "integrity": "sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.13.0.tgz", + "integrity": "sha512-wRtEjVU8Su72sDIDoqno5Scwt8x4eaF0teKO3m4hu8K1QFPnIZMM88CLafs2tapUeWnY9SwwO3bWeOt2uauBcg==", "requires": { "tslib": "^1.8.1" } @@ -12498,12 +12758,12 @@ } }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "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.18" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -12758,11 +13018,11 @@ } }, "url-parse": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", - "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -12828,9 +13088,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==" }, "verror": { "version": "1.10.0", @@ -12843,11 +13103,11 @@ } }, "vfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.0.tgz", - "integrity": "sha512-WMNeHy5djSl895BqE86D7WqA0Ie5fAIeGCa7V1EqiXyJg5LaGch2SUaZueok5abYQGH6mXEAsZ45jkoILIOlyA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz", + "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==", "requires": { - "@types/unist": "^2.0.2", + "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "replace-ext": "1.0.0", "unist-util-stringify-position": "^2.0.0", @@ -12855,27 +13115,20 @@ }, "dependencies": { "unist-util-stringify-position": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.0.tgz", - "integrity": "sha512-Uz5negUTrf9zm2ZT2Z9kdOL7Mr7FJLyq3ByqagUi7QZRVK1HnspVazvSqwHt73jj7APHtpuJ4K110Jm8O6/elw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz", + "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==", "requires": { "@types/unist": "^2.0.2" } }, "vfile-message": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.0.tgz", - "integrity": "sha512-YS6qg6UpBfIeiO+6XlhPOuJaoLvt1Y9g2cmlwqhBOOU0XRV8j5RLeoz72t6PWLvNXq3EBG1fQ05wNPrUoz0deQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz", + "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==", "requires": { "@types/unist": "^2.0.2", - "unist-util-stringify-position": "^1.1.1" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - } + "unist-util-stringify-position": "^2.0.0" } } } @@ -12949,9 +13202,9 @@ } }, "web-namespaces": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.2.tgz", - "integrity": "sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.3.tgz", + "integrity": "sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA==" }, "webidl-conversions": { "version": "4.0.2", @@ -12990,13 +13243,13 @@ } }, "webpack-dev-middleware": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz", - "integrity": "sha512-A47I5SX60IkHrMmZUlB0ZKSWi29TZTcPz7cha1Z75yYOsgWh/1AcPmQEbC8ZIbU3A1ytSv1PMU0PyPz2Lmz2jg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", + "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", "requires": { "memory-fs": "^0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", + "mime": "^2.4.2", + "range-parser": "^1.2.1", "webpack-log": "^2.0.0" } }, @@ -13206,55 +13459,55 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "workbox-background-sync": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.0.tgz", - "integrity": "sha512-rmDqz1k2mnG8wj68rBapoFP3iCKmdPeTdD0/GLtErDcaQsKnGlsFmjjJ7OuQbuBa+W0FfVWCE+s3VwqL0D/+DA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", + "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-broadcast-update": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.0.tgz", - "integrity": "sha512-YYdz+8FAVdy1ZTsXpapWyd5t2nH7KdBIQ9rFlsRMSGFS7LzcKfZy8Tka1W8byMNM1II5cxlFr7f6+3vLahzrCg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", + "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.0.tgz", - "integrity": "sha512-D2fQa2Isp/BboJ8edYmvsTCrBrPWwVCYa7zMDysLViIaGVQTFMgazRXx8wZ2gZKud13M0maUR5Ln4wS5UiqAIA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", + "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", "requires": { "@babel/runtime": "^7.3.4", + "@hapi/joi": "^15.0.0", "common-tags": "^1.8.0", "fs-extra": "^4.0.2", "glob": "^7.1.3", - "joi": "^14.3.1", "lodash.template": "^4.4.0", "pretty-bytes": "^5.1.0", "stringify-object": "^3.3.0", "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.0", - "workbox-broadcast-update": "^4.3.0", - "workbox-cacheable-response": "^4.3.0", - "workbox-core": "^4.3.0", - "workbox-expiration": "^4.3.0", - "workbox-google-analytics": "^4.3.0", - "workbox-navigation-preload": "^4.3.0", - "workbox-precaching": "^4.3.0", - "workbox-range-requests": "^4.3.0", - "workbox-routing": "^4.3.0", - "workbox-strategies": "^4.3.0", - "workbox-streams": "^4.3.0", - "workbox-sw": "^4.3.0", - "workbox-window": "^4.3.0" + "workbox-background-sync": "^4.3.1", + "workbox-broadcast-update": "^4.3.1", + "workbox-cacheable-response": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-expiration": "^4.3.1", + "workbox-google-analytics": "^4.3.1", + "workbox-navigation-preload": "^4.3.1", + "workbox-precaching": "^4.3.1", + "workbox-range-requests": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1", + "workbox-streams": "^4.3.1", + "workbox-sw": "^4.3.1", + "workbox-window": "^4.3.1" }, "dependencies": { "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", + "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -13268,98 +13521,93 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, "workbox-cacheable-response": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.0.tgz", - "integrity": "sha512-GlnPS1WtEoPNFVPVW1Ss0CrNPlhB7FpMTh2XwpqdJKq7K/aDI8LKdFpRcZBZ2pfRpOf8b6AjAiDZr0hrJ9EFtQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", + "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.0.tgz", - "integrity": "sha512-k5j6yfyznkK7zHiYLbCsrJfYWUcJ9ZnFFzI4KSbr7D43rWwQkusHsPmOG3OT1YZseACtLRSnUUzb+Cg2arVXtw==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", + "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" }, "workbox-expiration": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.0.tgz", - "integrity": "sha512-mcTWxsBHVkDBlIXOZ9uT3m0bAc7OJ3NTj1pTjWzwVZ6sqvT1I88ewIyppv44GO9JqnwE87lODpdEUIKp9V4lNA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", + "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-google-analytics": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.0.tgz", - "integrity": "sha512-itAfcN/rVNf5WqAMW5/OA/pMkFxZjYuk2ZmOCIuy0fFJeQ4F0PfD3Y1DzX1JrKHPMIPeXvvZiAGY8+HRuJjy7w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", + "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", "requires": { - "workbox-background-sync": "^4.3.0", - "workbox-core": "^4.3.0", - "workbox-routing": "^4.3.0", - "workbox-strategies": "^4.3.0" + "workbox-background-sync": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1" } }, "workbox-navigation-preload": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.0.tgz", - "integrity": "sha512-1RoaOZD8mMTPjvTNG/FWSQZmfTlTP5FC7c6ZwKWWGoULcxPCmiqI8uWOnMg1/S+eAjYTtNfToW2pfvK4zi5ihA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", + "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-precaching": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.0.tgz", - "integrity": "sha512-wEsF7+I1opRbyJysYWtn8c1liHqA3bvtaTk4FohE3ViZfn2MIEzORuk7G1kEBZEdJnGf7QcfVJ2tNFYv72yQZQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", + "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-range-requests": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.0.tgz", - "integrity": "sha512-2NskkW6Qmkm9YQPh7swODfB6u3yALqdUqxb0i/3tYp4OKEux50ju9B1OK/u3V/INJ6q2s/CwYmxwxJHhXi9Nfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", + "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-routing": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.0.tgz", - "integrity": "sha512-/lqWiZRjtyKi3If3J8jWHXJQIjaSLv8WKbGnriOcTxFEG7t+AJ79QYIxWXv0UQo4KFpjQRQUag+38T9spbV0IA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", + "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-strategies": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.0.tgz", - "integrity": "sha512-yzhs07UZg7CR0thFFsUDI5hp+I0WoKd9IHSj4ckHoUAslyKLpmwGnOInsPeq2WQfXn7CkyinRjwUrwv3FMw1Gw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", + "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-streams": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.0.tgz", - "integrity": "sha512-CIA9inxuFELQOO+/7+JpE50cBhpTWOYcLK7tQpriQ6PJod2tAMgo9X89vt9vLk1pN0PMd749MqurAz8FgLHHEg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", + "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "workbox-sw": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.0.tgz", - "integrity": "sha512-d4INzCxFrHixUrhYV5z+6+zX1AKO3T77JY7l1ZKh15blW3Mz9u0FpJATzz3NWaI9X/cxgRyOsR8J7deu3XjlEg==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", + "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" }, "workbox-webpack-plugin": { "version": "4.2.0", @@ -13372,21 +13620,29 @@ } }, "workbox-window": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.0.tgz", - "integrity": "sha512-Lf5Da+4VdmUZSVhBFEcZSBWNHm9x7Zr2FUp1mgUZhrIwnkfL4qmjpG7TyAzaPm7QLc/O+yxDDC5cgEvMtE1fjQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", + "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", "requires": { - "workbox-core": "^4.3.0" + "workbox-core": "^4.3.1" } }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "requires": { "errno": "~0.1.7" } }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "requires": { + "microevent.ts": "~0.1.1" + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", diff --git a/client/package.json b/client/package.json index b8e49bed8..4958bb8e1 100644 --- a/client/package.json +++ b/client/package.json @@ -13,21 +13,21 @@ "keymaster": "^1.6.2", "lodash": "^4.17.11", "match-sorter": "^3.0.0", - "mdi-react": "^5.3.0", + "mdi-react": "^5.4.0", "mitt": "^1.1.3", "prop-types": "^15.7.2", "react": "^16.8.6", - "react-ace": "^6.5.0", + "react-ace": "^7.0.1", "react-copy-to-clipboard": "^5.0.0", "react-dom": "^16.8.6", "react-draggable": "^3.3.0", "react-measure": "^2.3.0", "react-router-dom": "^5.0.0", - "react-scripts": "3.0.0", + "react-scripts": "^3.0.1", "react-split-pane": "^0.1.87", "react-switch": "^5.0.0", - "react-window": "^1.8.1", - "taucharts": "^2.7.2", + "react-window": "^1.8.2", + "taucharts": "^2.7.3", "unistore": "^3.4.1", "whatwg-fetch": "^3.0.0" }, @@ -47,8 +47,8 @@ "not op_mini all" ], "devDependencies": { - "eslint-config-prettier": "^4.1.0", - "eslint-plugin-prettier": "^3.0.1", - "source-map-explorer": "^1.8.0" + "eslint-config-prettier": "^4.3.0", + "eslint-plugin-prettier": "^3.1.0", + "source-map-explorer": "^2.0.0" } } From 33953611b09d132916ea1d4b6150453f5f5a7f6e Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 3 Jun 2019 23:33:20 -0400 Subject: [PATCH 057/855] Style tweaks (#437) * Use CSS variables [WIP] * Fix IncompleteDataNotification style * Secondary color border for danger icon button * Thick input focus border * Consistent select border Padding doesn't come into play here. Select elements _SUCK_ what the heck nobody got time for that. --- client/src/common/Button.module.css | 38 +++++++++---------- client/src/common/ButtonLink.module.css | 6 +-- client/src/common/FormExplain.module.css | 1 - client/src/common/IconButton.module.css | 13 ++++--- .../src/common/IncompleteDataNotification.js | 7 ++-- .../IncompleteDataNotification.module.css | 9 +++++ client/src/common/Input.module.css | 23 ++++++----- client/src/common/Select.module.css | 18 +++++---- client/src/common/Tag.js | 28 +++++--------- client/src/common/Tag.module.css | 13 ++++++- client/src/common/Text.js | 15 +++++--- client/src/common/Text.module.css | 7 ++++ client/src/common/base.module.css | 15 +------- client/src/css/index.css | 30 +++++++++++++-- client/src/css/reset.css | 1 + client/src/css/vendorOverrides.css | 11 +++--- 16 files changed, 136 insertions(+), 99 deletions(-) create mode 100644 client/src/common/IncompleteDataNotification.module.css create mode 100644 client/src/common/Text.module.css diff --git a/client/src/common/Button.module.css b/client/src/common/Button.module.css index b2901d1bb..94b03cfd7 100644 --- a/client/src/common/Button.module.css +++ b/client/src/common/Button.module.css @@ -9,7 +9,7 @@ text-align: center; background-image: none; border: 1px solid transparent; - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.065); cursor: pointer; transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); user-select: none; @@ -30,12 +30,12 @@ color: #40a9ff; background-color: #fff; border-color: #40a9ff; - box-shadow: 0 2px 0 rgba(64, 169, 255, 0.5); + box-shadow: 0 1px 0 rgba(64, 169, 255, 0.5); } .btn:active { - margin-top: 2px; - margin-bottom: -2px; + margin-top: 1px; + margin-bottom: -1px; box-shadow: none; background-color: #1890ff; color: #fff; @@ -47,54 +47,54 @@ .primary { color: #fff; - background-color: #1890ff; - border-color: #1890ff; + background-color: var(--primary-color); + border-color: var(--primary-color); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12); - box-shadow: 0 2px 0 rgb(9, 100, 185, 0.5); + box-shadow: 0 1px 0 rgb(9, 100, 185, 0.5); } .primary:hover, .primary:focus { color: #fff; - background-color: #40a9ff; - border-color: #40a9ff; + background-color: var(--primary-light-color); + border-color: var(--primary-light-color); } .primary:active { color: #fff; - background-color: #096dd9; - border-color: #096dd9; + background-color: var(--primary-dark-color); + border-color: var(--primary-dark-color); } .danger { - color: #fb30ac; + color: var(--secondary-color); background-color: #f5f5f5; border-color: #d9d9d9; } .danger:hover { color: #fff; - background-color: #fb30ac; - border-color: #fb30ac; + background-color: var(--secondary-color); + border-color: var(--secondary-color); } .danger:focus { - color: #fb30ac; + color: var(--secondary-color); background-color: #fff; - border-color: #fb30ac; + border-color: var(--secondary-color); } .danger:active { color: #fff; - background-color: #fb30ac; - border-color: #fb30ac; + background-color: var(--secondary-color); + border-color: var(--secondary-color); } .btn:disabled, .btn[disabled] { color: rgba(0, 0, 0, 0.25); background-color: #eee; - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.065); border: 1px solid transparent; border-color: #d9d9d9; } diff --git a/client/src/common/ButtonLink.module.css b/client/src/common/ButtonLink.module.css index db76f5063..516025711 100644 --- a/client/src/common/ButtonLink.module.css +++ b/client/src/common/ButtonLink.module.css @@ -8,7 +8,7 @@ text-align: center; background-image: none; border: 1px solid transparent; - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.065); cursor: pointer; transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); user-select: none; @@ -30,7 +30,7 @@ color: #40a9ff; background-color: #fff; border-color: #40a9ff; - box-shadow: 0 2px 0 rgba(64, 169, 255, 0.5); + box-shadow: 0 1px 0 rgba(64, 169, 255, 0.5); outline: 0; } @@ -50,7 +50,7 @@ .btnLink[disabled] { color: rgba(0, 0, 0, 0.25); background-color: #eee; - box-shadow: 0 2px 0 rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.065); border: 1px solid transparent; border-color: #d9d9d9; } diff --git a/client/src/common/FormExplain.module.css b/client/src/common/FormExplain.module.css index dbad0247d..a29059c2c 100644 --- a/client/src/common/FormExplain.module.css +++ b/client/src/common/FormExplain.module.css @@ -6,5 +6,4 @@ color: rgba(0, 0, 0, 0.45); font-size: 12px; line-height: 1.5; - transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); } diff --git a/client/src/common/IconButton.module.css b/client/src/common/IconButton.module.css index 4fd880607..8f9ed3371 100644 --- a/client/src/common/IconButton.module.css +++ b/client/src/common/IconButton.module.css @@ -28,17 +28,16 @@ .btn:focus { text-decoration: none; outline: none; - border: 2px solid #40a9ff; + border: 2px solid var(--primary-color); background-color: #f3f3f3; } .btn:hover { - color: #40a9ff; + color: var(--primary-light-color); } .btn:active { - color: #096dd9; - transform: scale(0.95); + color: var(--primary-dark-color); } .btn:disabled, @@ -49,9 +48,11 @@ .danger:hover, .danger:focus { - color: #fb30ac; + color: var(--secondary-color); + border: 2px solid var(--secondary-color); } .danger:active { - color: #ff009d; + color: var(--secondary-dark-color); + border: 2px solid var(--secondary-dark-color); } diff --git a/client/src/common/IncompleteDataNotification.js b/client/src/common/IncompleteDataNotification.js index b2ebd8cda..72c4f996a 100644 --- a/client/src/common/IncompleteDataNotification.js +++ b/client/src/common/IncompleteDataNotification.js @@ -1,7 +1,8 @@ -import AlertIcon from 'mdi-react/AlertCircleIcon'; +import AlertIcon from 'mdi-react/AlertIcon'; import React from 'react'; import Text from './Text'; import Tooltip from './Tooltip'; +import styles from './IncompleteDataNotification.module.css'; function IncompleteDataNotification() { return ( @@ -11,8 +12,8 @@ function IncompleteDataNotification() { > {/* span use in place of wrapping Text with forwardRef needed by Tooltip */} - - + + Incomplete diff --git a/client/src/common/IncompleteDataNotification.module.css b/client/src/common/IncompleteDataNotification.module.css new file mode 100644 index 000000000..c7047a691 --- /dev/null +++ b/client/src/common/IncompleteDataNotification.module.css @@ -0,0 +1,9 @@ +.text { + margin-right: 0.5rem; +} + +.AlertIcon { + margin-right: 0.5rem; + position: relative; + top: 3px; +} diff --git a/client/src/common/Input.module.css b/client/src/common/Input.module.css index 194d5c61b..b6d392f2e 100644 --- a/client/src/common/Input.module.css +++ b/client/src/common/Input.module.css @@ -21,33 +21,32 @@ } .input:focus { - border-color: #40a9ff; - border-right-width: 1px !important; + border: 2px solid var(--primary-color); + /* padding adjustment prevents added border from shifting text */ + padding-left: 10px; outline: 0; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); } .input:hover { - border-color: #40a9ff; - border-right-width: 1px !important; + border: 2px solid var(--primary-color); + /* padding adjustment prevents added border from shifting text */ + padding-left: 10px; } .danger { - border-color: #f5222d; - box-shadow: inset 0 1px 1px rgba(245, 34, 45, 0.5); + border-color: var(--secondary-color); + box-shadow: inset 0 1px 1px var(--secondary-color-30); } .danger:focus { - border-color: #ff4d4f; - border-right-width: 1px !important; + border: 2px solid var(--secondary-color); outline: 0; - box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); } .danger:hover { - border-color: #ff4d4f; + border-color: var(--secondary-color); } .danger::placeholder { - color: #f5222d; + color: var(--secondary-color); } diff --git a/client/src/common/Select.module.css b/client/src/common/Select.module.css index 48a124829..bdafdd967 100644 --- a/client/src/common/Select.module.css +++ b/client/src/common/Select.module.css @@ -21,27 +21,29 @@ border-radius: 2px; } -.select:focus { - border-color: #40a9ff; +.select:focus, +.select:hover { + border: 2px solid var(--primary-color); outline: 0; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + /* padding adjustment prevents added border from shifting text */ + padding-left: 10px; } .danger { - border-color: #f5222d; + border-color: var(--secondary-color); + box-shadow: inset 0 1px 1px var(--secondary-color-30); } .danger:focus { - border-color: #ff4d4f; - border-right-width: 1px !important; + border: 2px solid var(--secondary-color); outline: 0; box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); } .danger:hover { - border-color: #ff4d4f; + border-color: var(--secondary-color); } .danger::placeholder { - color: #f5222d; + color: var(--secondary-color); } diff --git a/client/src/common/Tag.js b/client/src/common/Tag.js index 5f630d7b8..7eb0e1c37 100644 --- a/client/src/common/Tag.js +++ b/client/src/common/Tag.js @@ -1,29 +1,21 @@ import React from 'react'; import styles from './Tag.module.css'; -import base from './base.module.css'; import CloseIcon from 'mdi-react/CloseIcon'; function Tag({ children, onClose }) { return ( -
    +
    {children} {onClose && ( - <> - - - + )}
    ); diff --git a/client/src/common/Tag.module.css b/client/src/common/Tag.module.css index 6a7da2cb0..7d79ada0b 100644 --- a/client/src/common/Tag.module.css +++ b/client/src/common/Tag.module.css @@ -2,11 +2,12 @@ margin: 2px; padding: 3px 8px; display: inline-block; - color: #fff; border-radius: 2px; display: inline-flex; flex-wrap: nowrap; align-items: center; + border: 1px solid rgb(218, 218, 218); + background-color: rgb(243, 243, 243); } .tagCloseButton { @@ -16,4 +17,14 @@ background-color: transparent; padding: 0px; font-size: 16px; + margin-left: 6px; +} + +.tagCloseButton:hover, +.tagCloseButton:focus { + outline: 2px solid var(--primary-color); +} + +.CloseIcon { + margin-top: 2px; } diff --git a/client/src/common/Text.js b/client/src/common/Text.js index 743d2bab6..3fdd99a93 100644 --- a/client/src/common/Text.js +++ b/client/src/common/Text.js @@ -1,16 +1,21 @@ import React from 'react'; +import styles from './Text.module.css'; -const Text = ({ children, type, style, ...rest }) => { - const s = Object.assign({}, style); +const Text = ({ children, className, type, ...rest }) => { + const cs = []; + + if (className) { + cs.push(className); + } if (type === 'secondary') { - s.color = 'rgba(0,0,0,0.4)'; + cs.push(styles.secondary); } else if (type === 'danger') { - s.color = '#cf1322'; + cs.push(styles.danger); } return ( - + {children} ); diff --git a/client/src/common/Text.module.css b/client/src/common/Text.module.css new file mode 100644 index 000000000..26f3bbac0 --- /dev/null +++ b/client/src/common/Text.module.css @@ -0,0 +1,7 @@ +.secondary { + color: rgba(0, 0, 0, 0.4); +} + +.danger { + color: var(--secondary-color); +} diff --git a/client/src/common/base.module.css b/client/src/common/base.module.css index f3f86d37c..7872ec484 100644 --- a/client/src/common/base.module.css +++ b/client/src/common/base.module.css @@ -1,10 +1,6 @@ /* - Instead of using css module compose, this is going to take the approach of tachyons-like utility classes - Eventually something like styled-system and emotion can be brought in to make proper theming? + TODO: Remove this and replace with css variables */ -.bgSecondary { - background-color: #fb30ac; -} .shadow1 { box-shadow: rgba(64, 169, 255, 0.7) 1px 1px 1px 1px, @@ -15,15 +11,6 @@ box-shadow: rgba(56, 165, 255, 0.44) 0px 0px 8px 4px; } -.bgRadial { - background: rgba(248, 70, 252, 0.5); - background: radial-gradient( - at 50% 300px, - rgba(248, 70, 252, 0.5) 6%, - rgba(0, 169, 253, 0.5) 100% - ); -} - .borderBottom { border-bottom: 1px solid rgba(0, 0, 0, 0.15); } diff --git a/client/src/css/index.css b/client/src/css/index.css index 8b4c98480..09f189df7 100644 --- a/client/src/css/index.css +++ b/client/src/css/index.css @@ -1,7 +1,31 @@ +/* variables +============================================================================ */ +:root { + /* + These REFERENCE are various colors that were sprinkled throughout + They are kept around for reference until colors settle + */ + --REFERENCE-link-color: #00b7ff; + --REFERENCE-button-border-color: #40a9ff; + --REFERENCE-button-active-color: #096dd9; + --REFERENCE-primary-color: #1890ff; + + --primary-color: #1890ff; + --primary-dark-color: #0070d8; + --primary-light-color: #2f9bff; + --primary-color-90: rgba(24, 144, 255, 0.9); + --primary-color-30: rgba(24, 144, 255, 0.3); + --secondary-color: rgb(250, 50, 173); + --secondary-dark-color: hsl(323, 100%, 50%); + --secondary-color-90: rgba(250, 50, 173, 0.9); + --secondary-color-75: rgba(250, 50, 173, 0.75); + --secondary-color-30: rgba(250, 50, 173, 0.3); +} + /* core styles ============================================================================ */ a { - color: #00b7ff; + color: var(--primary-color); } a:hover, a:active, @@ -43,7 +67,7 @@ input { } [data-reach-menu-item][data-selected] { - background: #1890ff; + background: var(--primary-color); color: white; outline: none; } @@ -71,7 +95,7 @@ input { } .bg-error { - background-color: rgba(251, 48, 173, 0.8); + background-color: var(--secondary-color-75); color: #fff; text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); } diff --git a/client/src/css/reset.css b/client/src/css/reset.css index dcfc6ecf5..64a7cc188 100644 --- a/client/src/css/reset.css +++ b/client/src/css/reset.css @@ -149,6 +149,7 @@ sup { } a { color: #1890ff; + /* color: #00b7ff; */ text-decoration: none; background-color: transparent; cursor: pointer; diff --git a/client/src/css/vendorOverrides.css b/client/src/css/vendorOverrides.css index aae9666db..2116ee263 100644 --- a/client/src/css/vendorOverrides.css +++ b/client/src/css/vendorOverrides.css @@ -5,19 +5,18 @@ /* react splitpane resizer */ .Resizer.vertical:hover { - border-left: 5px solid rgba(243, 1, 255, 0.9); - border-right: 5px solid rgba(4, 159, 255, 0.9); + border-left: 5px solid var(--primary-color-90); + border-right: 5px solid var(--primary-color-90); } /* react splitpane resizer */ .Resizer.horizontal:hover { - border-top: 5px solid rgba(243, 1, 255, 0.9); - border-bottom: 5px solid rgba(4, 159, 255, 0.9); + border-top: 5px solid var(--primary-color-90); + border-bottom: 5px solid var(--primary-color-90); } .Resizer:hover { - -webkit-transition: all 1s ease; - transition: all 1s ease; + transition: all 0.3s ease; } /* QueryResultDataTable react-window/react-draggable implementaion */ From 92c242050b8f4ced647c5134dd87b98c8f8f3a1b Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 4 Jun 2019 22:55:14 -0400 Subject: [PATCH 058/855] Replace base.module.css with css variables (#438) * Add variables for shadow and border * Use css module for DeleteConfirmButton * Use css module for Drawer * Use css module for message * Use css module for ListItem * Decrease size of shadow 2 * Use css module for Modal * Use css var for shadow2 * Remove base.module.css --- client/src/common/DeleteConfirmButton.js | 25 +++--------- .../src/common/DeleteConfirmButton.module.css | 21 ++++++++++ client/src/common/Drawer.js | 39 ++++--------------- client/src/common/Drawer.module.css | 21 ++++++++++ client/src/common/ListItem.js | 18 +++------ client/src/common/ListItem.module.css | 7 ++++ client/src/common/Modal.js | 14 ++----- client/src/common/Modal.module.css | 11 ++++++ client/src/common/base.module.css | 16 -------- client/src/common/message.js | 25 +++--------- client/src/common/message.module.css | 15 +++++++ client/src/css/index.css | 6 +++ client/src/queries/QueryList.module.css | 1 + client/src/queries/QueryListDrawer.js | 3 +- 14 files changed, 110 insertions(+), 112 deletions(-) create mode 100644 client/src/common/DeleteConfirmButton.module.css create mode 100644 client/src/common/Drawer.module.css create mode 100644 client/src/common/ListItem.module.css create mode 100644 client/src/common/Modal.module.css delete mode 100644 client/src/common/base.module.css create mode 100644 client/src/common/message.module.css diff --git a/client/src/common/DeleteConfirmButton.js b/client/src/common/DeleteConfirmButton.js index b8a691ff0..b07718e7c 100644 --- a/client/src/common/DeleteConfirmButton.js +++ b/client/src/common/DeleteConfirmButton.js @@ -1,15 +1,10 @@ import { Dialog } from '@reach/dialog'; import DeleteIcon from 'mdi-react/DeleteIcon'; import React, { useRef, useState } from 'react'; -import base from './base.module.css'; import Button from './Button'; +import styles from './DeleteConfirmButton.module.css'; import IconButton from './IconButton'; -const dialogStyle = { - width: '500px', - borderRadius: '2px' -}; - const DeleteConfirmButton = React.forwardRef( ({ children, confirmMessage, onConfirm, className, icon, ...rest }, ref) => { const [visible, setVisible] = useState(false); @@ -39,24 +34,16 @@ const DeleteConfirmButton = React.forwardRef( {visible && ( setVisible(false)} - className={base.shadow2} - style={dialogStyle} + className={styles.Dialog} initialFocusRef={cancelEl} > -
    +
    {confirmMessage}
    -
    +
    ); } diff --git a/client/src/queryEditor/UnsavedQuerySelector.js b/client/src/queryEditor/UnsavedQuerySelector.js new file mode 100644 index 000000000..894f62530 --- /dev/null +++ b/client/src/queryEditor/UnsavedQuerySelector.js @@ -0,0 +1,66 @@ +import React, { useEffect, useState } from 'react'; +import { connect } from 'unistore/react'; +import { setQueryState } from '../stores/queries'; +import { + getLocalQueryText, + removeLocalQueryText +} from '../utilities/localQueryText'; +import Modal from '../common/Modal'; +import SqlDiff from '../common/SqlDiff'; +import Button from '../common/Button'; + +function UnsavedQuerySelector({ queryId, queryText, setQueryState }) { + const [showModal, setShowModal] = useState(false); + const [unsavedQueryText, setUnsavedQueryText] = useState(''); + + useEffect(() => { + getLocalQueryText(queryId).then(localQueryText => { + if (typeof localQueryText === 'string' && localQueryText.trim() !== '') { + setShowModal(true); + setUnsavedQueryText(localQueryText); + } + }); + }, [queryId]); + + const value = [queryText, unsavedQueryText]; + return ( + +
    + + +
    +
    + +
    +
    + ); +} + +function mapStateToProps(state, props) { + return { + queryText: state.query && state.query.queryText + }; +} + +const Connected = connect( + mapStateToProps, + { setQueryState } +)(UnsavedQuerySelector); + +export default Connected; diff --git a/client/src/stores/queries.js b/client/src/stores/queries.js index 4848eb43b..fac687e8e 100644 --- a/client/src/stores/queries.js +++ b/client/src/stores/queries.js @@ -1,6 +1,10 @@ import uuid from 'uuid'; import message from '../common/message'; import fetchJson from '../utilities/fetch-json.js'; +import { + setLocalQueryText, + removeLocalQueryText +} from '../utilities/localQueryText'; const ONE_HOUR_MS = 1000 * 60 * 60; @@ -42,6 +46,8 @@ export const formatQuery = async state => { return; } + setLocalQueryText(query._id, json.query); + return { query: { ...query, queryText: json.query }, unsavedChanges: true @@ -143,6 +149,7 @@ export const saveQuery = store => async state => { return; } message.success('Query Saved'); + removeLocalQueryText(query._id); const updatedQueries = queries.map(q => { return q._id === query._id ? query : q; }); @@ -168,6 +175,7 @@ export const saveQuery = store => async state => { `${window.BASE_URL}/queries/${query._id}` ); message.success('Query Saved'); + removeLocalQueryText(query._id); store.setState({ isSaving: false, unsavedChanges: false, @@ -197,6 +205,9 @@ export const resetNewQuery = state => { export const setQueryState = (state, field, value) => { const { query } = state; + if (field === 'queryText') { + setLocalQueryText(query._id, value); + } return { query: { ...query, [field]: value }, unsavedChanges: true }; }; diff --git a/client/src/utilities/localQueryText.js b/client/src/utilities/localQueryText.js new file mode 100644 index 000000000..50703f3b7 --- /dev/null +++ b/client/src/utilities/localQueryText.js @@ -0,0 +1,25 @@ +import localforage from 'localforage'; + +export function setLocalQueryText(queryId, queryText) { + return localforage + .setItem(`queryText:${queryId}`, queryText) + .catch(error => console.error(error)); +} + +export function getLocalQueryText(queryId) { + return localforage + .getItem(`queryText:${queryId}`) + .catch(error => console.error(error)); +} + +export function removeLocalQueryText(queryId) { + return localforage + .removeItem(`queryText:${queryId}`) + .catch(error => console.error(error)); +} + +export default { + setLocalQueryText, + getLocalQueryText, + removeLocalQueryText +}; From 380f00629f5c2dd93f5c1b38b467966b449d7ee3 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Jun 2019 20:37:48 -0400 Subject: [PATCH 072/855] Update changelog for 3.0.0-beta.0 --- CHANGELOG.md | 428 +++++++++++++++++++++++--------------------- README.md | 2 +- server/package.json | 4 +- 3 files changed, 229 insertions(+), 205 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ee0842f7..c9c972ef4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,432 +1,456 @@ # Changelog +## 3.0.0-beta.0 + +### June 25, 2019 + +Beta for version 3 may be installed via latest docker image, or by installing via npm referencing exact version or beta tag. + +SQLPad v3 is backwards-compatible with SQLPad v2 database files, and is mostly a UI redesign/refresh and a large file structure change. Give it a try and if you aren't ready for it roll back to v2 and everything should still work. + +#### Editor-first UI refresh + +UI components previously based on bootstrap UI components are now replaced by custom components. Magenta is embraced as a secondary color. + +Management and listing pages (Queries, connections, users, and configuration) have been moved into side drawers, allowing management and browsing of things without leaving the current query. The query editor is the primary focus of the application. + +Query editor toolbars have been consolidated into a single bar to maximize use of space on the page. + +Unsaved changes to a previously-saved query are now saved, prompting the user to restore on next open. This is not enabled for unsaved changes to "new" queries since it could become an annoyance, but can be added if there is interest. + +Query result chart has been moved to a smaller resizable pane along side the SQL query instead of being placed in a tab. This impacts the size available for the chart, but brings it to the default view, allowing altering of the query without changing tabs. + +The schema sidebar may now be hidden and is now searchable. It has also been rewritten to render large trees efficiently. + +Query result grid no longer has data bars for numeric values since it didn't make sense for all number values. Date value display logic has been altered to only show timestamps if timestamps are detected. When timestamps are shown, the full timestamp from the JavaScript date object is displayed. + ## 2.8.1 ### March 7, 2019 -* Fix Google oauth for Google+ API shutdown +- Fix Google oauth for Google+ API shutdown ## 2.8.0 ### October 17, 2018 -* Add postgres column description to schema sidebar -* Log user id and email in debug mode -* Replace memory-based session store with file-based +- Add postgres column description to schema sidebar +- Log user id and email in debug mode +- Replace memory-based session store with file-based ## 2.7.1 ### August 2, 2018 -* Fix query editor not responding to input after query result scroll +- Fix query editor not responding to input after query result scroll ## 2.7.0 ### July 1, 2018 -* Add optional odbc support. See [ODBC wiki page](https://github.com/rickbergfalk/sqlpad/wiki/ODBC) for more detais +- Add optional odbc support. See [ODBC wiki page](https://github.com/rickbergfalk/sqlpad/wiki/ODBC) for more detais ## 2.6.1 ### June 17, 2018 -* Fix query editor loading when connections load slowly +- Fix query editor loading when connections load slowly ## 2.6.0 ### May 5, 2018 -* Add Cassandra support -* Sort driver dropdown in connection form +- Add Cassandra support +- Sort driver dropdown in connection form ## 2.5.8 ### May 5, 2018 -* Extend data grid to full width of container +- Extend data grid to full width of container ## 2.5.7 ### May 4, 2018 -* Implement data grid using react-virtualized (fixes resizable columns) -* Fix chart rendering error when columns no longer returned by query are referenced -* Allow case insensitive user lookup by email (fixes case sensitive signup/signin issues) +- Implement data grid using react-virtualized (fixes resizable columns) +- Fix chart rendering error when columns no longer returned by query are referenced +- Allow case insensitive user lookup by email (fixes case sensitive signup/signin issues) ## 2.5.6 ### April 25, 2018 -* Revert chart fix from 2.5.5 preventing charts from rendering +- Revert chart fix from 2.5.5 preventing charts from rendering ## 2.5.5 ### April 23, 2018 -* Remove frameguard protection (fixes iframe embeds) -* Use CDN for bootstrap font (fixes missing icons when using baseUrl) -* Update dependencies -* Fix 0 values classified as string in query results -* Fix UI chart error when referencing columns no longer returned by query -* Fix SQLPad crash postgres queries exceeding max row limit -* Only show admin registration open message if admin registration is actually open -* Fix baseUrl of undefined error -* A lot of driver refactoring - * Driver implementations now consolidated at /server/drivers - * All drivers now tested -* New docker build process/root-level Dockerfile +- Remove frameguard protection (fixes iframe embeds) +- Use CDN for bootstrap font (fixes missing icons when using baseUrl) +- Update dependencies +- Fix 0 values classified as string in query results +- Fix UI chart error when referencing columns no longer returned by query +- Fix SQLPad crash postgres queries exceeding max row limit +- Only show admin registration open message if admin registration is actually open +- Fix baseUrl of undefined error +- A lot of driver refactoring + - Driver implementations now consolidated at /server/drivers + - All drivers now tested +- New docker build process/root-level Dockerfile ## 2.5.4 ### April 1, 2018 -* Fixed password reset link when using base url +- Fixed password reset link when using base url ## 2.5.3 ### March 29, 2018 -* Fix SAP HANA schema not being cached due to dots in column name +- Fix SAP HANA schema not being cached due to dots in column name ## 2.5.2 ### March 27, 2018 -* Fix error when updating connection -* Fix SQLPAD_BASE_URL / --base-url use +- Fix error when updating connection +- Fix SQLPAD_BASE_URL / --base-url use ## 2.5.1 ### February 5, 2018 -* Fix early session expiration / extend session expiration every response +- Fix early session expiration / extend session expiration every response ## 2.5.0 ### February 5, 2018 -* Added support for SAP HANA (ccmehil) -* Many security improvements - * Majority of dependencies updated - * Implemented expressjs security best practices - * Helmet middleware added - * Express-session used instead of cookie-session - * Randomly generated cookie secrets - * Sessions now expire (1 hour) - * Limited amount of config info sent to front end -* Updated styling for User and Connection admin pages (bringing boring tables back. updates to rest of app to follow) -* Schema sidebar updates - * Limits presto schema sidebar to schema if provided in connection info - * Removed (view) label on views +- Added support for SAP HANA (ccmehil) +- Many security improvements + - Majority of dependencies updated + - Implemented expressjs security best practices + - Helmet middleware added + - Express-session used instead of cookie-session + - Randomly generated cookie secrets + - Sessions now expire (1 hour) + - Limited amount of config info sent to front end +- Updated styling for User and Connection admin pages (bringing boring tables back. updates to rest of app to follow) +- Schema sidebar updates + - Limits presto schema sidebar to schema if provided in connection info + - Removed (view) label on views ## 2.4.2 ### December 27, 2017 -* Fixed generic schema info query for case-sensitive collation +- Fixed generic schema info query for case-sensitive collation ## 2.4.1 ### December 3, 2017 -* Fixed disappearing data table after vis resize +- Fixed disappearing data table after vis resize ## 2.4.0 ### December 3, 2017 -* Added resizable panes to query editor -* Added SQL formatter to query editor (KochamCie) -* Added clone query button to query editor -* Added prompt when navigating away from unsaved query edits -* Redesigned bar charts in data grid to a more minimal design -* Redesigned query editor nav bar - * Brings query name input out of modal - * Adds unsaved changes indicator to save button - * Adds shortcut/tip documentation to modal - * Uses nav links instead of buttons for less visual noise -* Updated editor shortcuts - * Running query now `ctrl+return` or `command+return` - * Format query with `shift+return` -* Updated tauCharts to latest version -* Implemented react-router & fix unnecessary page loads on navigation -* Bundled remaining vendor JavaScript libs -* Removed external font-awesome dependency from CDN -* Fixed bigint handling for MySQL -* Fixed date display in charts -* Fixed date display for MySQL -* Fixed cell content not expanding when cell is expanded -* Fixed unintended page refresh on editor sidebar link clicks -* Fixed layout bugs from flexbox -* Lots of misc front-end refactoring +- Added resizable panes to query editor +- Added SQL formatter to query editor (KochamCie) +- Added clone query button to query editor +- Added prompt when navigating away from unsaved query edits +- Redesigned bar charts in data grid to a more minimal design +- Redesigned query editor nav bar + - Brings query name input out of modal + - Adds unsaved changes indicator to save button + - Adds shortcut/tip documentation to modal + - Uses nav links instead of buttons for less visual noise +- Updated editor shortcuts + - Running query now `ctrl+return` or `command+return` + - Format query with `shift+return` +- Updated tauCharts to latest version +- Implemented react-router & fix unnecessary page loads on navigation +- Bundled remaining vendor JavaScript libs +- Removed external font-awesome dependency from CDN +- Fixed bigint handling for MySQL +- Fixed date display in charts +- Fixed date display for MySQL +- Fixed cell content not expanding when cell is expanded +- Fixed unintended page refresh on editor sidebar link clicks +- Fixed layout bugs from flexbox +- Lots of misc front-end refactoring ## 2.3.2 ### October 21, 2017 -* Fix --base-url config use -* Refactored layout styling to use flexbox css +- Fix --base-url config use +- Refactored layout styling to use flexbox css ## 2.3.1 ### October 7, 2017 -* Force no-cache on fetch requests (fixes some odd IE issues) -* Fix docker entry point +- Force no-cache on fetch requests (fixes some odd IE issues) +- Fix docker entry point ## 2.3.0 ### September 4, 2017 -* New features - * Added systemd socket activation support (epeli) - * Added option to disable update check - * Resizable data grid columns (slightly buggy) -* Fixes - * Fixes MySQL schema sidebar showing extra dbs - * Fixes loss of precision of numbers in UI grid (even if they were text) - * Fixes Presto driver - * Fixes React deprecation warnings - * Fixes incorrect date display in UI - * All dates were being localized. now displayed without localization -* Compatibility notes - * Node v6.x now required at minimum +- New features + - Added systemd socket activation support (epeli) + - Added option to disable update check + - Resizable data grid columns (slightly buggy) +- Fixes + - Fixes MySQL schema sidebar showing extra dbs + - Fixes loss of precision of numbers in UI grid (even if they were text) + - Fixes Presto driver + - Fixes React deprecation warnings + - Fixes incorrect date display in UI + - All dates were being localized. now displayed without localization +- Compatibility notes + - Node v6.x now required at minimum ## 2.2.0 ### May 29, 2017 -* added SOCKS proxy support for postgres (brysgo) +- added SOCKS proxy support for postgres (brysgo) ## 2.2.0-beta2 ### March 19, 2017 -* fixed version displayed in about modal +- fixed version displayed in about modal ## 2.2.0-beta1 ### March 18, 2017 -* fixed query tag weirdness from previous v1 weirdness -* leading 0s preserved in query results and treated as strings instead of numbers -* support for postgres ssl certs (johicks and nikicat) -* fixed crate v1 schema support (mikethebeer) -* naive autocomplete -* refactored connection admin screen -* changed build system to fork create-react-app +- fixed query tag weirdness from previous v1 weirdness +- leading 0s preserved in query results and treated as strings instead of numbers +- support for postgres ssl certs (johicks and nikicat) +- fixed crate v1 schema support (mikethebeer) +- naive autocomplete +- refactored connection admin screen +- changed build system to fork create-react-app ## 2.1.3 ### January 28, 2017 -* Ensure strict db startup order (vweevers) -* Improve query editor performance/reduce SQL editor lag +- Ensure strict db startup order (vweevers) +- Improve query editor performance/reduce SQL editor lag ## 2.1.2 ### December 9, 2016 -* Fix chart only view not displaying charts -* Fix query editor search -* Update dependencies +- Fix chart only view not displaying charts +- Fix query editor search +- Update dependencies ## 2.1.1 ### November 29, 2016 -* Fix: disabling of links on query details modal (vweevers) -* Fix: Vis tab loading indicator behaves same as query tab, hiding error on rerun (vweevers) -* Fix: Charts rendered lazily. Query result grid loads faster, large query results won't lock browser until you try to chart. (vweevers) -* Fix: Hide local auth form if DISABLE_USERPASS_AUTH=true +- Fix: disabling of links on query details modal (vweevers) +- Fix: Vis tab loading indicator behaves same as query tab, hiding error on rerun (vweevers) +- Fix: Charts rendered lazily. Query result grid loads faster, large query results won't lock browser until you try to chart. (vweevers) +- Fix: Hide local auth form if DISABLE_USERPASS_AUTH=true ## 2.1.0 ### November 20, 2016 -* run https via sqlpad directly (see additional setting) (jameswinegar) -* Support non English characters when downloading files (askluyao) -* render booleans/null timestamps properly +- run https via sqlpad directly (see additional setting) (jameswinegar) +- Support non English characters when downloading files (askluyao) +- render booleans/null timestamps properly ## 2.0.0 ### October 12, 2016 -* (See beta 1 - 3 release notes) +- (See beta 1 - 3 release notes) ## 2.0.0-beta3 ### October 11, 2016 -* Password reset/forogot password functionality added - * Admins may generate reset links manually - * If smtp is set up forgot password link is enabled -* EMAIL -* Configuration: - * Checklist added for OAuth and Email - * Item is disabled in UI if value is provided by environment or cli - * sensitive values are only masked if environment variables +- Password reset/forogot password functionality added + - Admins may generate reset links manually + - If smtp is set up forgot password link is enabled +- EMAIL +- Configuration: + - Checklist added for OAuth and Email + - Item is disabled in UI if value is provided by environment or cli + - sensitive values are only masked if environment variables ## 2.0.0-beta2 ### September 19, 2016 -* Move to single-page-app architecture -* New query loading animation -* Title and export options added to chart/table only views -* Add Presto DB support -* Basic Auth available for non-admin api -* More performance improvements -* Misc bug fixes -* More code cleanup +- Move to single-page-app architecture +- New query loading animation +- Title and export options added to chart/table only views +- Add Presto DB support +- Basic Auth available for non-admin api +- More performance improvements +- Misc bug fixes +- More code cleanup ## 2.0.0-beta1 ### September 1, 2016 -* UI design updates _everywhere_ -* Query Listing: - * preview query contents by hovering over query listing - * occassional search/filter weirdness has been fixed -* Query Editor: - * Schema sidebar no longer separates views and tables in hierarchy - * New result grid - * inline bar plot rendered for numeric values - * display issues fixed for certain browsers - * New tags widget for cleaner input - * Browser tab name now reflects query name - * Updated taucharts library with stacked bar charts - * Line and Scatterplot charts may have chart filters enabled - * 'show advanced settings' in vis editor now has a few advanced settings depending on chart (y min/max, show trendline, show filter) - * switching between sql/vis tabs won't reset chart series toggles - * table/chart only links may be set to no longer require login (see configuration page) -* Configuration: - * Specific config inputs and labels - no more open ended key/value inputs - * Current environment config documented with assistive popovers -* Update notification moved in-app -* Under the hood - * updated all the code dependencies - * reworked some foundation code for easier future development -* Known issues / not yet implemented: - * Query tag input does not allow creation - * Query auto-refresh not yet implemented +- UI design updates _everywhere_ +- Query Listing: + - preview query contents by hovering over query listing + - occassional search/filter weirdness has been fixed +- Query Editor: + - Schema sidebar no longer separates views and tables in hierarchy + - New result grid + - inline bar plot rendered for numeric values + - display issues fixed for certain browsers + - New tags widget for cleaner input + - Browser tab name now reflects query name + - Updated taucharts library with stacked bar charts + - Line and Scatterplot charts may have chart filters enabled + - 'show advanced settings' in vis editor now has a few advanced settings depending on chart (y min/max, show trendline, show filter) + - switching between sql/vis tabs won't reset chart series toggles + - table/chart only links may be set to no longer require login (see configuration page) +- Configuration: + - Specific config inputs and labels - no more open ended key/value inputs + - Current environment config documented with assistive popovers +- Update notification moved in-app +- Under the hood + - updated all the code dependencies + - reworked some foundation code for easier future development +- Known issues / not yet implemented: + - Query tag input does not allow creation + - Query auto-refresh not yet implemented ## 1.17.0 -* empty postgres queries (like executing a comment only) no longer crash sqlpad -* materialized views are included in schema sidebar for postgres +- empty postgres queries (like executing a comment only) no longer crash sqlpad +- materialized views are included in schema sidebar for postgres ## 1.16.0 -* SQLPad may now be mounted under a base url path by providing --base-url cli flag or SQLPAD_BASE_URL env variable -* Updated taucharts to 0.9.1 -* Legends are now included when saving png chart images +- SQLPad may now be mounted under a base url path by providing --base-url cli flag or SQLPAD_BASE_URL env variable +- Updated taucharts to 0.9.1 +- Legends are now included when saving png chart images ## 1.15.0 -* Many client-side and server-side dependencies updated -* Add ability to bind to a specific IP address via the --ip flag or the SQLPAD_IP environment variable -* Removed sort inputs for bar charts. (Chart sort may instead be influenced using ORDER BY in SQL query.) +- Many client-side and server-side dependencies updated +- Add ability to bind to a specific IP address via the --ip flag or the SQLPAD_IP environment variable +- Removed sort inputs for bar charts. (Chart sort may instead be influenced using ORDER BY in SQL query.) ## 1.14.0 -* Add ability to turn off date localization (add config item "localize" set to "false") +- Add ability to turn off date localization (add config item "localize" set to "false") ## 1.13.0 -* Add --debug flag to SQLPad cli to enable extra logging -* Port and passphrase may be set via environment variables SQLPAD_PORT and SQLPAD_PASSPHRASE +- Add --debug flag to SQLPad cli to enable extra logging +- Port and passphrase may be set via environment variables SQLPAD_PORT and SQLPAD_PASSPHRASE ## 1.12.0 -* Add support for Crate.io +- Add support for Crate.io ## 1.11.0 -* Auto-refresh query every x seconds -* Fix crash when unregistered user tries to log in +- Auto-refresh query every x seconds +- Fix crash when unregistered user tries to log in ## 1.10.0 -* MySQL connections can now old/insecure pre 4.1 auth system -* links now available to display just the chart or data grid +- MySQL connections can now old/insecure pre 4.1 auth system +- links now available to display just the chart or data grid ## 1.9.0 -* Charting now handled by the very cool tauCharts library. It's a bit faster, has facets, grammar of graphics concepts, handles time series data better, trendlines. -* When changing chart types, SQLPad will remember and reapply the field selections where applicable. -* SQLPad database files compacted every 10 minutes, instead of once a day -* Signup page styling is fixed. -* Schema-item-name copy-to-clipboard buttons now available. Opt in by creating configuration item `showSchemaCopyButton` to `true`. -* Query results can now be downloaded as xlsx file. (link will be hidden if csv downloads are disabled) +- Charting now handled by the very cool tauCharts library. It's a bit faster, has facets, grammar of graphics concepts, handles time series data better, trendlines. +- When changing chart types, SQLPad will remember and reapply the field selections where applicable. +- SQLPad database files compacted every 10 minutes, instead of once a day +- Signup page styling is fixed. +- Schema-item-name copy-to-clipboard buttons now available. Opt in by creating configuration item `showSchemaCopyButton` to `true`. +- Query results can now be downloaded as xlsx file. (link will be hidden if csv downloads are disabled) ## 1.8.2 -* Connection password no longer visible on connection screen. +- Connection password no longer visible on connection screen. ## 1.8.1 -* Duplicate content headers prevented when csv filename contains comma. +- Duplicate content headers prevented when csv filename contains comma. ## 1.8.0 -* Authentication now managed by Passport.js -* Username/Password authenication strategy can be disabled by setting environment variable DISABLE_USERPASS_AUTH -* Google OAuth strategy can be enabled by setting GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and PUBLIC_URL environment variables -* Query can be posted to Slack webhook when saved. To enable, create configuration item with key "slackWebhook", and set the value to a Slack incoming WebHook URL. -* Whitelist domains for username administration by setting environment variable WHITELISTED_DOMAINS -* Query connection now selected by default if only one exists +- Authentication now managed by Passport.js +- Username/Password authenication strategy can be disabled by setting environment variable DISABLE_USERPASS_AUTH +- Google OAuth strategy can be enabled by setting GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and PUBLIC_URL environment variables +- Query can be posted to Slack webhook when saved. To enable, create configuration item with key "slackWebhook", and set the value to a Slack incoming WebHook URL. +- Whitelist domains for username administration by setting environment variable WHITELISTED_DOMAINS +- Query connection now selected by default if only one exists ## 1.7.0 -* Tags now look like tags -* Typeahead added for easy tag creation +- Tags now look like tags +- Typeahead added for easy tag creation ## 1.6.0 -* Code cleanup +- Code cleanup ## 1.5.1 -* remove console logging used for debugging +- remove console logging used for debugging ## 1.5.0 -* Vertica now supported via Vertica driver -* CSVs no longer generated if disabled -* optimizations made to schema-info processing +- Vertica now supported via Vertica driver +- CSVs no longer generated if disabled +- optimizations made to schema-info processing ## 1.4.1 -* improved db tree/schema info performance +- improved db tree/schema info performance ## 1.4.0 -* Charts can be saved as images +- Charts can be saved as images ## 1.3.0 -* work-around to handle multiple statements using postgres driver -* fix to provide MAX_SAFE_INTEGER if not defined +- work-around to handle multiple statements using postgres driver +- fix to provide MAX_SAFE_INTEGER if not defined ## 1.2.1 -* query results are limited to 50,000 records. This can be changed by adding a configuration key "queryResultMaxRows" and providing the number of max rows you would like returned. -* Minor bugfixes -* Text selection enabled on query results -* schema information now cached -* connection port is optional in UI +- query results are limited to 50,000 records. This can be changed by adding a configuration key "queryResultMaxRows" and providing the number of max rows you would like returned. +- Minor bugfixes +- Text selection enabled on query results +- schema information now cached +- connection port is optional in UI ## 1.2.0 -* Added port property to connections -* Configuration system has been added -* CSV downloads can be disabled via configuration. Add new item with key "allowCsvDownload" with value "false" to disable. +- Added port property to connections +- Configuration system has been added +- CSV downloads can be disabled via configuration. Add new item with key "allowCsvDownload" with value "false" to disable. ## 1.1.0 -* Add initial Vertica support via use of Postgres driver +- Add initial Vertica support via use of Postgres driver ## 1.0.0 -* SQLPad is released +- SQLPad is released diff --git a/README.md b/README.md index 80b93813a..d1cd41694 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ See [docker-validation](https://github.com/rickbergfalk/sqlpad/tree/master/docke ## Building - Clone/download this repo -- Install node 8 or later ([nvm recommended](https://github.com/creationix/nvm)) +- Install node 10 or later ([nvm recommended](https://github.com/creationix/nvm)) - Ensure you have the latest npm ```sh diff --git a/server/package.json b/server/package.json index 2ccefeef2..87e059a20 100644 --- a/server/package.json +++ b/server/package.json @@ -4,7 +4,7 @@ "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" }, "keywords": [ "sql", @@ -27,7 +27,7 @@ "url": "https://github.com/rickbergfalk/sqlpad/issues" }, "scripts": { - "prepublishOnly": "../scripts/build.sh", + "prepublishOnly": "cd .. && ./scripts/build.sh", "start": "node-dev server.js --dir ../db --port 3010 --debug --base-url '/sqlpad'", "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_TEST='true' mocha test --timeout 10000 --recursive --exit", "fixlint": "eslint --fix '**/*.js'", From bfb7e44afdcc9e0239fb5c8374a07af2eeca0796 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Jun 2019 20:37:56 -0400 Subject: [PATCH 073/855] 3.1.0-beta.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index d34974596..0d2aed312 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "0.1.0", + "version": "3.1.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 42daaf0e8..53ee56e6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "0.1.0", + "version": "3.1.0-beta.0", "private": true, "devDependencies": { "husky": "^1.3.1", From 6177bc589242897f28eac3ba0f0ad14df7ee529c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Jun 2019 20:40:51 -0400 Subject: [PATCH 074/855] Update server package.json --- server/package-lock.json | 2 +- server/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index db99ae389..17a8f4788 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "2.8.0", + "version": "3.0.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index 87e059a20..e96eb9c33 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "2.8.0", + "version": "3.0.0-beta.0", "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { From d1379f7592c0405a50019f543393e97e7d4c9b09 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Jun 2019 20:46:19 -0400 Subject: [PATCH 075/855] 3.0.0-beta.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d2aed312..1f9d22733 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "3.1.0-beta.0", + "version": "3.0.0-beta.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 53ee56e6d..7b00c3c57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "3.1.0-beta.0", + "version": "3.0.0-beta.1", "private": true, "devDependencies": { "husky": "^1.3.1", From a05221425e0dd79abfb1dd4e3ed98691ed634042 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Jun 2019 20:47:06 -0400 Subject: [PATCH 076/855] 3.0.0-beta.1 --- server/package-lock.json | 2 +- server/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 17a8f4788..0ee51839e 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "3.0.0-beta.0", + "version": "3.0.0-beta.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index e96eb9c33..648231988 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "3.0.0-beta.0", + "version": "3.0.0-beta.1", "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { From b779148729501d860cfc36094a1302ba22cd7cb9 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 29 Jun 2019 02:01:49 -0400 Subject: [PATCH 077/855] Project page updates New blogs page (not going to blog just need a place for posts). New screenshot and removal of old. Link updates. etc. --- docs-source/content/_index.md | 87 ++---- docs-source/content/posts/_index.md | 5 +- .../installation-and-administration.md | 0 docs-source/content/posts/version-3-beta.md | 26 ++ docs-source/layouts/_default/baseof.html | 9 +- docs-source/layouts/_default/list.html | 56 +++- docs-source/layouts/_default/single.html | 23 +- .../static/images/screenshots/v3-beta.png | Bin 0 -> 1138834 bytes docs/categories/index.html | 52 +++- docs/images/screenshots/v3-beta.png | Bin 0 -> 1138834 bytes docs/index.html | 93 ++---- docs/index.xml | 19 +- docs/posts/index.html | 62 +++- docs/posts/index.xml | 31 +- .../index.html | 267 ++++++++++++++++++ docs/posts/version-3-beta/index.html | 151 ++++++++++ docs/sitemap.xml | 7 +- docs/tags/index.html | 52 +++- 18 files changed, 742 insertions(+), 198 deletions(-) rename docs-source/content/{ => posts}/installation-and-administration.md (100%) create mode 100644 docs-source/content/posts/version-3-beta.md create mode 100644 docs-source/static/images/screenshots/v3-beta.png create mode 100644 docs/images/screenshots/v3-beta.png create mode 100644 docs/posts/installation-and-administration/index.html create mode 100644 docs/posts/version-3-beta/index.html diff --git a/docs-source/content/_index.md b/docs-source/content/_index.md index 5b990cd11..e9205a656 100644 --- a/docs-source/content/_index.md +++ b/docs-source/content/_index.md @@ -1,5 +1,5 @@ --- -title: "My First Post" +title: "SQLPad" date: 2018-01-27T10:36:46-05:00 draft: false --- @@ -10,15 +10,11 @@ draft: false

    SQLPad

    -

    Run SQL in your browser...

    -

    SQLPad Query Editor

    -
    -
    -

    ... and chart the results.

    -

    SQLPad Line Chart

    +

    Run SQL in your browser and chart the results

    +

    SQLPad Query Editor

    - Supports Postgres, MySQL, SQL Server,
    Vertica, Crate, and Presto. + Supports
    Postgres, MySQL, SQL Server,
    Vertica, Crate, Presto, SAP Hana,
    Apache Drill, and Cassandra (kinda).

    @@ -64,61 +60,7 @@ draft: false
    - - -
    -
    More Screenshots
    -
    -
    - - SQLPad Line Chart - -
    -
    - - SQLPad Scatterplot Chart - -
    -
    -
    -
    - - SQLPad Horizontal Bar Chart - -
    -
    - - SQLPad Stacked Bar Chart - -
    -
    -
    -
    - - SQLPad Query List - -
    -
    - - SQLPad Connections - -
    -
    -
    -
    - - SQLPad User Admin - -
    -
    - - SQLPad Configuration - -
    -
    -
    - - +
    @@ -127,12 +69,12 @@ draft: false
    Installation

    - Installing SQLPad is as simple as installing Node.js - and running npm install sqlpad -g at a command prompt. + Installing SQLPad is as simple as installing Node.js + and running npm install sqlpad -g at a command prompt.

    - For more details on installing and running a SQLPad instance, - see the Installation and Administration page. + For more details on installing and running a SQLPad instance, + see Installation and Administration page.

    @@ -169,11 +111,14 @@ draft: false
    Is SQLPad For Me?

    SQLPad aims to be a SQL query environment with a focus on exploring and analyzing data via SQL, - and it will likely not adopt a dashboard use case. + and it will not adopt a dashboard use case. If you're looking for open-source dashboard software or something more advanced, - check out Re:dash, - Metabase, - or Caravel. + check out Redash, + Metabase, + or Superset. +

    +

    + SQLPad likely does as much as it'll ever do and could even be considered finished. Development these days is mostly maintenance and cleanup.

    diff --git a/docs-source/content/posts/_index.md b/docs-source/content/posts/_index.md index 31c886732..5d870e2dd 100644 --- a/docs-source/content/posts/_index.md +++ b/docs-source/content/posts/_index.md @@ -1,7 +1,8 @@ --- -title: Main content for posts page +title: News and updates date: 2017-03-23 publishdate: 2017-03-24 --- -This blurb will be on every posts page? +News, updates, posts and such about SQLPad. + diff --git a/docs-source/content/installation-and-administration.md b/docs-source/content/posts/installation-and-administration.md similarity index 100% rename from docs-source/content/installation-and-administration.md rename to docs-source/content/posts/installation-and-administration.md diff --git a/docs-source/content/posts/version-3-beta.md b/docs-source/content/posts/version-3-beta.md new file mode 100644 index 000000000..9c5fe1aa3 --- /dev/null +++ b/docs-source/content/posts/version-3-beta.md @@ -0,0 +1,26 @@ +--- +title: "Version 3 beta now available" +date: 2019-06-25T21:14:48-04:00 +--- + +Version 3 beta has been published to npm & docker. If you've been using the `latest` docker image the last few weeks, you've also been using it. + +When installing via npm referencing exact version or beta tag running the following command `npm install sqlpad@beta -g`. + +SQLPad v3 is backwards-compatible with SQLPad v2 database files, and is mostly a UI redesign/refresh and a large file structure change. Give it a try and if you aren't ready for it roll back to v2 and everything should still work. + +#### Editor-first UI refresh + +UI components previously based on bootstrap UI components are now replaced by custom components. Magenta is embraced as a secondary color. + +Management and listing pages (Queries, connections, users, and configuration) have been moved into side drawers, allowing management and browsing of things without leaving the current query. The query editor is the primary focus of the application. + +Query editor toolbars have been consolidated into a single bar to maximize use of space on the page. + +Unsaved changes to a previously-saved query are now saved, prompting the user to restore on next open. This is not enabled for unsaved changes to "new" queries since it could become an annoyance, but can be added if there is interest. + +Query result chart has been moved to a smaller resizable pane along side the SQL query instead of being placed in a tab. This impacts the size available for the chart, but brings it to the default view, allowing altering of the query without changing tabs. + +The schema sidebar may now be hidden and is now searchable. It has also been rewritten to render large trees efficiently. + +Query result grid no longer has data bars for numeric values since it didn't make sense for all number values. Date value display logic has been altered to only show timestamps if timestamps are detected. When timestamps are shown, the full timestamp from the JavaScript date object is displayed. \ No newline at end of file diff --git a/docs-source/layouts/_default/baseof.html b/docs-source/layouts/_default/baseof.html index f58617986..346b50f7e 100644 --- a/docs-source/layouts/_default/baseof.html +++ b/docs-source/layouts/_default/baseof.html @@ -31,10 +31,10 @@
    - - - Fork me on GitHub - - + + \ No newline at end of file diff --git a/docs/posts/version-3-beta/index.html b/docs/posts/version-3-beta/index.html new file mode 100644 index 000000000..d00ecab6a --- /dev/null +++ b/docs/posts/version-3-beta/index.html @@ -0,0 +1,151 @@ + + + + + + +Version 3 beta now available – SQLPad - A web app for running SQL queries and visualizing the results + + + + + + + + + + + + + + + +
    + +
    + + + + +
    +
    +

    Version 3 beta now available

    +
    +
    + +
    +
    +
    +

    +
    +
    + + +

    Version 3 beta has been published to npm & docker. If you’ve been using the latest docker image the last few weeks, you’ve also been using it.

    + +

    When installing via npm referencing exact version or beta tag running the following command npm install sqlpad@beta -g.

    + +

    SQLPad v3 is backwards-compatible with SQLPad v2 database files, and is mostly a UI redesign/refresh and a large file structure change. Give it a try and if you aren’t ready for it roll back to v2 and everything should still work.

    + +

    Editor-first UI refresh

    + +

    UI components previously based on bootstrap UI components are now replaced by custom components. Magenta is embraced as a secondary color.

    + +

    Management and listing pages (Queries, connections, users, and configuration) have been moved into side drawers, allowing management and browsing of things without leaving the current query. The query editor is the primary focus of the application.

    + +

    Query editor toolbars have been consolidated into a single bar to maximize use of space on the page.

    + +

    Unsaved changes to a previously-saved query are now saved, prompting the user to restore on next open. This is not enabled for unsaved changes to “new” queries since it could become an annoyance, but can be added if there is interest.

    + +

    Query result chart has been moved to a smaller resizable pane along side the SQL query instead of being placed in a tab. This impacts the size available for the chart, but brings it to the default view, allowing altering of the query without changing tabs.

    + +

    The schema sidebar may now be hidden and is now searchable. It has also been rewritten to render large trees efficiently.

    + +

    Query result grid no longer has data bars for numeric values since it didn’t make sense for all number values. Date value display logic has been altered to only show timestamps if timestamps are detected. When timestamps are shown, the full timestamp from the JavaScript date object is displayed.

    + +
    +
    +
    + + + + + +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    Get SQLPad updates in your email
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    Thank You
    +

    + Special thanks to the contributors helping with the SQLPad + development, as well as the creators of all the amazing + open source libraries used to build SQLPad. +

    +

    + Without them this project would not be possible. +

    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 853751785..fa43ef202 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -3,7 +3,12 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> - https://rickbergfalk.github.io/sqlpad/installation-and-administration/ + https://rickbergfalk.github.io/sqlpad/posts/version-3-beta/ + 2019-06-25T21:14:48-04:00 + + + + https://rickbergfalk.github.io/sqlpad/posts/installation-and-administration/ 2018-01-28T11:51:31-05:00 diff --git a/docs/tags/index.html b/docs/tags/index.html index bcbd8222d..9b139cfaf 100644 --- a/docs/tags/index.html +++ b/docs/tags/index.html @@ -31,10 +31,10 @@
    - - - Fork me on GitHub - - + + \ No newline at end of file diff --git a/docs/posts/version-3-beta/index.html b/docs/posts/version-3-beta/index.html index d00ecab6a..b45d6ce6b 100644 --- a/docs/posts/version-3-beta/index.html +++ b/docs/posts/version-3-beta/index.html @@ -49,6 +49,7 @@

    Version 3 beta now available

    +

    June 25, 2019

    @@ -57,7 +58,7 @@

    Version 3 beta now available

    -
    +

    Version 3 beta has been published to npm & docker. If you’ve been using the latest docker image the last few weeks, you’ve also been using it.

    diff --git a/docs/sitemap.xml b/docs/sitemap.xml index fa43ef202..3f64ca9c7 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -2,6 +2,11 @@ + + https://rickbergfalk.github.io/sqlpad/posts/version-3-available/ + 2019-09-02T17:54:50-05:00 + + https://rickbergfalk.github.io/sqlpad/posts/version-3-beta/ 2019-06-25T21:14:48-04:00 From 470077c3cbc0b79a3cc24915086b57c1be01efb7 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Morin Date: Wed, 4 Sep 2019 11:43:31 -0400 Subject: [PATCH 135/855] Added 'EXPOSE 3000' to Dockerfile (#467) --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index a1c0e6fb7..87fada8cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ FROM node:12.3.1-alpine ENV NODE_ENV production +EXPOSE 3000 ENTRYPOINT ["/docker-entrypoint"] WORKDIR /sqlpad From 227b954961f0e6f1a6b76bd20e17a005a32966ba Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 4 Sep 2019 23:29:09 -0500 Subject: [PATCH 136/855] Update dependencies (#468) * Update server and root dependencies * These dependencies work * These updates work too * These work too. d3 is it you? are you the one that breaks the build? * Why does d3 break the build * Fix d3 usage --- client/package-lock.json | 4257 +++++++++-------- client/package.json | 26 +- client/src/common/SqlpadTauChart.js | 3 - .../queryEditor/QueryEditorChartToolbar.js | 1 - package-lock.json | 1713 ++----- package.json | 4 +- server/package-lock.json | 163 +- server/package.json | 14 +- 8 files changed, 2833 insertions(+), 3348 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 72fdd0cc4..18711b3d5 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -5,49 +5,49 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.3.tgz", - "integrity": "sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helpers": "^7.4.3", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -89,26 +89,26 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", + "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { @@ -147,11 +147,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.5.5" } }, "@babel/helper-module-imports": { @@ -163,16 +163,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { @@ -189,11 +189,11 @@ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { @@ -209,14 +209,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/helper-simple-access": { @@ -248,19 +248,19 @@ } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", "requires": { "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -268,9 +268,9 @@ } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -283,24 +283,33 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz", - "integrity": "sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.0", + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-proposal-decorators": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.0.tgz", - "integrity": "sha512-d08TLmXeK/XbgCo7ZeZ+JaeZDtDai/2ctapTRsWWkkmy7G/cqz8DQN/HlWG7RR4YmfXxmExsbU3SuCjlM7AtUg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz", + "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.0", + "@babel/helper-create-class-features-plugin": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-decorators": "^7.2.0" } }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, "@babel/plugin-proposal-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", @@ -311,9 +320,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -419,9 +428,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -437,25 +446,25 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", + "@babel/helper-define-map": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" } @@ -469,9 +478,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -487,9 +496,9 @@ } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -504,9 +513,9 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz", - "integrity": "sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", + "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-flow": "^7.2.0" @@ -546,31 +555,34 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", "requires": { "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", "requires": { "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "requires": { "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { @@ -599,12 +611,12 @@ } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-replace-supers": "^7.5.5" } }, "@babel/plugin-transform-parameters": { @@ -626,9 +638,9 @@ } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", - "integrity": "sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.5.0.tgz", + "integrity": "sha512-c5Ba8cpybZFp1Izkf2sWGuNjOxoQ32tFgBvvYvwGhi4+9f6vGiSK9Gex4uVuO/Va6YJFu41aAh1MzMjUWkp0IQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -662,9 +674,9 @@ } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", - "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", + "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.2.0" @@ -687,9 +699,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.3.tgz", - "integrity": "sha512-7Q61bU+uEI7bCUFReT1NKn7/X6sDQsZ7wL1sJ9IYMAO7cI+eg6x9re1cEw2fCRMbbTVyoeUKWSV1M6azEfKCfg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -698,9 +710,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -747,10 +759,11 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz", - "integrity": "sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz", + "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==", "requires": { + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" } @@ -765,59 +778,45 @@ "regexpu-core": "^4.5.4" } }, - "@babel/polyfill": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", - "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" - } - } - }, "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", + "@babel/plugin-transform-async-to-generator": "^7.5.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", + "@babel/plugin-transform-destructuring": "^7.5.0", "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", "@babel/plugin-transform-for-of": "^7.4.4", "@babel/plugin-transform-function-name": "^7.4.4", "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", "@babel/plugin-transform-modules-umd": "^7.2.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-object-super": "^7.5.5", "@babel/plugin-transform-parameters": "^7.4.4", "@babel/plugin-transform-property-literals": "^7.2.0", "@babel/plugin-transform-regenerator": "^7.4.5", @@ -828,7 +827,7 @@ "@babel/plugin-transform-template-literals": "^7.4.4", "@babel/plugin-transform-typeof-symbol": "^7.2.0", "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.5", "browserslist": "^4.6.0", "core-js-compat": "^3.1.1", "invariant": "^2.2.2", @@ -837,9 +836,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -890,28 +889,28 @@ } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, @@ -935,122 +934,128 @@ "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" }, "@hapi/address": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", - "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.0.tgz", + "integrity": "sha512-ukWwSQ2Kd9rNHFlFd3hAKQTD/O2gYHu90IGl316CHZOGN+Vm+opxWhQ1aG4gfBoP5hjXiBClmck652Pu7/j0cQ==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, "@hapi/hoek": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", - "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==" + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.2.tgz", + "integrity": "sha512-18P3VwngjNEcmvPj1mmiHLPyUPjhPAxIyJKDj4PRIY0F5ac3P0Vd0hkASPyWXHK0rfY3P9N2FoxV8ZuYaRBZ1g==" }, "@hapi/joi": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.0.3.tgz", - "integrity": "sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", "requires": { "@hapi/address": "2.x.x", - "@hapi/hoek": "6.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", "@hapi/topo": "3.x.x" } }, "@hapi/topo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.0.tgz", - "integrity": "sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.3.tgz", + "integrity": "sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ==", "requires": { - "@hapi/hoek": "6.x.x" + "@hapi/hoek": "8.x.x" } }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "requires": { - "@jest/source-map": "^24.3.0", + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", - "pirates": "^4.0.1", "realpath-native": "^1.1.0", "rimraf": "^2.5.4", + "slash": "^2.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "ansi-regex": "^4.1.0" + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" } } } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", - "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -1058,24 +1063,24 @@ "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", + "node-notifier": "^5.4.2", "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" }, "dependencies": { "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -1090,9 +1095,9 @@ } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.1.15", @@ -1112,42 +1117,43 @@ } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", "micromatch": "^3.1.10", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", "slash": "^2.0.0", "source-map": "^0.6.1", @@ -1162,13 +1168,13 @@ } }, "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" + "@types/yargs": "^13.0.0" } }, "@mrmlnc/readdir-enhanced": { @@ -1294,9 +1300,9 @@ "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.0.tgz", - "integrity": "sha512-3eI17Pb3jlg3oqV4Tie069n1SelYKBUpI90txDcnBWk4EGFW+YQGyQjy6iuJAReH0RnpUJ9jUExrt/xniGvhqw==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.1.tgz", + "integrity": "sha512-p6z6JJroP989jHWcuraeWpzdejehTmLUpyC9smhTBWyPN0VVGe2phbYxpPTV7Vh8XzmFrcG55idrnfWn/2oQEw==" }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "4.2.0", @@ -1314,80 +1320,78 @@ "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" }, "@svgr/babel-preset": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.0.tgz", - "integrity": "sha512-Lgy1RJiZumGtv6yJroOxzFuL64kG/eIcivJQ7y9ljVWL+0QXvFz4ix1xMrmjMD+rpJWwj50ayCIcFelevG/XXg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.1.tgz", + "integrity": "sha512-rPFKLmyhlh6oeBv3j2vEAj2nd2QbWqpoJLKzBLjwQVt+d9aeXajVaPNEqrES2spjXKR4OxfgSs7U0NtmAEkr0Q==", "requires": { "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.1", "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", "@svgr/babel-plugin-transform-svg-component": "^4.2.0" } }, "@svgr/core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.0.tgz", - "integrity": "sha512-Ycu1qrF5opBgKXI0eQg3ROzupalCZnSDETKCK/3MKN4/9IEmt3jPX/bbBjftklnRW+qqsCEpO0y/X9BTRw2WBg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.2.tgz", + "integrity": "sha512-N+tP5CLFd1hP9RpO83QJPZY3NL8AtrdqNbuhRgBkjE/49RnMrrRsFm1wY8pueUfAGvzn6tSXUq29o6ah8RuR5w==", "requires": { - "@svgr/plugin-jsx": "^4.3.0", + "@svgr/plugin-jsx": "^4.3.2", "camelcase": "^5.3.1", - "cosmiconfig": "^5.2.0" + "cosmiconfig": "^5.2.1" } }, "@svgr/hast-util-to-babel-ast": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.2.0.tgz", - "integrity": "sha512-IvAeb7gqrGB5TH9EGyBsPrMRH/QCzIuAkLySKvH2TLfLb2uqk98qtJamordRQTpHH3e6TORfBXoTo7L7Opo/Ow==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", + "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", "requires": { - "@babel/types": "^7.4.0" + "@babel/types": "^7.4.4" } }, "@svgr/plugin-jsx": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.0.tgz", - "integrity": "sha512-0ab8zJdSOTqPfjZtl89cjq2IOmXXUYV3Fs7grLT9ur1Al3+x3DSp2+/obrYKUGbQUnLq96RMjSZ7Icd+13vwlQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.2.tgz", + "integrity": "sha512-+1GW32RvmNmCsOkMoclA/TppNjHPLMnNZG3/Ecscxawp051XJ2MkO09Hn11VcotdC2EPrDfT8pELGRo+kbZ1Eg==", "requires": { - "@babel/core": "^7.4.3", - "@svgr/babel-preset": "^4.3.0", - "@svgr/hast-util-to-babel-ast": "^4.2.0", - "rehype-parse": "^6.0.0", - "unified": "^7.1.0", - "vfile": "^4.0.0" + "@babel/core": "^7.4.5", + "@svgr/babel-preset": "^4.3.1", + "@svgr/hast-util-to-babel-ast": "^4.3.2", + "svg-parser": "^2.0.0" } }, "@svgr/plugin-svgo": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.2.0.tgz", - "integrity": "sha512-zUEKgkT172YzHh3mb2B2q92xCnOAMVjRx+o0waZ1U50XqKLrVQ/8dDqTAtnmapdLsGurv8PSwenjLCUpj6hcvw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", + "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", "requires": { - "cosmiconfig": "^5.2.0", + "cosmiconfig": "^5.2.1", "merge-deep": "^3.0.2", - "svgo": "^1.2.1" + "svgo": "^1.2.2" } }, "@svgr/webpack": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", - "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz", + "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==", "requires": { - "@babel/core": "^7.1.6", + "@babel/core": "^7.4.5", "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.1.6", + "@babel/preset-env": "^7.4.5", "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.1.0", - "@svgr/plugin-jsx": "^4.1.0", - "@svgr/plugin-svgo": "^4.0.3", - "loader-utils": "^1.1.0" + "@svgr/core": "^4.3.2", + "@svgr/plugin-jsx": "^4.3.2", + "@svgr/plugin-svgo": "^4.3.1", + "loader-utils": "^1.2.3" } }, "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -1414,13 +1418,18 @@ } }, "@types/babel__traverse": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", - "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", "requires": { "@babel/types": "^7.3.0" } }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", @@ -1443,10 +1452,10 @@ "@types/istanbul-lib-report": "*" } }, - "@types/node": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.4.tgz", - "integrity": "sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw==" + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==" }, "@types/q": { "version": "1.5.2", @@ -1458,60 +1467,56 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "@types/vfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", - "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" - } - }, - "@types/vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", + "@types/yargs": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", "requires": { - "@types/node": "*", - "@types/unist": "*" + "@types/yargs-parser": "*" } }, - "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==" + "@types/yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==" }, "@typescript-eslint/eslint-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.6.0.tgz", - "integrity": "sha512-U224c29E2lo861TQZs6GSmyC0OYeRNg6bE9UVIiFBxN2MlA0nq2dCrgIVyyRbC05UOcrgf2Wk/CF2gGOPQKUSQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", + "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", "requires": { - "@typescript-eslint/parser": "1.6.0", - "@typescript-eslint/typescript-estree": "1.6.0", - "requireindex": "^1.2.0", + "@typescript-eslint/experimental-utils": "1.13.0", + "eslint-utils": "^1.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", "tsutils": "^3.7.0" } }, + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + } + }, "@typescript-eslint/parser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.6.0.tgz", - "integrity": "sha512-VB9xmSbfafI+/kI4gUK3PfrkGmrJQfh0N4EScT1gZXSZyUxpsBirPL99EWZg9MmPG0pzq/gMtgkk7/rAHj4aQw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", + "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", "requires": { - "@typescript-eslint/typescript-estree": "1.6.0", - "eslint-scope": "^4.0.0", + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "1.13.0", + "@typescript-eslint/typescript-estree": "1.13.0", "eslint-visitor-keys": "^1.0.0" } }, "@typescript-eslint/typescript-estree": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.6.0.tgz", - "integrity": "sha512-A4CanUwfaG4oXobD5y7EXbsOHjCwn8tj1RDd820etpPAjH+Icjc2K9e/DQM1Hac5zH2BSy+u6bjvvF2wwREvYA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", "requires": { "lodash.unescape": "4.0.1", "semver": "5.5.0" @@ -1693,9 +1698,9 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz", + "integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==" }, "accepts": { "version": "1.3.7", @@ -1707,43 +1712,64 @@ } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==" - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==" }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", + "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + } } }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==" }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", + "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==" + }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + } + } }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -1757,9 +1783,9 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" }, "alphanum-sort": { "version": "1.0.2", @@ -1825,6 +1851,11 @@ "commander": "^2.11.0" } }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -1921,27 +1952,11 @@ } }, "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "requires": { - "object-assign": "^4.1.1", "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } } }, "assert-plus": { @@ -1975,9 +1990,9 @@ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "asynckit": { "version": "0.4.0", @@ -1990,16 +2005,24 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", - "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", "requires": { - "browserslist": "^4.5.4", - "caniuse-lite": "^1.0.30000957", + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.14", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" + } } }, "aws-sign2": { @@ -2073,9 +2096,9 @@ } }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz", + "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==", "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.0.0", @@ -2105,60 +2128,68 @@ } }, "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", + "babel-preset-jest": "^24.9.0", "chalk": "^2.4.2", "slash": "^2.0.0" } }, "babel-loader": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", - "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "requires": { "find-cache-dir": "^2.0.0", "loader-utils": "^1.0.2", "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } } }, "babel-plugin-dynamic-import-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", - "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "requires": { "object.assign": "^4.1.0" } }, "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", "requires": { + "@babel/helper-plugin-utils": "^7.0.0", "find-up": "^3.0.0", "istanbul-lib-instrument": "^3.3.0", "test-exclude": "^5.2.3" } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", "requires": { "@types/babel__traverse": "^7.0.6" } }, "babel-plugin-macros": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz", - "integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", + "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", "requires": { "@babel/runtime": "^7.4.2", "cosmiconfig": "^5.2.0", @@ -2166,9 +2197,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -2176,9 +2207,9 @@ } }, "babel-plugin-named-asset-import": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.2.tgz", - "integrity": "sha512-CxwvxrZ9OirpXQ201Ec57OmGhmI8/ui/GwTDy0hSp6CmRvgRC0pSair6Z04Ck+JStA0sMPZzSJ3uE4n17EXpPQ==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.3.tgz", + "integrity": "sha512-1XDRysF4894BUdMChT+2HHbtJYiO7zx5Be7U6bT8dISy7OdyETMGIAQBMPQCsY1YRf0xcubwnKKaDr5bk15JTA==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2200,138 +2231,44 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "babel-plugin-jest-hoist": "^24.9.0" } }, "babel-preset-react-app": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.0.tgz", - "integrity": "sha512-YVsDA8HpAKklhFLJtl9+AgaxrDaor8gGvDFlsg1ByOS0IPGUovumdv4/gJiAnLcDmZmKlH6+9sVOz4NVW7emAg==", - "requires": { - "@babel/core": "7.4.3", - "@babel/plugin-proposal-class-properties": "7.4.0", - "@babel/plugin-proposal-decorators": "7.4.0", - "@babel/plugin-proposal-object-rest-spread": "7.4.3", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.1.tgz", + "integrity": "sha512-v7MeY+QxdBhM9oU5uOQCIHLsErYkEbbjctXsb10II+KAnttbe0rvprvP785dRxfa9dI4ZbsGXsRU07Qdi5BtOw==", + "requires": { + "@babel/core": "7.5.5", + "@babel/plugin-proposal-class-properties": "7.5.5", + "@babel/plugin-proposal-decorators": "7.4.4", + "@babel/plugin-proposal-object-rest-spread": "7.5.5", "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-classes": "7.4.3", - "@babel/plugin-transform-destructuring": "7.4.3", - "@babel/plugin-transform-flow-strip-types": "7.4.0", - "@babel/plugin-transform-react-constant-elements": "7.2.0", + "@babel/plugin-transform-destructuring": "7.5.0", + "@babel/plugin-transform-flow-strip-types": "7.4.4", "@babel/plugin-transform-react-display-name": "7.2.0", - "@babel/plugin-transform-runtime": "7.4.3", - "@babel/preset-env": "7.4.3", + "@babel/plugin-transform-runtime": "7.5.5", + "@babel/preset-env": "7.5.5", "@babel/preset-react": "7.0.0", "@babel/preset-typescript": "7.3.3", - "@babel/runtime": "7.4.3", - "babel-plugin-dynamic-import-node": "2.2.0", - "babel-plugin-macros": "2.5.1", + "@babel/runtime": "7.5.5", + "babel-plugin-dynamic-import-node": "2.3.0", + "babel-plugin-macros": "2.6.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz", - "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz", - "integrity": "sha512-PUaIKyFUDtG6jF5DUJOfkBdwAS/kFFV3XFk7Nn0a6vR7ZT8jYw5cGtIlat77wcnd0C6ViGqo/wyNf4ZHytF/nQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz", - "integrity": "sha512-rVTLLZpydDFDyN4qnXdzwoVpk1oaXHIvPEOkOLyr88o7oHxVc/LyrnDx+amuBWGOwUb7D1s/uLsKBNTx08htZg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/preset-env": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.3.tgz", - "integrity": "sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.0", - "@babel/plugin-transform-classes": "^7.4.3", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.3", - "@babel/plugin-transform-dotall-regex": "^7.4.3", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.3", - "@babel/plugin-transform-function-name": "^7.4.3", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.3", - "@babel/plugin-transform-modules-systemjs": "^7.4.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", - "@babel/plugin-transform-new-target": "^7.4.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.3", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.3", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.3", - "@babel/types": "^7.4.0", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "requires": { "regenerator-runtime": "^0.13.2" } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -2361,11 +2298,6 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, - "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2427,9 +2359,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "batch": { "version": "0.6.1", @@ -2656,19 +2588,19 @@ } }, "browserslist": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.1.tgz", - "integrity": "sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", "requires": { - "caniuse-lite": "^1.0.30000971", - "electron-to-chromium": "^1.3.137", - "node-releases": "^1.1.21" + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" } }, "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", "requires": { "node-int64": "^0.4.0" } @@ -2722,24 +2654,40 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "requires": { - "bluebird": "^3.5.3", + "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", + "glob": "^7.1.4", "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "cache-base": { @@ -2810,9 +2758,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000971", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", - "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==" + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==" }, "capture-exit": { "version": "2.0.0", @@ -2832,11 +2780,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==" - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2853,9 +2796,9 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -3352,6 +3295,25 @@ } } }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3360,9 +3322,9 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" }, "chrome-trace-event": { "version": "1.0.2", @@ -3441,13 +3403,25 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } } }, "clone-deep": { @@ -3492,9 +3466,9 @@ } }, "color": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", - "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "requires": { "color-convert": "^1.9.1", "color-string": "^1.5.2" @@ -3530,11 +3504,6 @@ "delayed-stream": "~1.0.0" } }, - "comma-separated-tokens": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz", - "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==" - }, "commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", @@ -3555,6 +3524,14 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "requires": { + "arity-n": "^1.0.4" + } + }, "compressible": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", @@ -3611,12 +3588,41 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "confusing-browser-globals": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.7.tgz", - "integrity": "sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", + "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -3699,32 +3705,19 @@ } }, "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", + "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" }, "core-js-compat": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.3.tgz", - "integrity": "sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.3", - "semver": "^6.1.0" - }, - "dependencies": { - "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" - } + "browserslist": "^4.6.6", + "semver": "^6.3.0" } }, - "core-js-pure": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.3.tgz", - "integrity": "sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -3812,6 +3805,24 @@ "randomfill": "^1.0.3" } }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "css-blank-pseudo": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", @@ -3910,11 +3921,11 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", "requires": { - "mdn-data": "~1.1.0", + "mdn-data": "2.0.4", "source-map": "^0.5.3" } }, @@ -3923,11 +3934,6 @@ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" - }, "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", @@ -4030,18 +4036,23 @@ "mdn-data": "~1.1.0", "source-map": "^0.5.3" } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" } } }, "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==" + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "requires": { "cssom": "0.3.x" } @@ -4051,10 +4062,19 @@ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "d3": { - "version": "5.9.7", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.9.7.tgz", - "integrity": "sha512-jENytrmdXtGPw7HuSK2S4gxRM1eUGjKvWQkQ6ct4yK+DB8SG3VcnVrwesfnsv8rIcxMUg18TafT4Q8mOZUMP4Q==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.11.0.tgz", + "integrity": "sha512-LXgMVUAEAzQh6WfEEOa8tJX4RA64ZJ6twC3CJ+Xzid+fXWLTZkkglagXav/eOoQgzQi5rzV0xC4Sfspd6hFDHA==", "requires": { "d3-array": "1", "d3-axis": "1", @@ -4262,9 +4282,9 @@ } }, "d3-scale-chromatic": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", - "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", "requires": { "d3-color": "1", "d3-interpolate": "1" @@ -4320,9 +4340,9 @@ "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" }, "d3-zoom": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.3.tgz", - "integrity": "sha512-xEBSwFx5Z9T3/VrwDkMt+mr0HCzv7XjpGURJ8lWmIC8wxe32L39eWHIasEe/e7Ox8MPU4p1hvH8PKN2olLzIBg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", "requires": { "d3-dispatch": "1", "d3-drag": "1", @@ -4390,9 +4410,17 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } }, "deep-is": { "version": "0.1.3", @@ -4556,9 +4584,9 @@ "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" }, "diffie-hellman": { "version": "5.0.3", @@ -4618,12 +4646,19 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } } }, "domain-browser": { @@ -4680,14 +4715,29 @@ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" }, "downshift": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-3.2.10.tgz", - "integrity": "sha512-fEYNbV/qDLUHTxF9wALNe51Xe5zauUhy2sqgYG1CtmAfUFMI30UuSaisU8CD0DEsFSIsaEvsVgtabb6nTEhtaA==", + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-3.2.13.tgz", + "integrity": "sha512-vR6NRUH5KojyVH1FKXLrHMkDhS9Ou1vcBb/KuY32YxmOk0kHLtaTASWpUwGL4fqHldvE8Wc8gGtKfhtJcY1DFg==", "requires": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.4.5", "compute-scroll-into-view": "^1.0.9", - "prop-types": "^15.6.0", - "react-is": "^16.5.2" + "prop-types": "^15.7.2", + "react-is": "^16.9.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "react-is": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" + } } }, "duplexer": { @@ -4704,6 +4754,35 @@ "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "ecc-jsbn": { @@ -4727,14 +4806,14 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.143", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.143.tgz", - "integrity": "sha512-J9jOpxIljQZlV6GIP2fwAWq0T69syawU0sH3EW3O2Bgxquiy+veeIT5mBDRz+i3oHUSL1tvVgRKH3/4QiQh9Pg==" + "version": "1.3.252", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz", + "integrity": "sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg==" }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -4779,9 +4858,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" }, "errno": { "version": "0.1.7", @@ -4800,16 +4879,20 @@ } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.1.tgz", + "integrity": "sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA==", "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", "has": "^1.0.3", + "has-symbols": "^1.0.0", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.0.0", + "string.prototype.trimright": "^2.0.0" } }, "es-to-primitive": { @@ -4822,6 +4905,35 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.51" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4833,9 +4945,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -4858,52 +4970,62 @@ } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", + "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^5.0.0", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4913,29 +5035,24 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, "eslint-config-prettier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz", + "integrity": "sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ==", "dev": true, "requires": { "get-stdin": "^6.0.0" } }, "eslint-config-react-app": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-4.0.1.tgz", - "integrity": "sha512-ZsaoXUIGsK8FCi/x4lT2bZR5mMkL/Kgj+Lnw690rbvvUr/uiwgFiD8FcfAhkCycm7Xte6O5lYz4EqMx2vX7jgw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.1.tgz", + "integrity": "sha512-GYXP3F/0PSHlYfGHhahqnJze8rYKxzXgrzXVqRRd4rDO40ga4NA3aHM7/HKbwceDN0/C1Ij3BoAWFawJgRbXEw==", "requires": { - "confusing-browser-globals": "^1.0.7" + "confusing-browser-globals": "^1.0.8" } }, "eslint-import-resolver-node": { @@ -4963,9 +5080,9 @@ } }, "eslint-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", - "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", "requires": { "loader-fs-cache": "^1.0.0", "loader-utils": "^1.0.2", @@ -4975,9 +5092,9 @@ } }, "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", "requires": { "debug": "^2.6.8", "pkg-dir": "^2.0.0" @@ -5045,28 +5162,29 @@ } }, "eslint-plugin-flowtype": { - "version": "2.50.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", - "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", + "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.15" } }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-module-utils": "^2.4.0", "has": "^1.0.3", - "lodash": "^4.17.11", "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.11.0" }, "dependencies": { "debug": { @@ -5188,10 +5306,11 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", - "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", "requires": { + "@babel/runtime": "^7.4.5", "aria-query": "^3.0.0", "array-includes": "^3.0.3", "ast-types-flow": "^0.0.7", @@ -5199,7 +5318,17 @@ "damerau-levenshtein": "^1.0.4", "emoji-regex": "^7.0.2", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" + "jsx-ast-utils": "^2.2.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + } } }, "eslint-plugin-prettier": { @@ -5212,17 +5341,19 @@ } }, "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", + "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", + "jsx-ast-utils": "^2.1.0", + "object.entries": "^1.1.0", "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "resolve": "^1.10.1" }, "dependencies": { "doctrine": { @@ -5236,9 +5367,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.6.0.tgz", - "integrity": "sha512-lHBVRIaz5ibnIgNG07JNiAuBUeKhEf8l4etNx5vfAEwqQ5tcuK3jV9yjmopPgQDagQb7HwIuQVsE3IVcGrRnag==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" }, "eslint-scope": { "version": "4.0.3", @@ -5250,23 +5381,26 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -5291,14 +5425,14 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -5402,16 +5536,16 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, "express": { @@ -5506,9 +5640,9 @@ } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -5606,6 +5740,27 @@ "is-glob": "^4.0.0", "merge2": "^1.2.3", "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } } }, "fast-json-stable-stringify": { @@ -5619,9 +5774,9 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "requires": { "websocket-driver": ">=0.5.1" } @@ -5748,9 +5903,9 @@ } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" }, "flatten": { "version": "1.0.2", @@ -5764,19 +5919,48 @@ "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" - } - }, - "focus-lock": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.6.5.tgz", - "integrity": "sha512-i/mVBOoa9o+tl+u9owOJUF8k8L85odZNIsctB+JAK2HFT8jckiBwmk+3uydlm6FN8czgnkIwQtBv6yyAbrzXjw==" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "focus-lock": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.6.5.tgz", + "integrity": "sha512-i/mVBOoa9o+tl+u9owOJUF8k8L85odZNIsctB+JAK2HFT8jckiBwmk+3uydlm6FN8czgnkIwQtBv6yyAbrzXjw==" }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.8.1.tgz", + "integrity": "sha512-micCIbldHioIegeKs41DoH0KS3AXfFzgS30qVkM6z/XOE/GJgvmsoc839NUqa1B9udYe9dQxgv7KFwng6+p/dw==", "requires": { - "debug": "^3.2.6" + "debug": "^3.0.0" }, "dependencies": { "debug": { @@ -5808,9 +5992,9 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-ts-checker-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-gqWAEMLlae/oeVnN6RWCAhesOJMswAN1MaKNqhhjXHV5O0/rTUjWI4UbgQHdlrVbCnb+xLotXmJbBlC66QmpFw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", @@ -5823,9 +6007,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -5864,6 +6048,35 @@ "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "fs-extra": { @@ -5885,6 +6098,35 @@ "iferr": "^0.1.5", "imurmurhash": "^0.1.4", "readable-stream": "1 || 2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "fs.realpath": { @@ -5893,9 +6135,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.6.tgz", - "integrity": "sha512-vfmKZp3XPM36DNF0qhW+Cdxk7xm7gTEHY1clv1Xq1arwRQuKZgAhw+NZNWbJBtuaNxzNXwhfdPYRrvIbjfS33A==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", "optional": true }, "function-bind": { @@ -5909,9 +6151,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-node-dimensions": { "version": "1.2.1", @@ -5964,22 +6206,11 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "glob-to-regexp": { @@ -6044,9 +6275,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "growly": { "version": "1.3.0", @@ -6059,12 +6290,19 @@ "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "requires": { "duplexer": "^0.1.1", - "pify": "^3.0.0" + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } } }, "handle-thing": { @@ -6073,9 +6311,9 @@ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.0.tgz", + "integrity": "sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -6161,11 +6399,6 @@ "kind-of": "^4.0.0" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -6194,34 +6427,6 @@ "minimalistic-assert": "^1.0.1" } }, - "hast-util-from-parse5": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.1.tgz", - "integrity": "sha512-UfPzdl6fbxGAxqGYNThRUhRlDYY7sXu6XU9nQeX4fFZtV+IHbyEJtd+DUuwOqNV4z3K05E/1rIkoVr/JHmeWWA==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, - "hast-util-parse-selector": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz", - "integrity": "sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw==" - }, - "hastscript": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.0.tgz", - "integrity": "sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.2.0", - "property-information": "^5.0.1", - "space-separated-tokens": "^1.0.0" - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -6264,9 +6469,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, "hpack.js": { "version": "2.1.6", @@ -6277,6 +6482,35 @@ "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "hsl-regex": { @@ -6354,15 +6588,10 @@ "readable-stream": "^3.1.1" }, "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" } } }, @@ -6384,9 +6613,9 @@ } }, "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==" + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" }, "http-proxy": { "version": "1.17.0", @@ -6522,10 +6751,10 @@ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", @@ -6547,9 +6776,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -6557,28 +6786,13 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "internal-ip": { @@ -6631,6 +6845,11 @@ "kind-of": "^3.0.2" } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6645,9 +6864,9 @@ } }, "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.1.4", @@ -6772,11 +6991,6 @@ "path-is-inside": "^1.0.1" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -6809,9 +7023,9 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, "is-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", - "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, "is-stream": { "version": "1.1.0", @@ -6936,76 +7150,76 @@ } }, "jest": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz", - "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", + "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.7.1" + "jest-cli": "^24.8.0" }, "dependencies": { "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" } } } }, "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", + "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" }, "dependencies": { "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7015,46 +7229,46 @@ } }, "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", "requires": { "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", "jsdom": "^11.5.1" } }, @@ -7068,6 +7282,11 @@ "jsdom": "^14.0.0" }, "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + }, "jsdom": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", @@ -7101,6 +7320,11 @@ "xml-name-validator": "^3.0.0" } }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + }, "whatwg-url": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", @@ -7122,36 +7346,36 @@ } }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" }, "jest-haste-map": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", - "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", "micromatch": "^3.1.10", "sane": "^4.0.3", "walker": "^1.0.7" @@ -7641,55 +7865,56 @@ } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^24.9.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", "throat": "^4.0.0" } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -7698,11 +7923,11 @@ } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^24.9.0" } }, "jest-pnp-resolver": { @@ -7711,16 +7936,16 @@ "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==" }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" }, "jest-resolve": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz", - "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7728,47 +7953,47 @@ } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "jest-snapshot": "^24.9.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", + "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" }, "dependencies": { "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7778,41 +8003,41 @@ } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", + "@jest/environment": "^24.9.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" }, "dependencies": { "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7822,58 +8047,54 @@ } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^24.9.0", + "semver": "^6.2.0" }, "dependencies": { "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", "realpath-native": "^1.1.0" } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -7896,22 +8117,22 @@ } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" } }, "jest-watch-typeahead": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.0.tgz", - "integrity": "sha512-+uOtlppt9ysST6k6ZTqsPI0WNz2HLa8bowiZylZoQCQaAVn7XsVmHhZREkz73FhKelrFrpne4hQQjdq42nFEmA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.1.tgz", + "integrity": "sha512-cDIko96c4Yqg/7mfye1eEYZ6Pvugo9mnOOhGQod3Es7/KptNv1b+9gFVaotzdqNqTlwbkA80BnWHtzV4dc+trA==", "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.4.1", @@ -7919,43 +8140,28 @@ "slash": "^2.0.0", "string-length": "^2.0.0", "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.8.0", + "jest-util": "^24.9.0", "string-length": "^2.0.0" } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "requires": { - "merge-stream": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { @@ -8030,11 +8236,6 @@ "version": "5.7.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" } } }, @@ -8114,11 +8315,12 @@ } }, "jsx-ast-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", - "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", + "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", "requires": { - "array-includes": "^3.0.3" + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" } }, "keymaster": { @@ -8137,13 +8339,6 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - } } }, "kleur": { @@ -8179,9 +8374,9 @@ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.3.0", @@ -8300,9 +8495,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -8329,26 +8524,21 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" - }, "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "requires": { - "lodash._reinterpolate": "~3.0.0", + "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "^3.0.0" } }, "lodash.unescape": { @@ -8362,9 +8552,9 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "loglevel": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.2.tgz", - "integrity": "sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg==" + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", + "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==" }, "loose-envify": { "version": "1.4.0", @@ -8402,9 +8592,9 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -8443,16 +8633,21 @@ } }, "match-sorter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-3.1.1.tgz", - "integrity": "sha512-Qlox3wRM/Q4Ww9rv1cBmYKNJwWVX/WC+eA3+1S3Fv4EOhrqyp812ZEfVFKQk0AP6RfzmPUUOwEZBbJ8IRt8SOw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.0.1.tgz", + "integrity": "sha512-DdlYxhN20iVJI7jEK7wkZY+EPtaj2G4tT59lDSxG3F6lD9gGtQKaLNCP/0HF4q2n3bT/dRO5L7j3PL8TK5wRdA==", "requires": { + "@babel/runtime": "^7.5.5", "remove-accents": "0.4.2" }, "dependencies": { - "remove-accents": { - "version": "0.4.2", - "bundled": true + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } } } }, @@ -8467,14 +8662,14 @@ } }, "mdi-react": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.4.0.tgz", - "integrity": "sha512-Y4eUHbbEiiQC8og6ofMM7ukUIiD+NnIQRpJHj2aVzle918aUCJh4Du9sjXw+yJ+wi8Nh7TdNvFptJD3WIdlbNw==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.5.0.tgz", + "integrity": "sha512-OTm2TnBRgvHaMfBJsEqxHdiLZ4SToDC/f9ewI3x8yg0g20Fk7vO3YbBdpBF5C046ls2Emv5yKshoxue6mYpP7A==" }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, "media-typer": { "version": "0.3.0", @@ -8499,9 +8694,9 @@ } }, "memoize-one": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.4.tgz", - "integrity": "sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" }, "memory-fs": { "version": "0.4.1", @@ -8510,16 +8705,45 @@ "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" - } - }, - "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "requires": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" } }, "merge-descriptors": { @@ -8528,17 +8752,14 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "requires": { - "readable-stream": "^2.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==" }, "methods": { "version": "1.1.2", @@ -8587,9 +8808,9 @@ } }, "mime": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", - "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==" + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" }, "mime-db": { "version": "1.40.0", @@ -8685,9 +8906,9 @@ "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==" }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -8748,9 +8969,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { "version": "6.2.3", @@ -8817,6 +9038,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -8841,9 +9067,9 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -8855,7 +9081,7 @@ "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -8867,13 +9093,50 @@ "tty-browserify": "0.0.0", "url": "^0.11.0", "util": "^0.11.0", - "vm-browserify": "0.0.4" + "vm-browserify": "^1.0.1" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + } } } }, @@ -8883,9 +9146,9 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "requires": { "growly": "^1.3.0", "is-wsl": "^1.1.0", @@ -8895,24 +9158,24 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "node-releases": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.22.tgz", - "integrity": "sha512-O6XpteBuntW1j86mw6LlovBIwTe+sO2+7vi9avQffNeIW4upgnaCVm6xrBWH+KATz7mNNRNNeEpuWB7dT6Cr3w==", + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz", + "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==", "requires": { "semver": "^5.3.0" }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -8928,9 +9191,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -9018,11 +9281,26 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -9042,6 +9320,17 @@ "object-keys": "^1.0.11" } }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "object.fromentries": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", @@ -9119,15 +9408,14 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", - "dev": true, "requires": { "is-wsl": "^1.1.0" } }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "requires": { "is-wsl": "^1.1.0" } @@ -9154,11 +9442,11 @@ } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" } }, @@ -9270,6 +9558,35 @@ "cyclist": "~0.2.2", "inherits": "^2.0.3", "readable-stream": "^2.1.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "param-case": { @@ -9318,9 +9635,9 @@ } }, "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, "parseurl": { "version": "1.3.3", @@ -9333,9 +9650,9 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, "path-dirname": { "version": "1.0.2", @@ -9488,17 +9805,17 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "pnp-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", "requires": { - "ts-pnp": "^1.0.0" + "ts-pnp": "^1.1.2" } }, "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", + "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==", "requires": { "async": "^1.5.2", "debug": "^2.2.0", @@ -9526,9 +9843,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -9689,11 +10006,11 @@ } }, "postcss-custom-properties": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.10.tgz", - "integrity": "sha512-GDL0dyd7++goDR4SSasYdRNNvp4Gqy1XMzcCnTijiph7VB27XXpJ8bW/AI0i2VSBZ55TpdGhMr37kMSpRfYD0Q==", + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", "requires": { - "postcss": "^7.0.14", + "postcss": "^7.0.17", "postcss-values-parser": "^2.0.1" } }, @@ -9849,11 +10166,11 @@ } }, "postcss-initial": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.0.tgz", - "integrity": "sha512-WzrqZ5nG9R9fUtrA+we92R4jhVvEB32IIRTzfIG/PLL8UV4CvbF1ugTEHEFX6vWxl41Xt5RTCJPEZkuWzrOM+Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.1.tgz", + "integrity": "sha512-I2Sz83ZSHybMNh02xQDK609lZ1/QOyYeuizCjzEhlMgeV/HcDJapQiH4yTqLjZss0X6/6VvKFXUeObaHpJoINw==", "requires": { - "lodash.template": "^4.2.4", + "lodash.template": "^4.5.0", "postcss": "^7.0.2" } }, @@ -9868,25 +10185,12 @@ } }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "requires": { - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - } } }, "postcss-loader": { @@ -10045,9 +10349,9 @@ } }, "postcss-nesting": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.0.tgz", - "integrity": "sha512-WSsbVd5Ampi3Y0nk/SKr5+K34n52PqMqEfswu6RtU4r7wA8vSD+gM8/D9qq4aJkHImwn1+9iEFTbjoWsQeqtaQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", "requires": { "postcss": "^7.0.2" } @@ -10189,26 +10493,26 @@ } }, "postcss-preset-env": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.6.0.tgz", - "integrity": "sha512-I3zAiycfqXpPIFD6HXhLfWXIewAWO8emOKz+QSsxaUZb9Dp8HbF5kUf+4Wy/AxR33o+LRoO8blEWCHth0ZsCLA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", "requires": { - "autoprefixer": "^9.4.9", - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000939", + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", "css-blank-pseudo": "^0.1.4", "css-has-pseudo": "^0.10.0", "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.3.0", - "postcss": "^7.0.14", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", "postcss-attribute-case-insensitive": "^4.0.1", "postcss-color-functional-notation": "^2.0.1", "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.2", + "postcss-color-hex-alpha": "^5.0.3", "postcss-color-mod-function": "^3.0.3", "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.7", - "postcss-custom-properties": "^8.0.9", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", "postcss-custom-selectors": "^5.1.2", "postcss-dir-pseudo-class": "^5.0.0", "postcss-double-position-gradients": "^1.0.0", @@ -10375,9 +10679,9 @@ } }, "pretty-bytes": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.2.0.tgz", - "integrity": "sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==" }, "pretty-error": { "version": "2.1.1", @@ -10389,11 +10693,11 @@ } }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" @@ -10417,27 +10721,35 @@ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, + "promise": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", + "requires": { + "asap": "~2.0.6" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" } }, "prop-types": { @@ -10450,14 +10762,6 @@ "react-is": "^16.8.1" } }, - "property-information": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.1.0.tgz", - "integrity": "sha512-tODH6R3+SwTkAQckSp2S9xyYX8dEKYkeXw+4TmJzTxnNzd6mQPu1OD4f9zPrvw/Rm4wpPgI+Zp63mNSGNzUgHg==", - "requires": { - "xtend": "^4.0.1" - } - }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -10473,9 +10777,9 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "psl": { - "version": "1.1.32", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", - "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz", + "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==" }, "public-encrypt": { "version": "4.0.3", @@ -10599,22 +10903,20 @@ } }, "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", + "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "prop-types": "^15.6.2" } }, "react-ace": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-7.0.2.tgz", - "integrity": "sha512-+TFuO1nO6dme/q+qEHjb7iOuWI8jRDzeALs9JyH8HoyHb9+A2bC8WHuJyNU3pmPo8623bytgAgzEJAzDMkzjlw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-7.0.4.tgz", + "integrity": "sha512-Otk0c2aLr1ZqPQaUEONc4UGAEA/h/P7vAUPLHbEPUVFX67G8Ke6yoe390AQun3NlWdNvpVZ/N7lOJHz0yUl6Fg==", "requires": { - "@babel/polyfill": "^7.4.4", "brace": "^0.11.1", "diff-match-patch": "^1.0.4", "lodash.get": "^4.4.2", @@ -10623,25 +10925,22 @@ } }, "react-app-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.1.tgz", - "integrity": "sha512-LbVpT1NdzTdDDs7xEZdebjDrqsvKi5UyVKUQqtTYYNyC1JJYVAwNQWe4ybWvoT2V2WW9PGVO2u5Y6aVj4ER/Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.2.tgz", + "integrity": "sha512-yZcpLnIr0FOIzrOOz9JC37NWAWEuCaQWmYn9EWjEzlCW4cOmA5MkT5L3iP8QuUeFnoqVCTJgjIWYbXEJgNXhGA==", "requires": { - "core-js": "3.0.1", + "core-js": "3.1.4", "object-assign": "4.1.1", - "promise": "8.0.2", + "promise": "8.0.3", "raf": "3.4.1", - "regenerator-runtime": "0.13.2", + "regenerator-runtime": "0.13.3", "whatwg-fetch": "3.0.0" }, "dependencies": { - "promise": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", - "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", - "requires": { - "asap": "~2.0.6" - } + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" } } }, @@ -10663,30 +10962,30 @@ } }, "react-dev-utils": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz", - "integrity": "sha512-pnaeMo/Pxel8aZpxk1WwxT3uXxM3tEwYvsjCYn5R7gNxjhN1auowdcLDzFB8kr7rafAj2rxmvfic/fbac5CzwQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.3.tgz", + "integrity": "sha512-OyInhcwsvycQ3Zr2pQN+HV4gtRXrky5mJXIy4HnqrWa+mI624xfYfqGuC9dYbxp4Qq3YZzP8GSGQjv0AgNU15w==", "requires": { - "@babel/code-frame": "7.0.0", - "address": "1.0.3", - "browserslist": "4.5.4", + "@babel/code-frame": "7.5.5", + "address": "1.1.0", + "browserslist": "4.6.6", "chalk": "2.4.2", "cross-spawn": "6.0.5", "detect-port-alt": "1.1.6", "escape-string-regexp": "1.0.5", "filesize": "3.6.1", "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.1.1", + "fork-ts-checker-webpack-plugin": "1.5.0", "global-modules": "2.0.0", "globby": "8.0.2", - "gzip-size": "5.0.0", + "gzip-size": "5.1.1", "immer": "1.10.0", - "inquirer": "6.2.2", - "is-root": "2.0.0", + "inquirer": "6.5.0", + "is-root": "2.1.0", "loader-utils": "1.2.3", - "opn": "5.4.0", + "open": "^6.3.0", "pkg-up": "2.0.0", - "react-error-overlay": "^5.1.6", + "react-error-overlay": "^6.0.1", "recursive-readdir": "2.2.2", "shell-quote": "1.6.1", "sockjs-client": "1.3.0", @@ -10694,25 +10993,20 @@ "text-table": "0.2.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, "browserslist": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.4.tgz", - "integrity": "sha512-rAjx494LMjqKnMPhFkuLmLp8JWEX0o8ADTGeAbOqaF+XCvYLreZrG5uVjnPBlAQ8REZK4pzXGvp0bWgrFtKaag==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", "requires": { - "caniuse-lite": "^1.0.30000955", - "electron-to-chromium": "^1.3.122", - "node-releases": "^1.1.13" + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" } }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -10720,49 +11014,41 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.15.0" } }, "react-draggable": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.0.tgz", - "integrity": "sha512-U7/jD0tAW4T0S7DCPK0kkKLyL0z61sC/eqU+NUfDjnq+JtBKaYKDHpsK2wazctiA4alEzCXUnzkREoxppOySVw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.2.tgz", + "integrity": "sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA==", "requires": { "classnames": "^2.2.5", "prop-types": "^15.6.0" } }, "react-error-overlay": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz", - "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.1.tgz", + "integrity": "sha512-V9yoTr6MeZXPPd4nV/05eCBvGH9cGzc52FN8fs0O0TVQ3HYYf1n7EgZVtHbldRq5xU9zEzoXIITjYNIfxDDdUw==" }, "react-focus-lock": { "version": "1.19.1", @@ -10861,63 +11147,64 @@ } }, "react-scripts": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz", - "integrity": "sha512-LKEjBhVpEB+c312NeJhzF+NATxF7JkHNr5GhtwMeRS1cMeLElMeIu8Ye7WGHtDP7iz7ra4ryy48Zpo6G/cwWUw==", - "requires": { - "@babel/core": "7.4.3", - "@svgr/webpack": "4.1.0", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.6.0", - "babel-eslint": "10.0.1", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.1.1.tgz", + "integrity": "sha512-dbjTG9vJC61OI62hIswQYg5xHvwlxDTH6QXz6ICEuA5AqkFQWk1LKl76sk8fVL2WsyumbBc4FErALwKcEV2vNA==", + "requires": { + "@babel/core": "7.5.5", + "@svgr/webpack": "4.3.2", + "@typescript-eslint/eslint-plugin": "1.13.0", + "@typescript-eslint/parser": "1.13.0", + "babel-eslint": "10.0.2", "babel-jest": "^24.8.0", - "babel-loader": "8.0.5", - "babel-plugin-named-asset-import": "^0.3.2", - "babel-preset-react-app": "^9.0.0", + "babel-loader": "8.0.6", + "babel-plugin-named-asset-import": "^0.3.3", + "babel-preset-react-app": "^9.0.1", "camelcase": "^5.2.0", "case-sensitive-paths-webpack-plugin": "2.2.0", "css-loader": "2.1.1", "dotenv": "6.2.0", "dotenv-expand": "4.2.0", - "eslint": "^5.16.0", - "eslint-config-react-app": "^4.0.1", - "eslint-loader": "2.1.2", - "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "eslint-plugin-react-hooks": "^1.5.0", + "eslint": "^6.1.0", + "eslint-config-react-app": "^5.0.1", + "eslint-loader": "2.2.1", + "eslint-plugin-flowtype": "3.13.0", + "eslint-plugin-import": "2.18.2", + "eslint-plugin-jsx-a11y": "6.2.3", + "eslint-plugin-react": "7.14.3", + "eslint-plugin-react-hooks": "^1.6.1", "file-loader": "3.0.1", "fs-extra": "7.0.1", - "fsevents": "2.0.6", + "fsevents": "2.0.7", "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", "is-wsl": "^1.1.0", - "jest": "24.7.1", + "jest": "24.8.0", "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.7.1", - "jest-watch-typeahead": "0.3.0", + "jest-resolve": "24.8.0", + "jest-watch-typeahead": "0.3.1", "mini-css-extract-plugin": "0.5.0", - "optimize-css-assets-webpack-plugin": "5.0.1", - "pnp-webpack-plugin": "1.2.1", + "optimize-css-assets-webpack-plugin": "5.0.3", + "pnp-webpack-plugin": "1.5.0", "postcss-flexbugs-fixes": "4.1.0", "postcss-loader": "3.0.0", "postcss-normalize": "7.0.1", - "postcss-preset-env": "6.6.0", + "postcss-preset-env": "6.7.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.1", - "react-dev-utils": "^9.0.1", - "resolve": "1.10.0", - "sass-loader": "7.1.0", - "semver": "6.0.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.3", + "react-app-polyfill": "^1.0.2", + "react-dev-utils": "^9.0.3", + "resolve": "1.12.0", + "resolve-url-loader": "3.1.0", + "sass-loader": "7.2.0", + "semver": "6.3.0", + "style-loader": "1.0.0", + "terser-webpack-plugin": "1.4.1", "ts-pnp": "1.1.2", - "url-loader": "1.1.2", - "webpack": "4.29.6", + "url-loader": "2.1.0", + "webpack": "4.39.1", "webpack-dev-server": "3.2.1", "webpack-manifest-plugin": "2.0.4", - "workbox-webpack-plugin": "4.2.0" + "workbox-webpack-plugin": "4.3.1" } }, "react-split-pane": { @@ -10948,9 +11235,9 @@ } }, "react-window": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.3.tgz", - "integrity": "sha512-F3UI7QCytY101u/I9zEzN1rKZmhcQyhMCeRgkuNVluE3bU4MuLm07r3MWnUm4yf4N0d6zas6x+ZxaFVrO1FzGg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.5.tgz", + "integrity": "sha512-HeTwlNa37AFa8MDZFZOKcNEkuF2YflA0hpGPiTT9vR7OawEt+GZbfM6wqkBahD3D3pUjIabQYzsnY/BSJbgq6Q==", "requires": { "@babel/runtime": "^7.0.0", "memoize-one": ">=3.1.1 <6" @@ -10976,24 +11263,13 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -11004,6 +11280,35 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "realpath-native": { @@ -11041,9 +11346,9 @@ "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "requires": { "private": "^0.1.6" } @@ -11057,10 +11362,23 @@ "safe-regex": "^1.1.0" } }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" + }, "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==" + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.13.tgz", + "integrity": "sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==" + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "requires": { + "define-properties": "^1.1.2" + } }, "regexpp": { "version": "2.0.1", @@ -11068,12 +11386,12 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", + "regenerate-unicode-properties": "^8.1.0", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -11100,21 +11418,16 @@ } } }, - "rehype-parse": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.0.tgz", - "integrity": "sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA==", - "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.1" - } - }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=" + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -11177,11 +11490,6 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -11248,21 +11556,11 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==" - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -11274,9 +11572,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "requires": { "path-parse": "^1.0.6" } @@ -11304,6 +11602,53 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "resolve-url-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz", + "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==", + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.0.0", + "compose-function": "3.0.3", + "convert-source-map": "1.6.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -11318,6 +11663,27 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -11346,9 +11712,9 @@ } }, "rsvp": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", - "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==" + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" }, "run-async": { "version": "2.3.0", @@ -11372,9 +11738,9 @@ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "requires": { "tslib": "^1.9.0" } @@ -11414,35 +11780,25 @@ } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz", + "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==", "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0", + "pify": "^4.0.1", "semver": "^5.5.0" }, "dependencies": { "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" - } - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "requires": { - "for-in": "^1.0.1" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "kind-of": { @@ -11450,26 +11806,22 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "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==" - } + "kind-of": "^6.0.2" } } } @@ -11480,17 +11832,17 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "saxes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.9.tgz", - "integrity": "sha512-FZeKhJglhJHk7eWG5YM0z46VHmI3KJpMBAQm3xa9meDvd+wevB5GuBB0wc0exPInZiBBHqi00DbS8AcvCGCFMw==", + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", "requires": { - "xmlchars": "^1.3.1" + "xmlchars": "^2.1.1" } }, "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -11520,9 +11872,9 @@ } }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { "version": "0.17.1", @@ -11563,13 +11915,18 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" }, "serve-index": { "version": "1.9.1", @@ -11633,9 +11990,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -11683,11 +12040,6 @@ "mixin-object": "^2.0.1" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "kind-of": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", @@ -11753,9 +12105,9 @@ } }, "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" }, "slash": { "version": "2.0.0", @@ -12066,9 +12418,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -12086,11 +12438,6 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, - "space-separated-tokens": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz", - "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==" - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -12115,14 +12462,14 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -12142,18 +12489,6 @@ "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "split-string": { @@ -12239,6 +12574,35 @@ "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-each": { @@ -12260,6 +12624,35 @@ "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-shift": { @@ -12274,6 +12667,16 @@ "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string-width": { @@ -12283,14 +12686,49 @@ "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz", + "integrity": "sha1-aLaqjhYsaoDnbjqKDC50cYbicf8=", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.0.2" + } + }, + "string.prototype.trimright": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz", + "integrity": "sha1-q0pW2AKgH75yk+EehPJNyBZGYd0=", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.0.2" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } } }, "stringify-object": { @@ -12304,11 +12742,18 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } } }, "strip-bom": { @@ -12331,17 +12776,28 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "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=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" }, "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", + "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.2.0.tgz", + "integrity": "sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } } }, "stylehacks": { @@ -12374,17 +12830,21 @@ "has-flag": "^3.0.0" } }, + "svg-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", + "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==" + }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", + "css-tree": "1.0.0-alpha.33", "csso": "^3.5.1", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", @@ -12396,26 +12856,21 @@ } }, "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "table": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", - "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -12425,14 +12880,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -12442,9 +12889,9 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "taucharts": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.3.tgz", - "integrity": "sha512-0rI2ZO6RCNv/VBQSM/FBE2U53QtxAYMDO1bYEVIBZZNsoj3D6M3UUDtR7HXVIDU1vDGGyS93cIJ9b5lMT9Xyzg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.7.4.tgz", + "integrity": "sha512-Uj3cJX7HvuFln+F76Dl4v2EkVuKbNH8BjMsV39Qfzlg4HjG/rq9iV4DdsGZo++BtDUftxR8BRYqczd+OUOHirg==", "requires": { "d3-array": "^1.2.1", "d3-axis": "^1.0.12", @@ -12472,15 +12919,20 @@ } }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.1.tgz", + "integrity": "sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==", "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12489,18 +12941,19 @@ } }, "terser-webpack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", - "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "serialize-javascript": "^1.7.0", "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" }, "dependencies": { "source-map": { @@ -12543,6 +12996,35 @@ "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "thunky": { @@ -12551,9 +13033,9 @@ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "requires": { "setimmediate": "^1.0.4" } @@ -12664,11 +13146,6 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, - "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==" - }, "ts-pnp": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz", @@ -12680,9 +13157,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tsutils": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.13.0.tgz", - "integrity": "sha512-wRtEjVU8Su72sDIDoqno5Scwt8x4eaF0teKO3m4hu8K1QFPnIZMM88CLafs2tapUeWnY9SwwO3bWeOt2uauBcg==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", "requires": { "tslib": "^1.8.1" } @@ -12705,6 +13182,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -12767,64 +13249,15 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" }, - "unified": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", - "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", - "requires": { - "@types/unist": "^2.0.0", - "@types/vfile": "^3.0.0", - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^3.0.0", - "x-is-string": "^0.1.0" - }, - "dependencies": { - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - } - } - }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { @@ -12846,18 +13279,13 @@ } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "requires": { "imurmurhash": "^0.1.4" } }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - }, "unistore": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/unistore/-/unistore-3.4.1.tgz", @@ -12920,9 +13348,9 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "upper-case": { "version": "1.1.3", @@ -12959,13 +13387,24 @@ } }, "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz", + "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==", "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.2.0.tgz", + "integrity": "sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } } }, "url-parse": { @@ -12983,11 +13422,18 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "requires": { - "inherits": "2.0.3" + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } } }, "util-deprecate": { @@ -13015,9 +13461,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -13053,52 +13504,10 @@ "extsprintf": "^1.2.0" } }, - "vfile": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz", - "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz", - "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile-message": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz", - "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==", - "requires": { - "@types/unist": "^2.0.2", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" }, "w3c-hr-time": { "version": "1.0.1", @@ -13152,54 +13561,56 @@ "minimalistic-assert": "^1.0.0" } }, - "web-namespaces": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.3.tgz", - "integrity": "sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA==" - }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.29.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", - "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.1.tgz", + "integrity": "sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ==", "requires": { "@webassemblyjs/ast": "1.8.5", "@webassemblyjs/helper-module-context": "1.8.5", "@webassemblyjs/wasm-edit": "1.8.5", "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + } } }, "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz", + "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==", "requires": { "memory-fs": "^0.4.1", - "mime": "^2.4.2", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", "range-parser": "^1.2.1", "webpack-log": "^2.0.0" } @@ -13251,6 +13662,31 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "decamelize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", @@ -13259,15 +13695,28 @@ "xregexp": "4.0.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "strip-ansi": { "version": "3.0.1", @@ -13285,6 +13734,27 @@ "has-flag": "^3.0.0" } }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, "yargs": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", @@ -13334,9 +13804,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -13350,11 +13820,12 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -13456,9 +13927,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -13561,13 +14032,13 @@ "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" }, "workbox-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-YZsiA+y/ns/GdWRaBsfYv8dln1ebWtGnJcTOg1ppO0pO1tScAHX0yGtHIjndxz3L/UUhE8b0NQE9KeLNwJwA5A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", "requires": { "@babel/runtime": "^7.0.0", "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.2.0" + "workbox-build": "^4.3.1" } }, "workbox-window": { @@ -13595,43 +14066,23 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "ansi-regex": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } } } @@ -13667,20 +14118,15 @@ "async-limiter": "~1.0.0" } }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "xmlchars": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", - "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", + "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==" }, "xregexp": { "version": "4.0.0", @@ -13688,9 +14134,9 @@ "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "4.0.0", @@ -13703,35 +14149,38 @@ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" }, "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/client/package.json b/client/package.json index d45e87a97..311d2a0b7 100644 --- a/client/package.json +++ b/client/package.json @@ -8,26 +8,26 @@ "@reach/menu-button": "^0.1.18", "@reach/tooltip": "^0.2.2", "brace": "^0.11.1", - "d3": "^5.9.7", - "downshift": "^3.2.10", + "d3": "^5.11.0", + "downshift": "^3.2.13", "keymaster": "^1.6.2", "localforage": "^1.7.3", - "lodash": "^4.17.11", - "match-sorter": "^3.1.1", - "mdi-react": "^5.4.0", + "lodash": "^4.17.15", + "match-sorter": "^4.0.1", + "mdi-react": "^5.5.0", "mitt": "^1.1.3", "prop-types": "^15.7.2", - "react": "^16.8.6", - "react-ace": "^7.0.2", + "react": "^16.9.0", + "react-ace": "^7.0.4", "react-copy-to-clipboard": "^5.0.0", - "react-dom": "^16.8.6", - "react-draggable": "^3.3.0", + "react-dom": "^16.9.0", + "react-draggable": "^3.3.2", "react-measure": "^2.3.0", "react-router-dom": "^5.0.1", - "react-scripts": "^3.0.1", + "react-scripts": "^3.1.1", "react-split-pane": "^0.1.87", - "react-window": "^1.8.3", - "taucharts": "^2.7.3", + "react-window": "^1.8.5", + "taucharts": "^2.7.4", "unistore": "^3.4.1", "whatwg-fetch": "^3.0.0" }, @@ -47,7 +47,7 @@ "not op_mini all" ], "devDependencies": { - "eslint-config-prettier": "^6.0.0", + "eslint-config-prettier": "^6.2.0", "eslint-plugin-prettier": "^3.1.0", "source-map-explorer": "^2.0.1" } diff --git a/client/src/common/SqlpadTauChart.js b/client/src/common/SqlpadTauChart.js index f375cc1fc..7fcc1cd19 100644 --- a/client/src/common/SqlpadTauChart.js +++ b/client/src/common/SqlpadTauChart.js @@ -1,4 +1,3 @@ -import 'd3'; import PropTypes from 'prop-types'; import React, { useEffect } from 'react'; import { Chart } from 'taucharts'; @@ -13,8 +12,6 @@ function SqlpadTauChart({ chartConfiguration, queryId }) { - // TODO rendering on every change like this might get too expensive - // Revisit with latest version of taucharts and d3 once UI is updated useEffect(() => { let chart; diff --git a/client/src/queryEditor/QueryEditorChartToolbar.js b/client/src/queryEditor/QueryEditorChartToolbar.js index 035865ff1..983721fe3 100644 --- a/client/src/queryEditor/QueryEditorChartToolbar.js +++ b/client/src/queryEditor/QueryEditorChartToolbar.js @@ -1,4 +1,3 @@ -import 'd3'; import DownloadIcon from 'mdi-react/DownloadIcon'; import OpenInNewIcon from 'mdi-react/OpenInNewIcon'; import React from 'react'; diff --git a/package-lock.json b/package-lock.json index bb29ecb05..eccbb8864 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,13 +24,30 @@ "js-tokens": "^4.0.0" } }, - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "@nodelib/fs.scandir": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz", + "integrity": "sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.2", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz", + "integrity": "sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz", + "integrity": "sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "@nodelib/fs.scandir": "2.1.2", + "fastq": "^1.6.0" } }, "@samverschueren/stream-to-observable": { @@ -42,12 +59,51 @@ "any-observable": "^0.3.0" } }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz", + "integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==", + "dev": true + }, "@types/normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, + "aggregate-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz", + "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^3.2.0" + } + }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -84,61 +140,10 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "balanced-match": { @@ -147,61 +152,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -213,49 +163,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "fill-range": "^7.0.1" } }, "caller-callsite": { @@ -299,28 +212,11 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "cli-cursor": { "version": "2.1.0", @@ -347,16 +243,6 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -378,24 +264,12 @@ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -428,79 +302,43 @@ "dev": true }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "dev": true, + "requires": { + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" } }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "path-type": "^4.0.0" } }, "elegant-spinner": { @@ -560,140 +398,27 @@ "strip-eof": "^1.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "fast-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz", + "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "@nodelib/fs.stat": "^2.0.1", + "@nodelib/fs.walk": "^1.2.1", + "glob-parent": "^5.0.0", + "is-glob": "^4.0.1", + "merge2": "^1.2.3", + "micromatch": "^4.0.2" } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "fastq": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", + "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "reusify": "^1.0.0" } }, "figures": { @@ -707,56 +432,22 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "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": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "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": { - "map-cache": "^0.2.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "fs.realpath": { @@ -765,17 +456,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "g-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", - "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "matcher": "^1.0.0", - "simple-git": "^1.85.0" - } - }, "get-own-enumerable-property-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", @@ -797,12 +477,6 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -817,27 +491,37 @@ "path-is-absolute": "^1.0.0" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" } }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -853,62 +537,48 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", "dev": true }, "husky": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-2.7.0.tgz", - "integrity": "sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.5.tgz", + "integrity": "sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg==", "dev": true, "requires": { - "cosmiconfig": "^5.2.0", + "chalk": "^2.4.2", + "cosmiconfig": "^5.2.1", "execa": "^1.0.0", - "find-up": "^3.0.0", "get-stdin": "^7.0.0", "is-ci": "^2.0.0", - "pkg-dir": "^4.1.0", - "please-upgrade-node": "^3.1.1", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", "read-pkg": "^5.1.1", "run-node": "^1.0.0", "slash": "^3.0.0" + }, + "dependencies": { + "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" + } + } } }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -941,38 +611,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "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 - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -982,57 +626,12 @@ "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, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1058,24 +657,10 @@ } }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "1.0.1", @@ -1093,37 +678,16 @@ } }, "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.1.tgz", + "integrity": "sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg==", + "dev": true }, "is-promise": { "version": "2.1.0", @@ -1143,30 +707,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "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 - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": 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 - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1189,12 +735,6 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -1202,35 +742,80 @@ "dev": true }, "lint-staged": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", - "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.2.5.tgz", + "integrity": "sha512-d99gTBFMJ29159+9iRvaMEQstmNcPAbQbhHSYw6D/1FncvFdIj8lWHztaq3Uq+tbZPABHXQ/fyN7Rp1QwF8HIw==", "dev": true, "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.2.0", - "debug": "^3.1.0", + "chalk": "^2.4.2", + "commander": "^2.20.0", + "cosmiconfig": "^5.2.1", + "debug": "^4.1.1", "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.27.0" + "del": "^5.0.0", + "execa": "^2.0.3", + "listr": "^0.14.3", + "log-symbols": "^3.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "string-argv": "^0.3.0", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "execa": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz", + "integrity": "sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", + "dev": true + } } }, "listr": { @@ -1340,28 +925,21 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^2.4.2" } }, "log-update": { @@ -1375,55 +953,32 @@ "wrap-ansi": "^3.0.1" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "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 }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } + "merge2": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", + "dev": true }, - "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.4" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { @@ -1435,52 +990,12 @@ "brace-expansion": "^1.1.7" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "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 }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -1499,14 +1014,11 @@ "validate-npm-package-license": "^3.0.1" } }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - } + "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 }, "npm-run-path": { "version": "2.0.2", @@ -1517,17 +1029,6 @@ "path-key": "^2.0.0" } }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -1540,55 +1041,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1599,14 +1051,20 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -1614,28 +1072,31 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "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==", + "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.0.0" + "p-limit": "^2.2.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } }, "p-try": { "version": "2.2.0", @@ -1653,16 +1114,10 @@ "json-parse-better-errors": "^1.0.1" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -1671,12 +1126,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -1689,27 +1138,18 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "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 }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -1717,71 +1157,23 @@ "dev": true, "requires": { "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-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 - } } }, "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "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 - }, "prettier": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", "dev": true }, - "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -1818,34 +1210,6 @@ } } }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", @@ -1861,12 +1225,6 @@ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "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 - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -1875,18 +1233,35 @@ "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "dev": true, "requires": { "glob": "^7.1.3" @@ -1898,24 +1273,21 @@ "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", "dev": true }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { "tslib": "^1.9.0" } }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", @@ -1928,29 +1300,6 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1972,26 +1321,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "simple-git": { - "version": "1.124.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.124.0.tgz", - "integrity": "sha512-ks9mBoO4ODQy/xGLC8Cc+YDvj/hho/IKgPhi6h5LI/sA+YUdHc3v0DEoHzM29VmulubpGCxMJUSFmyXNsjNMEA==", - "dev": true, - "requires": { - "debug": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2004,153 +1333,6 @@ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -2183,52 +1365,16 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "staged-git-files": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", - "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, "string-width": { @@ -2268,6 +1414,12 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2283,60 +1435,15 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, - "synchronous-promise": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.9.tgz", - "integrity": "sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==", - "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, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "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=", + "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": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, - "toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", - "dev": true - }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -2349,70 +1456,6 @@ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "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, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "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 - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -2480,20 +1523,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true - }, - "yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", - "toposort": "^2.0.2" - } } } } diff --git a/package.json b/package.json index d8006bd48..67d42cd86 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "3.0.2", "private": true, "devDependencies": { - "husky": "^2.7.0", - "lint-staged": "^8.2.1", + "husky": "^3.0.5", + "lint-staged": "^9.2.5", "prettier": "^1.18.2" }, "prettier": { diff --git a/server/package-lock.json b/server/package-lock.json index 88c7ccc69..21012f547 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -34,15 +34,15 @@ } }, "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==", "dev": true }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", "dev": true }, "address": { @@ -277,6 +277,11 @@ "type-is": "~1.6.17" } }, + "bowser": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", + "integrity": "sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -792,9 +797,9 @@ "dev": true }, "eslint": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", - "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", + "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -804,9 +809,9 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^5.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^6.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -877,9 +882,9 @@ } }, "eslint-config-prettier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz", + "integrity": "sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -956,29 +961,29 @@ } }, "eslint-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz", - "integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", "dev": true, "requires": { "eslint-visitor-keys": "^1.0.0" } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", - "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -1006,9 +1011,9 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -1243,6 +1248,17 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { @@ -1439,9 +1455,9 @@ "dev": true }, "helmet": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.20.0.tgz", - "integrity": "sha512-Ob+TqmQFZ5f7WgP8kBbAzNPsbf6p1lOj5r+327/ymw/IILWih3wcx9u/u/S8Mwv5wbBkO7Li6x5s23t3COhUKw==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.0.tgz", + "integrity": "sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.2.0", @@ -1450,14 +1466,14 @@ "feature-policy": "0.3.0", "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.8.0", + "helmet-csp": "2.9.1", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", "ienoopen": "1.1.0", "nocache": "2.1.0", "referrer-policy": "1.2.0", - "x-xss-protection": "1.2.0" + "x-xss-protection": "1.3.0" }, "dependencies": { "depd": { @@ -1473,14 +1489,14 @@ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" }, "helmet-csp": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.8.0.tgz", - "integrity": "sha512-MlCPeM0Sm3pS9RACRihx70VeTHmkQwa7sum9EK1tfw1VZyvFU0dBWym9nHh3CRkTRNlyNm/WFCMvuh9zXkOjNw==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.1.tgz", + "integrity": "sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA==", "requires": { + "bowser": "2.5.4", "camelize": "1.0.0", "content-security-policy-builder": "2.1.0", - "dasherize": "2.0.0", - "platform": "1.3.5" + "dasherize": "2.0.0" } }, "hide-powered-by": { @@ -1609,9 +1625,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -2835,15 +2851,15 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.12.0.tgz", - "integrity": "sha512-q54Ic0oBXfDZMwheP8ALeUX32TUXvF7SNgAlZjyhkDuFCJkQCgcLBz0Be5uOrAj3ljSok/CI9lRbYzEko0z1Zw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.12.1.tgz", + "integrity": "sha512-l1UuyfEvoswYfcUe6k+JaxiN+5vkOgYcVSbSuw3FvdLqDbaoa2RJo1zfJKfPsSYPFVERd4GHvX3s2PjG1asSDA==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", "pg-connection-string": "0.1.3", "pg-pool": "^2.0.4", - "pg-types": "~2.0.0", + "pg-types": "^2.1.0", "pgpass": "1.x", "semver": "4.3.2" }, @@ -2876,9 +2892,9 @@ "integrity": "sha512-UiJyO5B9zZpu32GSlP0tXy8J2NsJ9EFGFfz5v6PSbdz/1hBLX1rNiiy5+mAm5iJJYwfCv4A0EBcQLGWwjbpzZw==" }, "pg-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.1.tgz", - "integrity": "sha512-b7y6QM1VF5nOeX9ukMQ0h8a9z89mojrBHXfJeSug4mhL0YpxNBm83ot2TROyoAmX/ZOX3UbwVO4EbH7i1ZZNiw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "requires": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -2925,11 +2941,6 @@ "find-up": "^2.1.0" } }, - "platform": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", - "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" - }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -3191,9 +3202,9 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -3208,9 +3219,9 @@ } }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -3227,9 +3238,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize-filename": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.2.tgz", - "integrity": "sha512-cmTzND7RMxUB+f7gI+4+KAVHWEg0lfXvQJdko+FXDP5bNbGIdx4KMP5pX6lv5jfT9jSf6OBbjyxjFtZQwYA/ig==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "requires": { "truncate-utf8-bytes": "^1.0.0" } @@ -3611,9 +3622,9 @@ } }, "table": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", - "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -3816,14 +3827,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", "dev": true }, "validate-npm-package-license": { @@ -3958,9 +3969,9 @@ } }, "x-xss-protection": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.2.0.tgz", - "integrity": "sha512-xN0kV+8XfOQM2OPPBdEbGtbvJNNP1pvZR7sE6d44cjJFQG4OiGDdienPg5iOUGswBTiGbBvtYDURd30BMJwwqg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", + "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" }, "xlsx": { "version": "0.11.19", diff --git a/server/package.json b/server/package.json index 5efa3ce56..4b75f75ce 100644 --- a/server/package.json +++ b/server/package.json @@ -42,7 +42,7 @@ "express": "^4.17.1", "express-session": "^1.16.2", "hdb": "^0.15.4", - "helmet": "^3.18.0", + "helmet": "^3.21.0", "ini": "^1.3.5", "joi": "^12.0.0", "json2csv": "^3.11.5", @@ -64,16 +64,16 @@ "passport-http": "^0.3.0", "passport-local": "^1.0.0", "passport-saml": "^0.35.0", - "pg": "^7.11.0", + "pg": "^7.12.1", "pg-cursor": "^2.0.0", "request": "^2.88.0", - "rimraf": "^2.6.3", - "sanitize-filename": "^1.6.1", + "rimraf": "^2.7.1", + "sanitize-filename": "^1.6.3", "serve-favicon": "^2.5.0", "session-file-store": "^1.3.0", "socksjs": "^0.5.0", "sql-formatter": "^2.3.3", - "uuid": "^3.3.2", + "uuid": "^3.3.3", "vertica": "^0.5.5" }, "main": "./app.js", @@ -84,9 +84,9 @@ "odbc": "^1.4.1" }, "devDependencies": { - "eslint": "^6.0.1", + "eslint": "^6.3.0", "eslint-config-airbnb-base": "^13.1.0", - "eslint-config-prettier": "^6.0.0", + "eslint-config-prettier": "^6.2.0", "eslint-plugin-import": "^2.18.0", "eslint-plugin-prettier": "^3.1.0", "mocha": "^6.1.4", From 299e04b1af62fa37bfdcc79400fbee41705044b2 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 14 Sep 2019 22:14:59 -0500 Subject: [PATCH 137/855] Inline configuration documentation (#470) Inlines configuration documentation in README. Also adds a few config-example files. Docker Hub doesn't handle links correctly so inlining this information makes it available everywhere. The script to generate documentation has been removed, along with the descriptions in the configItems.js. From here on out the README and example files can be updated manually. --- README.md | 169 ++++++++++++++++++- CONFIGURATION.md => config-example.ini | 218 +++++++------------------ config-example.json | 37 +++++ scripts/generate-configs.js | 61 ------- server/lib/config/configItems.js | 84 ++-------- 5 files changed, 275 insertions(+), 294 deletions(-) rename CONFIGURATION.md => config-example.ini (53%) create mode 100644 config-example.json delete mode 100644 scripts/generate-configs.js diff --git a/README.md b/README.md index 0915ac984..3418cf475 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,174 @@ A docker image may be built using the Dockerfile located in `server` directory. ## Configuration -[CONFIGURATION.md](CONFIGURATION.md) +SQLPad may be configured via environment variables, config file, or command line flags. + +Config file path may be specified passing command line option `--config` or environment variable `SQLPAD_CONFIG`. +For example: + +```sh +node server.js --config ~/.sqlpadrc +``` + +For INI and JSON config file examples, see `config-example.ini` and `config-example.json` in GitHub repository. + +### Version 3 changes + +Previously SQLPad supported a default dbPath of `$HOME/sqlpad/db` and a default config file path of `$HOME/.sqlpadrc`. + +These defaults have been removed in version 3. + +### Config variables + +**admin** +Email address to whitelist/give admin permissions to +Env var: `SQLPAD_ADMIN` + +**allowCsvDownload** +Enable csv and xlsx downloads. +Env var: `SQLPAD_ALLOW_CSV_DOWNLOAD` +Default: `true` + +**baseUrl** +Path to mount sqlpad app following domain. Example, if '/sqlpad' is provided queries page would be mydomain.com/sqlpad/queries +Env var: `SQLPAD_BASE_URL` + +**certPassphrase** +Passphrase for your SSL certification file +Env var: `CERT_PASSPHRASE` + +**certPath** +Absolute path to where SSL certificate is stored +Env var: `CERT_PATH` + +**cookieSecret** +Secret used to sign cookies +Env var: `SQLPAD_COOKIE_SECRET` +Default: `secret-used-to-sign-cookies-please-set-and-make-strong` + +**dbPath** +Directory to store SQLPad embedded database content. This includes queries, users, query result cache files, etc. +Env var: `SQLPAD_DB_PATH` + +**debug** +Add a variety of logging to console while running SQLPad +Env var: `SQLPAD_DEBUG` + +**disableUserpassAuth** +Set to TRUE to disable built-in user authentication. Use to restrict auth to OAuth only. +Env var: `DISABLE_USERPASS_AUTH` + +**editorWordWrap** +Enable word wrapping in SQL editor. +Env var: `SQLPAD_EDITOR_WORD_WRAP` + +**googleClientId** +Google Client ID used for OAuth setup. Authorized redirect URI for sqlpad is '[baseurl]/auth/google/callback' +Env var: `GOOGLE_CLIENT_ID` + +**googleClientSecret** +Google Client Secret used for OAuth setup. Authorized redirect URI for sqlpad is '[baseurl]/auth/google/callback' +Env var: `GOOGLE_CLIENT_SECRET` + +**httpsPort** +Port for SQLPad to listen on. +Env var: `SQLPAD_HTTPS_PORT` +Default: `443` + +**ip** +IP address to bind to. By default SQLPad will listen from all available addresses (0.0.0.0). +Env var: `SQLPAD_IP` +Default: `0.0.0.0` + +**keyPath** +Absolute path to where SSL certificate key is stored +Env var: `KEY_PATH` + +**passphrase** +A string of text used to encrypt sensitive values when stored on disk. +Env var: `SQLPAD_PASSPHRASE` +Default: `At least the sensitive bits won't be plain text?` + +**port** +Port for SQLPad to listen on. +Env var: `SQLPAD_PORT` +Default: `80` + +**publicUrl** +Public URL used for OAuth setup and email links. Protocol expected. Example: https://mysqlpad.com +Env var: `PUBLIC_URL` + +**queryResultMaxRows** +By default query results are limited to 50,000 records. +Env var: `SQLPAD_QUERY_RESULT_MAX_ROWS` +Default: `50000` + +**samlAuthContext** +SAML authentication context URL +Env var: `SAML_AUTH_CONTEXT` + +**samlCallbackUrl** +SAML callback URL +Env var: `SAML_CALLBACK_URL` + +**samlCert** +SAML certificate in Base64 +Env var: `SAML_CERT` + +**samlEntryPoint** +SAML Entry point URL +Env var: `SAML_ENTRY_POINT` + +**samlIssuer** +SAML Issuer +Env var: `SAML_ISSUER` + +**sessionMinutes** +Minutes to keep a session active. Will extended by this amount each request. +Env var: `SQLPAD_SESSION_MINUTES` +Default: `60` + +**slackWebhook** +Supply incoming Slack webhook URL to post query when saved. +Env var: `SQLPAD_SLACK_WEBHOOK` + +**smtpFrom** +From email address for SMTP. Required in order to send invitation emails. +Env var: `SQLPAD_SMTP_FROM` + +**smtpHost** +Host address for SMTP. Required in order to send invitation emails. +Env var: `SQLPAD_SMTP_HOST` + +**smtpPassword** +Password for SMTP. +Env var: `SQLPAD_SMTP_PASSWORD` + +**smtpPort** +Port for SMTP. Required in order to send invitation emails. +Env var: `SQLPAD_SMTP_PORT` + +**smtpSecure** +Toggle to use secure connection when using SMTP. +Env var: `SQLPAD_SMTP_SECURE` +Default: `true` + +**smtpUser** +Username for SMTP. Required in order to send invitation emails. +Env var: `SQLPAD_SMTP_USER` + +**systemdSocket** +Acquire socket from systemd if available +Env var: `SQLPAD_SYSTEMD_SOCKET` + +**tableChartLinksRequireAuth** +When false, table and chart result links will be operational without login. +Env var: `SQLPAD_TABLE_CHART_LINKS_REQUIRE_AUTH` +Default: `true` + +**whitelistedDomains** +Allows pre-approval of email domains. Delimit multiple domains by empty space. +Env var: `WHITELISTED_DOMAINS` ## Development diff --git a/CONFIGURATION.md b/config-example.ini similarity index 53% rename from CONFIGURATION.md rename to config-example.ini index 0208bed56..6b9f58d2d 100644 --- a/CONFIGURATION.md +++ b/config-example.ini @@ -1,143 +1,90 @@ +; Email address to whitelist/give admin permissions to +admin="" -_This file was generated by `scripts/generate-configs.js` using `server/lib/config/configItems.js`._ - -# Configuration - -SQLPad may be configured via environment variables, config file, or command line flag. - -Config file path may be specified passing command line option `--config` or environment variable SQLPAD_CONFIG. -For example: - -```sh -sqlpad --config ~/.sqlpadrc -``` - -Using a config file or environment variables recommended. For list of command line flags run `sqlpad -h`. - -## Version 3 changes - -Previously SQLPad supported a default dbPath of `$HOME/sqlpad/db` and a default config file path of `$HOME/.sqlpadrc`. - -These defaults have been removed in version 3. - -## Environment Variables -```sh -SQLPAD_CONFIG= -SQLPAD_COOKIE_SECRET=secret-used-to-sign-cookies-please-set-and-make-strong -SQLPAD_SESSION_MINUTES=60 -SQLPAD_IP=0.0.0.0 -SQLPAD_PORT=80 -SQLPAD_SYSTEMD_SOCKET=false -SQLPAD_HTTPS_PORT=443 -SQLPAD_DB_PATH= -SQLPAD_BASE_URL= -SQLPAD_PASSPHRASE=At least the sensitive bits won't be plain text? -CERT_PASSPHRASE= -KEY_PATH= -CERT_PATH= -SQLPAD_ADMIN= -SQLPAD_DEBUG=false -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= -PUBLIC_URL= -DISABLE_USERPASS_AUTH=false -SQLPAD_ALLOW_CSV_DOWNLOAD=true -SQLPAD_EDITOR_WORD_WRAP=false -SQLPAD_QUERY_RESULT_MAX_ROWS=50000 -SQLPAD_SLACK_WEBHOOK= -SQLPAD_TABLE_CHART_LINKS_REQUIRE_AUTH=true -SQLPAD_SMTP_FROM= -SQLPAD_SMTP_HOST= -SQLPAD_SMTP_PORT= -SQLPAD_SMTP_SECURE=true -SQLPAD_SMTP_USER= -SQLPAD_SMTP_PASSWORD= -WHITELISTED_DOMAINS= -SAML_ENTRY_POINT= -SAML_ISSUER= -SAML_CALLBACK_URL= -SAML_CERT= -SAML_AUTH_CONTEXT= - -``` - -## INI config -```ini -; Secret used to sign cookies -cookieSecret="secret-used-to-sign-cookies-please-set-and-make-strong" - -; Minutes to keep a session active. Will extended by this amount each request. -sessionMinutes="60" - -; IP address to bind to. By default SQLPad will listen from all available addresses (0.0.0.0). -ip="0.0.0.0" - -; Port for SQLPad to listen on. -port="80" - -; Acquire socket from systemd if available -systemdSocket="false" - -; Port for SQLPad to listen on. -httpsPort="443" - -; Directory to store SQLPad embedded database content. This includes queries, users, query result cache files, etc. -dbPath="" +; Enable csv and xlsx downloads. +allowCsvDownload="true" ; Path to mount sqlpad app following domain. Example, if '/sqlpad' is provided queries page would be mydomain.com/sqlpad/queries baseUrl="" -; A string of text used to encrypt sensitive values when stored on disk. -passphrase="At least the sensitive bits won't be plain text?" - ; Passphrase for your SSL certification file certPassphrase="" -; Absolute path to where SSL certificate key is stored -keyPath="" - ; Absolute path to where SSL certificate is stored certPath="" -; Email address to whitelist/give admin permissions to -admin="" +; Secret used to sign cookies +cookieSecret="secret-used-to-sign-cookies-please-set-and-make-strong" + +; Directory to store SQLPad embedded database content. This includes queries, users, query result cache files, etc. +dbPath="" ; Add a variety of logging to console while running SQLPad debug="false" +; Set to TRUE to disable built-in user authentication. Use to restrict auth to OAuth only. +disableUserpassAuth="false" + +; Enable word wrapping in SQL editor. +editorWordWrap="false" + ; Google Client ID used for OAuth setup. Authorized redirect URI for sqlpad is '[baseurl]/auth/google/callback' googleClientId="" ; Google Client Secret used for OAuth setup. Authorized redirect URI for sqlpad is '[baseurl]/auth/google/callback' googleClientSecret="" -; Public URL used for OAuth setup and email links. Protocol expected. Example: https://mysqlpad.com -publicUrl="" +; Port for SQLPad to listen on. +httpsPort="443" -; Set to TRUE to disable built-in user authentication. Use to restrict auth to OAuth only. -disableUserpassAuth="false" +; IP address to bind to. By default SQLPad will listen from all available addresses (0.0.0.0). +ip="0.0.0.0" -; Enable csv and xlsx downloads. -allowCsvDownload="true" +; Absolute path to where SSL certificate key is stored +keyPath="" -; Enable word wrapping in SQL editor. -editorWordWrap="false" +; A string of text used to encrypt sensitive values when stored on disk. +passphrase="At least the sensitive bits won't be plain text?" + +; Port for SQLPad to listen on. +port="80" + +; Public URL used for OAuth setup and email links. Protocol expected. Example: https://mysqlpad.com +publicUrl="" ; By default query results are limited to 50,000 records. queryResultMaxRows="50000" +; SAML authentication context URL +samlAuthContext="" + +; SAML callback URL +samlCallbackUrl="" + +; SAML certificate in Base64 +samlCert="" + +; SAML Entry point URL +samlEntryPoint="" + +; SAML Issuer +samlIssuer="" + +; Minutes to keep a session active. Will extended by this amount each request. +sessionMinutes="60" + ; Supply incoming Slack webhook URL to post query when saved. slackWebhook="" -; When false, table and chart result links will be operational without login. -tableChartLinksRequireAuth="true" - ; From email address for SMTP. Required in order to send invitation emails. smtpFrom="" ; Host address for SMTP. Required in order to send invitation emails. smtpHost="" +; Password for SMTP. +smtpPassword="" + ; Port for SMTP. Required in order to send invitation emails. smtpPort="" @@ -147,67 +94,12 @@ smtpSecure="true" ; Username for SMTP. Required in order to send invitation emails. smtpUser="" -; Password for SMTP. -smtpPassword="" +; Acquire socket from systemd if available +systemdSocket="false" + +; When false, table and chart result links will be operational without login. +tableChartLinksRequireAuth="true" ; Allows pre-approval of email domains. Delimit multiple domains by empty space. whitelistedDomains="" -; SAML Entry point URL -samlEntryPoint="" - -; SAML Issuer -samlIssuer="" - -; SAML callback URL -samlCallbackUrl="" - -; SAML certificate in Base64 -samlCert="" - -; SAML authentication context URL -samlAuthContext="" - - -``` - -## JSON config -```json -{ - "cookieSecret": "secret-used-to-sign-cookies-please-set-and-make-strong", - "sessionMinutes": 60, - "ip": "0.0.0.0", - "port": 80, - "systemdSocket": false, - "httpsPort": 443, - "dbPath": "", - "baseUrl": "", - "passphrase": "At least the sensitive bits won't be plain text?", - "certPassphrase": "", - "keyPath": "", - "certPath": "", - "admin": "", - "debug": false, - "googleClientId": "", - "googleClientSecret": "", - "publicUrl": "", - "disableUserpassAuth": false, - "allowCsvDownload": true, - "editorWordWrap": false, - "queryResultMaxRows": 50000, - "slackWebhook": "", - "tableChartLinksRequireAuth": true, - "smtpFrom": "", - "smtpHost": "", - "smtpPort": "", - "smtpSecure": true, - "smtpUser": "", - "smtpPassword": "", - "whitelistedDomains": "", - "samlEntryPoint": "", - "samlIssuer": "", - "samlCallbackUrl": "", - "samlCert": "", - "samlAuthContext": "" -} -``` diff --git a/config-example.json b/config-example.json new file mode 100644 index 000000000..0d029937a --- /dev/null +++ b/config-example.json @@ -0,0 +1,37 @@ +{ + "admin": "", + "allowCsvDownload": true, + "baseUrl": "", + "certPassphrase": "", + "certPath": "", + "cookieSecret": "secret-used-to-sign-cookies-please-set-and-make-strong", + "dbPath": "", + "debug": false, + "disableUserpassAuth": false, + "editorWordWrap": false, + "googleClientId": "", + "googleClientSecret": "", + "httpsPort": 443, + "ip": "0.0.0.0", + "keyPath": "", + "passphrase": "At least the sensitive bits won't be plain text?", + "port": 80, + "publicUrl": "", + "queryResultMaxRows": 50000, + "samlAuthContext": "", + "samlCallbackUrl": "", + "samlCert": "", + "samlEntryPoint": "", + "samlIssuer": "", + "sessionMinutes": 60, + "slackWebhook": "", + "smtpFrom": "", + "smtpHost": "", + "smtpPassword": "", + "smtpPort": "", + "smtpSecure": true, + "smtpUser": "", + "systemdSocket": false, + "tableChartLinksRequireAuth": true, + "whitelistedDomains": "" +} diff --git a/scripts/generate-configs.js b/scripts/generate-configs.js deleted file mode 100644 index b3465d99e..000000000 --- a/scripts/generate-configs.js +++ /dev/null @@ -1,61 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const configItems = require('../server/lib/config/configItems') - -let env = ''; -let json = {}; -let ini = ''; - -configItems.forEach(item => { - env += `${item.envVar}=${item.default}\n` - - if (item.key !== 'config') { - json[item.key] = item.default; - - if (item.description) { - ini += `; ${item.description}\n${item.key}="${item.default}"\n\n` - } else { - ini += `${item.key}="${item.default}"\n` - } - } -}) - -const markdown = ` -_This file was generated by \`scripts/generate-configs.js\` using \`server/lib/config/configItems.js\`._ - -# Configuration - -SQLPad may be configured via environment variables, config file, or command line flag. - -Config file path may be specified passing command line option \`--config\` or environment variable SQLPAD_CONFIG. -For example: - -\`\`\`sh -sqlpad --config ~/.sqlpadrc -\`\`\` - -Using a config file or environment variables recommended. For list of command line flags run \`sqlpad -h\`. - -## Version 3 changes - -Previously SQLPad supported a default dbPath of \`$HOME/sqlpad/db\` and a default config file path of \`$HOME/.sqlpadrc\`. - -These defaults have been removed in version 3. - -## Environment Variables -\`\`\`sh -${env} -\`\`\` - -## INI config -\`\`\`ini -${ini} -\`\`\` - -## JSON config -\`\`\`json -${JSON.stringify(json, null, 2)} -\`\`\` -` - -fs.writeFileSync(path.join(__dirname, '../CONFIGURATION.md'), markdown, { encoding: 'utf8'}) \ No newline at end of file diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index f5b406f52..a8e5abeb7 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -2,235 +2,181 @@ const configItems = [ { key: 'config', envVar: 'SQLPAD_CONFIG', - default: '', - description: 'JSON/INI file to read for config' + default: '' }, { key: 'cookieSecret', envVar: 'SQLPAD_COOKIE_SECRET', - default: 'secret-used-to-sign-cookies-please-set-and-make-strong', - description: 'Secret used to sign cookies' + default: 'secret-used-to-sign-cookies-please-set-and-make-strong' }, { key: 'sessionMinutes', envVar: 'SQLPAD_SESSION_MINUTES', - default: 60, - description: - 'Minutes to keep a session active. Will extended by this amount each request.' + default: 60 }, { key: 'ip', envVar: 'SQLPAD_IP', - default: '0.0.0.0', - description: - 'IP address to bind to. By default SQLPad will listen from all available addresses (0.0.0.0).' + default: '0.0.0.0' }, { key: 'port', envVar: 'SQLPAD_PORT', - default: 80, - description: 'Port for SQLPad to listen on.' + default: 80 }, { key: 'systemdSocket', envVar: 'SQLPAD_SYSTEMD_SOCKET', - default: false, - description: 'Acquire socket from systemd if available' + default: false }, { key: 'httpsPort', envVar: 'SQLPAD_HTTPS_PORT', - default: 443, - description: 'Port for SQLPad to listen on.' + default: 443 }, { key: 'dbPath', envVar: 'SQLPAD_DB_PATH', - default: '', - description: - 'Directory to store SQLPad embedded database content. This includes queries, users, query result cache files, etc.' + default: '' }, { key: 'baseUrl', envVar: 'SQLPAD_BASE_URL', - default: '', - description: - "Path to mount sqlpad app following domain. Example, if '/sqlpad' is provided queries page would be mydomain.com/sqlpad/queries" + default: '' }, { key: 'passphrase', envVar: 'SQLPAD_PASSPHRASE', - default: "At least the sensitive bits won't be plain text?", - description: - 'A string of text used to encrypt sensitive values when stored on disk.' + default: "At least the sensitive bits won't be plain text?" }, { key: 'certPassphrase', envVar: 'CERT_PASSPHRASE', - default: '', - description: 'Passphrase for your SSL certification file' + default: '' }, { key: 'keyPath', envVar: 'KEY_PATH', - default: '', - description: 'Absolute path to where SSL certificate key is stored' + default: '' }, { key: 'certPath', envVar: 'CERT_PATH', - default: '', - description: 'Absolute path to where SSL certificate is stored' + default: '' }, { key: 'admin', envVar: 'SQLPAD_ADMIN', - default: '', - description: 'Email address to whitelist/give admin permissions to' + default: '' }, { key: 'debug', envVar: 'SQLPAD_DEBUG', - default: false, - description: 'Add a variety of logging to console while running SQLPad' + default: false }, { key: 'googleClientId', envVar: 'GOOGLE_CLIENT_ID', - description: - "Google Client ID used for OAuth setup. Authorized redirect URI for sqlpad is '[baseurl]/auth/google/callback'", default: '' }, { key: 'googleClientSecret', envVar: 'GOOGLE_CLIENT_SECRET', - description: - "Google Client Secret used for OAuth setup. Authorized redirect URI for sqlpad is '[baseurl]/auth/google/callback'", default: '' }, { key: 'publicUrl', envVar: 'PUBLIC_URL', - description: - 'Public URL used for OAuth setup and email links. Protocol expected. Example: https://mysqlpad.com', default: '' }, { key: 'disableUserpassAuth', envVar: 'DISABLE_USERPASS_AUTH', - description: - 'Set to TRUE to disable built-in user authentication. Use to restrict auth to OAuth only.', default: false }, { key: 'allowCsvDownload', envVar: 'SQLPAD_ALLOW_CSV_DOWNLOAD', - description: 'Enable csv and xlsx downloads.', - options: [true, false], default: true }, { key: 'editorWordWrap', envVar: 'SQLPAD_EDITOR_WORD_WRAP', - description: 'Enable word wrapping in SQL editor.', - options: [true, false], default: false }, { key: 'queryResultMaxRows', envVar: 'SQLPAD_QUERY_RESULT_MAX_ROWS', - description: 'By default query results are limited to 50,000 records.', default: 50000 }, { key: 'slackWebhook', envVar: 'SQLPAD_SLACK_WEBHOOK', - description: 'Supply incoming Slack webhook URL to post query when saved.', default: '' }, { key: 'tableChartLinksRequireAuth', envVar: 'SQLPAD_TABLE_CHART_LINKS_REQUIRE_AUTH', - description: - 'When false, table and chart result links will be operational without login.', - options: [true, false], default: true }, { key: 'smtpFrom', envVar: 'SQLPAD_SMTP_FROM', - description: - 'From email address for SMTP. Required in order to send invitation emails.', default: '' }, { key: 'smtpHost', envVar: 'SQLPAD_SMTP_HOST', - description: - 'Host address for SMTP. Required in order to send invitation emails.', default: '' }, { key: 'smtpPort', envVar: 'SQLPAD_SMTP_PORT', - description: 'Port for SMTP. Required in order to send invitation emails.', default: '' }, { key: 'smtpSecure', envVar: 'SQLPAD_SMTP_SECURE', - options: [true, false], - description: 'Toggle to use secure connection when using SMTP.', default: true }, { key: 'smtpUser', envVar: 'SQLPAD_SMTP_USER', - description: - 'Username for SMTP. Required in order to send invitation emails.', default: '' }, { key: 'smtpPassword', envVar: 'SQLPAD_SMTP_PASSWORD', - description: 'Password for SMTP.', default: '' }, { key: 'whitelistedDomains', envVar: 'WHITELISTED_DOMAINS', - description: - 'Allows pre-approval of email domains. Delimit multiple domains by empty space.', default: '' }, { key: 'samlEntryPoint', envVar: 'SAML_ENTRY_POINT', - description: 'SAML Entry point URL', default: '' }, { key: 'samlIssuer', envVar: 'SAML_ISSUER', - description: 'SAML Issuer', default: '' }, { key: 'samlCallbackUrl', envVar: 'SAML_CALLBACK_URL', - description: 'SAML callback URL', default: '' }, { key: 'samlCert', envVar: 'SAML_CERT', - description: 'SAML certificate in Base64', default: '' }, { key: 'samlAuthContext', envVar: 'SAML_AUTH_CONTEXT', - description: 'SAML authentication context URL', default: '' } ]; From 57d2538203841fd560bddbb4fc813d6173eebe48 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sun, 15 Sep 2019 21:04:19 -0500 Subject: [PATCH 138/855] Add admin password setting (#472) --- README.md | 4 +++ config-example.ini | 3 ++ config-example.json | 1 + server/lib/config/configItems.js | 5 +++ server/lib/db.js | 11 +++++- server/lib/passhash.js | 34 +++++++++++++++++++ server/middleware/passport.js | 8 +++-- server/models/User.js | 57 +++++++++----------------------- 8 files changed, 78 insertions(+), 45 deletions(-) create mode 100644 server/lib/passhash.js diff --git a/README.md b/README.md index 3418cf475..c05ddc344 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,10 @@ These defaults have been removed in version 3. Email address to whitelist/give admin permissions to Env var: `SQLPAD_ADMIN` +**adminPassword** +Password to set for admin email address on application start. Requires `admin` setting to also be provided. +Env var: `SQLPAD_ADMIN_PASSWORD` + **allowCsvDownload** Enable csv and xlsx downloads. Env var: `SQLPAD_ALLOW_CSV_DOWNLOAD` diff --git a/config-example.ini b/config-example.ini index 6b9f58d2d..8aa071b29 100644 --- a/config-example.ini +++ b/config-example.ini @@ -1,6 +1,9 @@ ; Email address to whitelist/give admin permissions to admin="" +; Password to set for admin email address on application start. Requires `admin` setting to also be provided. +adminPassword="" + ; Enable csv and xlsx downloads. allowCsvDownload="true" diff --git a/config-example.json b/config-example.json index 0d029937a..bbd993007 100644 --- a/config-example.json +++ b/config-example.json @@ -1,5 +1,6 @@ { "admin": "", + "adminPassword": "", "allowCsvDownload": true, "baseUrl": "", "certPassphrase": "", diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index a8e5abeb7..8b08fab5f 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -69,6 +69,11 @@ const configItems = [ envVar: 'SQLPAD_ADMIN', default: '' }, + { + key: 'adminPassword', + envVar: 'SQLPAD_ADMIN_PASSWORD', + default: '' + }, { key: 'debug', envVar: 'SQLPAD_DEBUG', diff --git a/server/lib/db.js b/server/lib/db.js index 453811bb1..8447f7e12 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -2,8 +2,10 @@ const path = require('path'); const datastore = require('nedb-promise'); const mkdirp = require('mkdirp'); const config = require('./config'); +const passhash = require('../lib/passhash'); const admin = config.get('admin'); +const adminPassword = config.get('adminPassword'); const dbPath = config.get('dbPath'); const debug = config.get('debug'); const port = config.get('port'); @@ -55,7 +57,11 @@ async function ensureAdmin() { // Then write to console that the person should visit the signup url to finish registration. const user = await db.users.findOne({ email: adminEmail }); if (user) { - await db.users.update({ _id: user._id }, { $set: { role: 'admin' } }, {}); + const changes = { role: 'admin' }; + if (adminPassword) { + changes.passhash = passhash.getPasshash(adminPassword); + } + await db.users.update({ _id: user._id }, { $set: changes }, {}); console.log(adminEmail + ' should now have admin access.'); return; } @@ -64,6 +70,9 @@ async function ensureAdmin() { email: adminEmail, role: 'admin' }; + if (adminPassword) { + newAdmin.passhash = passhash.getPasshash(adminPassword); + } await db.users.insert(newAdmin); console.log(`\n${adminEmail} has been whitelisted with admin access.`); console.log( diff --git a/server/lib/passhash.js b/server/lib/passhash.js new file mode 100644 index 000000000..8f8d77907 --- /dev/null +++ b/server/lib/passhash.js @@ -0,0 +1,34 @@ +const bcrypt = require('bcrypt-nodejs'); + +/** + * Compares password string to passhash string + * @param {string} password + * @param {string} passhash + * @returns {Promise} + */ +function comparePassword(password, passhash) { + return new Promise((resolve, reject) => { + bcrypt.compare(password, passhash, (err, isMatch) => { + if (err) { + return reject(err); + } + resolve(isMatch); + }); + }); +} + +function getPasshash(password) { + return new Promise((resolve, reject) => { + bcrypt.hash(password, null, null, (err, hash) => { + if (err) { + return reject(err); + } + return resolve(hash); + }); + }); +} + +module.exports = { + comparePassword, + getPasshash +}; diff --git a/server/middleware/passport.js b/server/middleware/passport.js index ce1dcfa33..1581c2e15 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -6,6 +6,7 @@ const SamlStrategy = require('passport-saml').Strategy; const User = require('../models/User.js'); const config = require('../lib/config'); const checkWhitelist = require('../lib/check-whitelist.js'); +const passhash = require('../lib/passhash.js'); const baseUrl = config.get('baseUrl'); const googleClientId = config.get('googleClientId'); @@ -52,7 +53,10 @@ if (!disableUserpassAuth) { if (!user) { return done(null, false, { message: 'wrong email or password' }); } - const isMatch = await user.comparePasswordToHash(password); + const isMatch = await passhash.comparePassword( + password, + user.passhash + ); if (isMatch) { return done(null, { id: user._id, @@ -76,7 +80,7 @@ if (!disableUserpassAuth) { if (!user) { return callback(null, false); } - const isMatch = await user.comparePasswordToHash(password); + const isMatch = await passhash.comparePassword(password, user.passhash); if (!isMatch) { return callback(null, false); } diff --git a/server/models/User.js b/server/models/User.js index f1301494f..486540aab 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -1,6 +1,6 @@ const Joi = require('joi'); const db = require('../lib/db.js'); -const bcrypt = require('bcrypt-nodejs'); +const passhash = require('../lib/passhash.js'); const schema = { _id: Joi.string().optional(), // will be auto-gen by nedb @@ -33,51 +33,24 @@ function User(data) { this.signupDate = data.signupDate; } -User.prototype.save = function save() { +User.prototype.save = async function save() { const self = this; this.modifiedDate = new Date(); - return Promise.resolve() - .then(() => { - // if user has password set, we need to hash it before saving - if (this.password) { - return new Promise((resolve, reject) => { - bcrypt.hash(this.password, null, null, (err, hash) => { - if (err) { - return reject(err); - } - self.passhash = hash; - return resolve(); - }); - }); - } - }) - .then(() => { - // validate and save - const joiResult = Joi.validate(self, schema); - if (joiResult.error) { - return Promise.reject(joiResult.error); - } - return db.users - .update({ email: self.email }, joiResult.value, { upsert: true }) - .then(() => User.findOneByEmail(self.email)); - }); -}; -/** - * Compare password to hash. Returns promise - * @param {string} password - */ -User.prototype.comparePasswordToHash = function comparePasswordToHash( - password -) { - return new Promise((resolve, reject) => { - bcrypt.compare(password, this.passhash, (err, isMatch) => { - if (err) { - return reject(err); - } - resolve(isMatch); - }); + if (this.password) { + this.passhash = await passhash.getPasshash(this.password); + } + + // validate and save + const joiResult = Joi.validate(self, schema); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } + + await db.users.update({ email: self.email }, joiResult.value, { + upsert: true }); + return User.findOneByEmail(self.email); }; /* Query methods From 8d81de9e423deb27aacb87c95068ef9988cd84dd Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 30 Sep 2019 20:05:40 -0500 Subject: [PATCH 139/855] Add cookie name config setting (#473) --- config-example.ini | 3 +++ config-example.json | 1 + server/app.js | 4 +++- server/lib/config/configItems.js | 5 +++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/config-example.ini b/config-example.ini index 8aa071b29..de9283606 100644 --- a/config-example.ini +++ b/config-example.ini @@ -16,6 +16,9 @@ certPassphrase="" ; Absolute path to where SSL certificate is stored certPath="" +; Name used for cookie. If running multiple SQLPads on same domain, set to different values +cookieName="sqlpad.sid" + ; Secret used to sign cookies cookieSecret="secret-used-to-sign-cookies-please-set-and-make-strong" diff --git a/config-example.json b/config-example.json index bbd993007..03beeee7a 100644 --- a/config-example.json +++ b/config-example.json @@ -5,6 +5,7 @@ "baseUrl": "", "certPassphrase": "", "certPath": "", + "cookieName": "sqlpad.sid", "cookieSecret": "secret-used-to-sign-cookies-please-set-and-make-strong", "dbPath": "", "debug": false, diff --git a/server/app.js b/server/app.js index 5dbb7a7a0..8e00a617a 100644 --- a/server/app.js +++ b/server/app.js @@ -12,6 +12,7 @@ const googleClientSecret = config.get('googleClientSecret'); const publicUrl = config.get('publicUrl'); const dbPath = config.get('dbPath'); const debug = config.get('debug'); +const cookieName = config.get('cookieName'); const cookieSecret = config.get('cookieSecret'); const sessionMinutes = config.get('sessionMinutes'); @@ -62,7 +63,8 @@ app.use( resave: true, rolling: true, cookie: { maxAge: 1000 * 60 * sessionMinutes }, - secret: cookieSecret + secret: cookieSecret, + name: cookieName }) ); diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index 8b08fab5f..d49e2bc0d 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -4,6 +4,11 @@ const configItems = [ envVar: 'SQLPAD_CONFIG', default: '' }, + { + key: 'cookieName', + envVar: 'SQLPAD_COOKIE_NAME', + default: 'sqlpad.sid' + }, { key: 'cookieSecret', envVar: 'SQLPAD_COOKIE_SECRET', From 09342de2505a3fc54317a8f64f89e572157474c8 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 30 Sep 2019 20:07:45 -0500 Subject: [PATCH 140/855] Add cookieName to README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c05ddc344..dd16b6074 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,11 @@ Env var: `CERT_PASSPHRASE` Absolute path to where SSL certificate is stored Env var: `CERT_PATH` +**cookieName** +Name used for cookie. If running multiple SQLPads on same domain, set to different values. +Env var: `SQLPAD_COOKIE_NAME` +Default: `sqlpad.sid` + **cookieSecret** Secret used to sign cookies Env var: `SQLPAD_COOKIE_SECRET` From b6ff28d3f687e3ed23e13d56b2e40548389af8fa Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 30 Sep 2019 20:09:53 -0500 Subject: [PATCH 141/855] v3.1.0 --- CHANGELOG.md | 7 +++++++ client/package-lock.json | 2 +- client/package.json | 2 +- package-lock.json | 2 +- package.json | 2 +- server/package-lock.json | 2 +- server/package.json | 2 +- 7 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 274d7e33d..c9f439f0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 3.1.0 + +### September 30, 2019 + +- Add cookie name config setting +- Add admin password setting + ## 3.0.2 ### September 1, 2019 diff --git a/client/package-lock.json b/client/package-lock.json index 18711b3d5..bb5d4b2c8 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "3.0.2", + "version": "3.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index 311d2a0b7..9f1941da9 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "3.0.2", + "version": "3.1.0", "private": true, "proxy": "http://localhost:3010", "dependencies": { diff --git a/package-lock.json b/package-lock.json index eccbb8864..326a71acf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "3.0.2", + "version": "3.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 67d42cd86..5630516ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "3.0.2", + "version": "3.1.0", "private": true, "devDependencies": { "husky": "^3.0.5", diff --git a/server/package-lock.json b/server/package-lock.json index 21012f547..eaecbaed2 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "3.0.2", + "version": "3.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index 4b75f75ce..58f370b8a 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "3.0.2", + "version": "3.1.0", "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { From d9cb704481754db8e70d59dd66c21ecdd6881e7e Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 21:20:02 -0500 Subject: [PATCH 142/855] Convert Model objects to utility functions (#474) * Use functions for schemaInfo and resultCache data access * Move pushQueryToSlack to a simple function * Remove logAccess method It is unused * Convert Query model to queries util functions * Convert User model to utility functions --- server/lib/pushQueryToSlack.js | 33 ++++++ server/middleware/passport.js | 19 ++-- server/models/Cache.js | 136 ------------------------ server/models/Query.js | 140 ------------------------- server/models/User.js | 85 --------------- server/models/queries.js | 103 ++++++++++++++++++ server/models/resultCache.js | 124 ++++++++++++++++++++++ server/models/schemaInfo.js | 55 ++++++++++ server/models/users.js | 86 +++++++++++++++ server/routes/app.js | 4 +- server/routes/download-results.js | 20 ++-- server/routes/forgot-password.js | 6 +- server/routes/password-reset.js | 6 +- server/routes/queries.js | 69 ++++++------ server/routes/query-result.js | 27 ++--- server/routes/schema-info.js | 29 ++--- server/routes/signup-signin-signout.js | 43 ++++---- server/routes/tags.js | 4 +- server/routes/users.js | 17 ++- server/test/api/password-reset.js | 6 +- server/test/utils.js | 5 +- 21 files changed, 521 insertions(+), 496 deletions(-) create mode 100644 server/lib/pushQueryToSlack.js delete mode 100644 server/models/Cache.js delete mode 100644 server/models/Query.js delete mode 100644 server/models/User.js create mode 100644 server/models/queries.js create mode 100644 server/models/resultCache.js create mode 100644 server/models/schemaInfo.js create mode 100644 server/models/users.js diff --git a/server/lib/pushQueryToSlack.js b/server/lib/pushQueryToSlack.js new file mode 100644 index 000000000..9b937e6cc --- /dev/null +++ b/server/lib/pushQueryToSlack.js @@ -0,0 +1,33 @@ +const config = require('./config'); +const request = require('request'); + +function pushQueryToSlack(query) { + const SLACK_WEBHOOK = config.get('slackWebhook'); + if (SLACK_WEBHOOK) { + const PUBLIC_URL = config.get('publicUrl'); + const BASE_URL = config.get('baseUrl'); + + const options = { + method: 'post', + body: { + text: `New Query <${PUBLIC_URL}${BASE_URL}/queries/${query._id}|${ + query.name + }> + saved by ${query.modifiedBy} on SQLPad + ${'```'} + ${query.queryText} + ${'```'}` + }, + json: true, + url: SLACK_WEBHOOK + }; + request(options, function(err) { + if (err) { + console.error('Something went wrong while sending to Slack.'); + console.error(err); + } + }); + } +} + +module.exports = pushQueryToSlack; diff --git a/server/middleware/passport.js b/server/middleware/passport.js index 1581c2e15..b00206732 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -3,7 +3,7 @@ const PassportLocalStrategy = require('passport-local').Strategy; const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const BasicStrategy = require('passport-http').BasicStrategy; const SamlStrategy = require('passport-saml').Strategy; -const User = require('../models/User.js'); +const usersUtil = require('../models/users.js'); const config = require('../lib/config'); const checkWhitelist = require('../lib/check-whitelist.js'); const passhash = require('../lib/passhash.js'); @@ -26,7 +26,7 @@ passport.serializeUser(function(user, done) { passport.deserializeUser(async function(id, done) { try { - const user = await User.findOneById(id); + const user = await usersUtil.findOneById(id); if (user) { return done(null, { id: user._id, @@ -49,7 +49,7 @@ if (!disableUserpassAuth) { }, async function passportLocalStrategyHandler(email, password, done) { try { - const user = await User.findOneByEmail(email); + const user = await usersUtil.findOneByEmail(email); if (!user) { return done(null, false, { message: 'wrong email or password' }); } @@ -76,7 +76,7 @@ if (!disableUserpassAuth) { passport.use( new BasicStrategy(async function(username, password, callback) { try { - const user = await User.findOneByEmail(username); + const user = await usersUtil.findOneByEmail(username); if (!user) { return callback(null, false); } @@ -124,7 +124,7 @@ if (samlEntryPoint) { p[ 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' ]; - const user = await User.findOneByEmail(email); + const user = await usersUtil.findOneByEmail(email); console.log(`User logged in with SAML as ${email}`); if (!user) { return done(null, false); @@ -156,24 +156,23 @@ async function passportGoogleStrategyHandler( try { let [openAdminRegistration, user] = await Promise.all([ - User.adminRegistrationOpen(), - User.findOneByEmail(email) + usersUtil.adminRegistrationOpen(), + usersUtil.findOneByEmail(email) ]); if (user) { user.signupDate = new Date(); - const newUser = await user.save(); + const newUser = await usersUtil.save(user); newUser.id = newUser._id; return done(null, newUser); } const whitelistedDomains = config.get('whitelistedDomains'); if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { - user = new User({ + const newUser = await usersUtil.save({ email, role: openAdminRegistration ? 'admin' : 'editor', signupDate: new Date() }); - const newUser = await user.save(); newUser.id = newUser._id; return done(null, newUser); } diff --git a/server/models/Cache.js b/server/models/Cache.js deleted file mode 100644 index b2f4e5997..000000000 --- a/server/models/Cache.js +++ /dev/null @@ -1,136 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const Joi = require('joi'); -const db = require('../lib/db.js'); -const xlsx = require('node-xlsx'); -const json2csv = require('json2csv'); -const config = require('../lib/config'); -const dbPath = config.get('dbPath'); - -const schema = { - _id: Joi.string().optional(), // will be auto-gen by nedb - cacheKey: Joi.string().required(), // unique, manually provided - expiration: Joi.date().optional(), // item and associated cache files are removed on expiration - queryName: Joi.string().optional(), // used for file names if a file is downloaded - schema: Joi.any().optional(), // schema tree in JSON if that's what we're caching - createdDate: Joi.date().default(new Date(), 'time of creation'), - modifiedDate: Joi.date().default(new Date(), 'time of modification') -}; - -function Cache(data) { - this._id = data._id; - this.cacheKey = data.cacheKey; - this.expiration = data.expiration; - this.queryName = data.queryName; - this.schema = data.schema; // schema tree in JSON if that's what we're caching - this.createdDate = data.createdDate; - this.modifiedDate = data.modifiedDate; -} - -Cache.prototype.xlsxFilePath = function xlsxFilePath() { - return path.join(dbPath, '/cache/', this.cacheKey + '.xlsx'); -}; - -Cache.prototype.csvFilePath = function csvFilePath() { - return path.join(dbPath, '/cache/', this.cacheKey + '.csv'); -}; - -Cache.prototype.filePaths = function filePaths() { - // these may not exist. - // eventually actual files should be stored on the cache item - return [this.xlsxFilePath(), this.csvFilePath()]; -}; - -Cache.prototype.removeFiles = function removeFiles() { - const filepaths = this.filePaths(); - filepaths.forEach(fp => { - if (fs.existsSync(fp)) { - fs.unlinkSync(fp); - } - }); -}; - -Cache.prototype.expire = function expire() { - this.removeFiles(); - return db.cache.remove({ _id: this._id }, {}); -}; - -Cache.prototype.writeXlsx = function writeXlsx(queryResult) { - const self = this; - // loop through rows and build out an array of arrays - const resultArray = []; - resultArray.push(queryResult.fields); - for (let i = 0; i < queryResult.rows.length; i++) { - const row = []; - for (let c = 0; c < queryResult.fields.length; c++) { - const fieldName = queryResult.fields[c]; - row.push(queryResult.rows[i][fieldName]); - } - resultArray.push(row); - } - const xlsxBuffer = xlsx.build([{ name: 'query-results', data: resultArray }]); - return new Promise(resolve => { - fs.writeFile(self.xlsxFilePath(), xlsxBuffer, function(err) { - // if there's an error log it but otherwise continue on - // we can still send results even if download file failed to create - if (err) { - console.log(err); - } - return resolve(); - }); - }); -}; - -Cache.prototype.writeCsv = function writeCsv(queryResult) { - const self = this; - return new Promise(resolve => { - json2csv({ data: queryResult.rows, fields: queryResult.fields }, function( - err, - csv - ) { - if (err) { - console.log(err); - return resolve(); - } - fs.writeFile(self.csvFilePath(), csv, function(err) { - if (err) { - console.log(err); - } - return resolve(); - }); - }); - }); -}; - -Cache.prototype.save = function save() { - const self = this; - this.modifiedDate = new Date(); - const joiResult = Joi.validate(self, schema); - if (joiResult.error) { - return Promise.reject(joiResult.error); - } - return db.cache - .update({ cacheKey: self.cacheKey }, joiResult.value, { upsert: true }) - .then(() => Cache.findOneByCacheKey(self.cacheKey)); -}; - -/* Query methods -============================================================================== */ -Cache.findOneByCacheKey = cacheKey => - db.cache.findOne({ cacheKey }).then(doc => doc && new Cache(doc)); - -Cache.findExpired = () => - db.cache - .find({ expiration: { $lt: new Date() } }) - .then(docs => docs.map(doc => new Cache(doc))); - -Cache.removeExpired = () => - Cache.findExpired() - .then(caches => Promise.all(caches.map(cache => cache.expire()))) - .catch(console.error); - -// Every five minutes check and expire cache -const FIVE_MINUTES = 1000 * 60 * 5; -setInterval(Cache.removeExpired, FIVE_MINUTES); - -module.exports = Cache; diff --git a/server/models/Query.js b/server/models/Query.js deleted file mode 100644 index 8bc85fa2c..000000000 --- a/server/models/Query.js +++ /dev/null @@ -1,140 +0,0 @@ -const db = require('../lib/db.js'); -const config = require('../lib/config'); -const Joi = require('joi'); -const request = require('request'); - -/* -"chartConfiguration": { - "chartType": "line", - "fields": { - "x": "created_month", - "y": "package_count", - "split": "keyword", - "xFacet": "", - "yFacet": "keyword", - "trendline": "true" - } -} -*/ - -const schema = { - _id: Joi.string().optional(), // generated by nedb - name: Joi.string().required(), - tags: Joi.array() - .items(Joi.string().empty('')) - .sparse() - .optional(), - connectionId: Joi.string() - .optional() - .empty(''), - queryText: Joi.string() - .optional() - .empty(''), - chartConfiguration: Joi.object({ - chartType: Joi.string() - .optional() - .empty(''), - // key value pairings. key=chart property, value=field mapped to property - fields: Joi.object() - .unknown(true) - .optional() - }).optional(), - createdDate: Joi.date().default(new Date(), 'time of creation'), - modifiedDate: Joi.date().default(new Date(), 'time of modification'), - createdBy: Joi.string().required(), - modifiedBy: Joi.string().required(), - lastAccessDate: Joi.date().default(new Date(), 'time of last access') -}; - -function Query(data) { - this._id = data._id; - this.name = data.name; - this.tags = data.tags; - this.connectionId = data.connectionId; - this.queryText = data.queryText; - this.chartConfiguration = data.chartConfiguration; - this.createdDate = data.createdDate; - this.createdBy = data.createdBy; - this.modifiedDate = data.modifiedDate; - this.modifiedBy = data.modifiedBy; - this.lastAccessDate = data.lastAccessedDate; -} - -Query.prototype.save = function save() { - const self = this; - this.modifiedDate = new Date(); - this.lastAccessDate = new Date(); - // clean tags if present - // sqlpad v1 saved a lot of bad inputs - if (Array.isArray(self.tags)) { - self.tags = self.tags - .filter(tag => { - return typeof tag === 'string' && tag.trim() !== ''; - }) - .map(tag => { - return tag.trim(); - }); - } - const joiResult = Joi.validate(self, schema); - if (joiResult.error) { - return Promise.reject(joiResult.error); - } - if (self._id) { - return db.queries - .update({ _id: self._id }, joiResult.value, { upsert: true }) - .then(() => Query.findOneById(self._id)); - } - return db.queries.insert(joiResult.value).then(doc => new Query(doc)); -}; - -Query.prototype.pushQueryToSlackIfSetup = function() { - const SLACK_WEBHOOK = config.get('slackWebhook'); - if (SLACK_WEBHOOK) { - const PUBLIC_URL = config.get('publicUrl'); - const BASE_URL = config.get('baseUrl'); - const options = { - method: 'post', - body: { - text: `New Query <${PUBLIC_URL}${BASE_URL}/queries/${this._id}|${ - this.name - }> - saved by ${this.modifiedBy} on SQLPad - ${'```'} - ${this.queryText} - ${'```'}` - }, - json: true, - url: SLACK_WEBHOOK - }; - request(options, function(err) { - if (err) { - console.error('Something went wrong while sending to Slack.'); - console.error(err); - } - }); - } -}; - -/* Query methods -============================================================================== */ -Query.findOneById = id => - db.queries.findOne({ _id: id }).then(doc => new Query(doc)); - -Query.findAll = () => - db.queries.find({}).then(docs => docs.map(doc => new Query(doc))); - -Query.findByFilter = filter => - db.queries.find(filter).then(docs => docs.map(doc => new Query(doc))); - -Query.prototype.logAccess = function logAccess() { - const self = this; - return db.queries.update( - { _id: self._id }, - { $set: { lastAccessedDate: new Date() } }, - {} - ); -}; - -Query.removeOneById = id => db.queries.remove({ _id: id }); - -module.exports = Query; diff --git a/server/models/User.js b/server/models/User.js deleted file mode 100644 index 486540aab..000000000 --- a/server/models/User.js +++ /dev/null @@ -1,85 +0,0 @@ -const Joi = require('joi'); -const db = require('../lib/db.js'); -const passhash = require('../lib/passhash.js'); - -const schema = { - _id: Joi.string().optional(), // will be auto-gen by nedb - email: Joi.string().required(), - role: Joi.string() - .lowercase() - .allow('admin', 'editor', 'viewer'), - passwordResetId: Joi.string() - .guid() - .optional() - .empty(''), - passhash: Joi.string().optional(), // may not exist if user hasn't signed up yet - password: Joi.string() - .optional() - .strip(), - createdDate: Joi.date().default(new Date(), 'time of creation'), - modifiedDate: Joi.date().default(new Date(), 'time of modification'), - signupDate: Joi.date().optional() -}; - -function User(data) { - this._id = data._id; - this.email = data.email; - this.role = data.role; - this.passwordResetId = data.passwordResetId; - this.passhash = data.passhash; - this.password = data.password; - this.createdDate = data.createdDate; - this.modifiedDate = data.modifiedDate; - this.signupDate = data.signupDate; -} - -User.prototype.save = async function save() { - const self = this; - this.modifiedDate = new Date(); - - if (this.password) { - this.passhash = await passhash.getPasshash(this.password); - } - - // validate and save - const joiResult = Joi.validate(self, schema); - if (joiResult.error) { - return Promise.reject(joiResult.error); - } - - await db.users.update({ email: self.email }, joiResult.value, { - upsert: true - }); - return User.findOneByEmail(self.email); -}; - -/* Query methods -============================================================================== */ -User.findOneByEmail = email => - db.users - .findOne({ email: { $regex: new RegExp(email, 'i') } }) - .then(doc => doc && new User(doc)); - -User.findOneById = id => - db.users.findOne({ _id: id }).then(doc => doc && new User(doc)); - -User.findOneByPasswordResetId = id => - db.users.findOne({ passwordResetId: id }).then(doc => doc && new User(doc)); - -User.findAll = () => - db.users - .cfind({}, { password: 0, passhash: 0 }) - .sort({ email: 1 }) - .exec() - .then(docs => docs.map(doc => new User(doc))); - -/** - * Returns boolean regarding whether admin registration should be open or not - * @returns {Promise} administrationOpen - */ -User.adminRegistrationOpen = () => - db.users.findOne({ role: 'admin' }).then(doc => !doc); - -User.removeOneById = id => db.users.remove({ _id: id }); - -module.exports = User; diff --git a/server/models/queries.js b/server/models/queries.js new file mode 100644 index 000000000..438f32946 --- /dev/null +++ b/server/models/queries.js @@ -0,0 +1,103 @@ +const db = require('../lib/db.js'); +const Joi = require('joi'); + +/* +"chartConfiguration": { + "chartType": "line", + "fields": { + "x": "created_month", + "y": "package_count", + "split": "keyword", + "xFacet": "", + "yFacet": "keyword", + "trendline": "true" + } +} +*/ + +const schema = { + _id: Joi.string().optional(), // generated by nedb + name: Joi.string().required(), + tags: Joi.array() + .items(Joi.string().empty('')) + .sparse() + .optional(), + connectionId: Joi.string() + .optional() + .empty(''), + queryText: Joi.string() + .optional() + .empty(''), + chartConfiguration: Joi.object({ + chartType: Joi.string() + .optional() + .empty(''), + // key value pairings. key=chart property, value=field mapped to property + fields: Joi.object() + .unknown(true) + .optional() + }).optional(), + createdDate: Joi.date().default(new Date(), 'time of creation'), + modifiedDate: Joi.date().default(new Date(), 'time of modification'), + createdBy: Joi.string().required(), + modifiedBy: Joi.string().required(), + lastAccessDate: Joi.date().default(new Date(), 'time of last access') +}; + +function findOneById(id) { + return db.queries.findOne({ _id: id }); +} + +function findAll() { + return db.queries.find({}); +} + +function findByFilter(filter) { + return db.queries.find(filter); +} + +function removeById(id) { + return db.queries.remove({ _id: id }); +} + +/** + * Save query object + * returns saved query object + * @param {object} query + */ +async function save(query) { + query.modifiedDate = new Date(); + query.lastAccessDate = new Date(); + + // clean tags if present + // sqlpad v1 saved a lot of bad inputs + if (Array.isArray(query.tags)) { + query.tags = query.tags + .filter(tag => { + return typeof tag === 'string' && tag.trim() !== ''; + }) + .map(tag => { + return tag.trim(); + }); + } + const joiResult = Joi.validate(query, schema); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } + if (query._id) { + await db.queries.update({ _id: query._id }, joiResult.value, { + upsert: true + }); + return findOneById(query._id); + } + const newQuery = await db.queries.insert(joiResult.value); + return newQuery; +} + +module.exports = { + findOneById, + findAll, + findByFilter, + removeById, + save +}; diff --git a/server/models/resultCache.js b/server/models/resultCache.js new file mode 100644 index 000000000..17531ec6b --- /dev/null +++ b/server/models/resultCache.js @@ -0,0 +1,124 @@ +const fs = require('fs'); +const path = require('path'); +const moment = require('moment'); +const sanitize = require('sanitize-filename'); +const db = require('../lib/db.js'); +const xlsx = require('node-xlsx'); +const json2csv = require('json2csv'); +const config = require('../lib/config'); +const dbPath = config.get('dbPath'); + +function xlsxFilePath(cacheKey) { + return path.join(dbPath, '/cache/', cacheKey + '.xlsx'); +} + +function csvFilePath(cacheKey) { + return path.join(dbPath, '/cache/', cacheKey + '.csv'); +} + +async function findOneByCacheKey(cacheKey) { + return db.cache.findOne({ cacheKey }); +} + +async function saveResultCache(cacheKey, queryName) { + if (!cacheKey) { + throw new Error('cacheKey required'); + } + const EIGHT_HOURS = 1000 * 60 * 60 * 8; + const expiration = new Date(Date.now() + EIGHT_HOURS); + const modifiedDate = new Date(); + + const savedQueryName = sanitize( + (queryName || 'SQLPad Query Results') + ' ' + moment().format('YYYY-MM-DD') + ); + + const doc = { cacheKey, expiration, queryName: savedQueryName, modifiedDate }; + + const existing = await findOneByCacheKey(cacheKey); + if (!existing) { + doc.createdDate = new Date(); + } + + return db.cache.update({ cacheKey }, doc, { + upsert: true + }); +} + +function writeXlsx(cacheKey, queryResult) { + // loop through rows and build out an array of arrays + const resultArray = []; + resultArray.push(queryResult.fields); + for (let i = 0; i < queryResult.rows.length; i++) { + const row = []; + for (let c = 0; c < queryResult.fields.length; c++) { + const fieldName = queryResult.fields[c]; + row.push(queryResult.rows[i][fieldName]); + } + resultArray.push(row); + } + const xlsxBuffer = xlsx.build([{ name: 'query-results', data: resultArray }]); + return new Promise(resolve => { + fs.writeFile(xlsxFilePath(cacheKey), xlsxBuffer, function(err) { + // if there's an error log it but otherwise continue on + // we can still send results even if download file failed to create + if (err) { + console.log(err); + } + return resolve(); + }); + }); +} + +function writeCsv(cacheKey, queryResult) { + return new Promise(resolve => { + json2csv({ data: queryResult.rows, fields: queryResult.fields }, function( + err, + csv + ) { + if (err) { + console.log(err); + return resolve(); + } + fs.writeFile(csvFilePath(cacheKey), csv, function(err) { + if (err) { + console.log(err); + } + return resolve(); + }); + }); + }); +} + +/* Result cache maintenance +============================================================================== */ + +async function removeExpired() { + try { + const docs = await db.cache.find({ expiration: { $lt: new Date() } }); + for (const doc of docs) { + const filepaths = [xlsxFilePath(doc.cacheKey), csvFilePath(doc.cacheKey)]; + filepaths.forEach(fp => { + if (fs.existsSync(fp)) { + fs.unlinkSync(fp); + } + }); + // eslint-disable-next-line no-await-in-loop + await db.cache.remove({ _id: doc._id }, {}); + } + } catch (error) { + console.log(error); + } +} + +// Every five minutes check and expire cache +const FIVE_MINUTES = 1000 * 60 * 5; +setInterval(removeExpired, FIVE_MINUTES); + +module.exports = { + csvFilePath, + findOneByCacheKey, + saveResultCache, + writeCsv, + writeXlsx, + xlsxFilePath +}; diff --git a/server/models/schemaInfo.js b/server/models/schemaInfo.js new file mode 100644 index 000000000..d85fb910d --- /dev/null +++ b/server/models/schemaInfo.js @@ -0,0 +1,55 @@ +const db = require('../lib/db.js'); + +function getCacheKey(connectionId) { + return 'schemaCache:' + connectionId; +} + +/** + * Get schemaInfo for connection id + * @param {string} connectionId + */ +async function getSchemaInfo(connectionId) { + const cacheKey = getCacheKey(connectionId); + const doc = await db.cache.findOne({ cacheKey }); + + if (!doc) { + return; + } + + let schemaInfo; + try { + schemaInfo = + typeof doc.schema === 'string' ? JSON.parse(doc.schema) : doc.schema; + } catch (error) { + // do nothing. valid schema will be updated + } + + return schemaInfo; +} + +/** + * Save schemaInfo to cache db object + * Schema needs to be stringified as JSON + * Column names could have dots in name (incompatible with nedb) + * @param {string} connectionId + * @param {object} schemaInfo + */ +async function saveSchemaInfo(connectionId, schemaInfo) { + const cacheKey = getCacheKey(connectionId); + if (schemaInfo && Object.keys(schemaInfo).length) { + const schema = JSON.stringify(schemaInfo); + const doc = { + cacheKey, + schema, + modifiedDate: new Date() + }; + return db.cache.update({ cacheKey }, doc, { + upsert: true + }); + } +} + +module.exports = { + getSchemaInfo, + saveSchemaInfo +}; diff --git a/server/models/users.js b/server/models/users.js new file mode 100644 index 000000000..5a0574598 --- /dev/null +++ b/server/models/users.js @@ -0,0 +1,86 @@ +const Joi = require('joi'); +const db = require('../lib/db.js'); +const passhash = require('../lib/passhash.js'); + +const schema = { + _id: Joi.string().optional(), // will be auto-gen by nedb + email: Joi.string().required(), + role: Joi.string() + .lowercase() + .allow('admin', 'editor', 'viewer'), + passwordResetId: Joi.string() + .guid() + .optional() + .empty(''), + passhash: Joi.string().optional(), // may not exist if user hasn't signed up yet + password: Joi.string() + .optional() + .strip(), + createdDate: Joi.date().default(new Date(), 'time of creation'), + modifiedDate: Joi.date().default(new Date(), 'time of modification'), + signupDate: Joi.date().optional() +}; + +async function save(data) { + if (!data.email) { + throw new Error('email required when saving user'); + } + + data.modifiedDate = new Date(); + + if (data.password) { + data.passhash = await passhash.getPasshash(data.password); + } + + const joiResult = Joi.validate(data, schema); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } + + await db.users.update({ email: data.email }, joiResult.value, { + upsert: true + }); + return findOneByEmail(data.email); +} + +function findOneByEmail(email) { + return db.users.findOne({ email: { $regex: new RegExp(email, 'i') } }); +} + +function findOneById(id) { + return db.users.findOne({ _id: id }); +} + +function findOneByPasswordResetId(passwordResetId) { + return db.users.findOne({ passwordResetId }); +} + +function findAll() { + return db.users + .cfind({}, { password: 0, passhash: 0 }) + .sort({ email: 1 }) + .exec(); +} + +/** + * Returns boolean regarding whether admin registration should be open or not + * @returns {Promise} administrationOpen + */ +async function adminRegistrationOpen() { + const doc = await db.users.findOne({ role: 'admin' }); + return !doc; +} + +function removeById(id) { + return db.users.remove({ _id: id }); +} + +module.exports = { + findOneByEmail, + findOneById, + findOneByPasswordResetId, + findAll, + adminRegistrationOpen, + removeById, + save +}; diff --git a/server/routes/app.js b/server/routes/app.js index 2faaa92aa..6ae5a1a86 100644 --- a/server/routes/app.js +++ b/server/routes/app.js @@ -1,6 +1,6 @@ const router = require('express').Router(); const packageJson = require('../package.json'); -const User = require('../models/User.js'); +const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); @@ -9,7 +9,7 @@ const config = require('../lib/config'); // the root of a domain or if there is a base-url provided in the config router.get('*/api/app', async (req, res) => { try { - const adminRegistrationOpen = await User.adminRegistrationOpen(); + const adminRegistrationOpen = await usersUtil.adminRegistrationOpen(); const currentUser = req.isAuthenticated() && req.user ? { diff --git a/server/routes/download-results.js b/server/routes/download-results.js index 427219f2b..6847aa9b5 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -1,14 +1,15 @@ const fs = require('fs'); const router = require('express').Router(); -const Cache = require('../models/Cache.js'); +const resultCache = require('../models/resultCache.js'); const config = require('../lib/config'); router.get('/download-results/:cacheKey.csv', async function(req, res, next) { + const { cacheKey } = req.params; try { if (config.get('allowCsvDownload')) { - const cache = await Cache.findOneByCacheKey(req.params.cacheKey); + const cache = await resultCache.findOneByCacheKey(cacheKey); if (!cache) { - return next(new Error('Cache not found')); + return next(new Error('Result cache not found')); } let filename = cache.queryName + '.csv'; res.setHeader( @@ -16,7 +17,9 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { 'attachment; filename="' + encodeURIComponent(filename) + '"' ); res.setHeader('Content-Type', 'text/csv'); - fs.createReadStream(cache.csvFilePath()).pipe(res); + fs.createReadStream(resultCache.csvFilePath(cacheKey)).pipe(res); + } else { + return next(new Error('CSV download disabled')); } } catch (error) { console.error(error); @@ -26,11 +29,12 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { }); router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { + const { cacheKey } = req.params; try { if (config.get('allowCsvDownload')) { - const cache = await Cache.findOneByCacheKey(req.params.cacheKey); + const cache = await resultCache.findOneByCacheKey(cacheKey); if (!cache) { - return next(new Error('Cache not found')); + return next(new Error('Result cache not found')); } let filename = cache.queryName + '.xlsx'; res.setHeader( @@ -41,7 +45,9 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ); - fs.createReadStream(cache.xlsxFilePath()).pipe(res); + fs.createReadStream(resultCache.xlsxFilePath(cacheKey)).pipe(res); + } else { + return next(new Error('XLSX download disabled')); } } catch (error) { console.error(error); diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index b7ba2620c..8870fda28 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -1,6 +1,6 @@ const router = require('express').Router(); const uuid = require('uuid'); -const User = require('../models/User.js'); +const usersUtil = require('../models/users.js'); const email = require('../lib/email'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); @@ -14,7 +14,7 @@ router.post('/api/forgot-password', async function(req, res) { } try { - const user = await User.findOneByEmail(req.body.email); + const user = await usersUtil.findOneByEmail(req.body.email); // If user not found send success regardless // This is not a user-validation service @@ -24,7 +24,7 @@ router.post('/api/forgot-password', async function(req, res) { user.passwordResetId = uuid.v4(); - await user.save(); + await usersUtil.save(user); // Send email, but do not block response const resetPath = `/password-reset/${user.passwordResetId}`; diff --git a/server/routes/password-reset.js b/server/routes/password-reset.js index c04316d84..38360a31a 100644 --- a/server/routes/password-reset.js +++ b/server/routes/password-reset.js @@ -1,11 +1,11 @@ const router = require('express').Router(); -const User = require('../models/User.js'); +const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); // This route used to set new password given a passwordResetId router.post('/api/password-reset/:passwordResetId', async function(req, res) { try { - const user = await User.findOneByPasswordResetId( + const user = await usersUtil.findOneByPasswordResetId( req.params.passwordResetId ); @@ -20,7 +20,7 @@ router.post('/api/password-reset/:passwordResetId', async function(req, res) { } user.password = req.body.password; user.passwordResetId = ''; - await user.save(); + await usersUtil.save(user); return res.json({}); } catch (error) { sendError(res, error, 'Problem querying user database'); diff --git a/server/routes/queries.js b/server/routes/queries.js index 3060eb5ba..3e3f0a691 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -1,12 +1,10 @@ const router = require('express').Router(); -const Query = require('../models/Query.js'); +const queriesUtil = require('../models/queries.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); - -/* render page routes -============================================================================= */ +const pushQueryToSlack = require('../lib/pushQueryToSlack'); // NOTE: this non-api route is special since it redirects legacy urls router.get('/queries/:_id', mustBeAuthenticatedOrChartLink, function( @@ -24,15 +22,12 @@ router.get('/queries/:_id', mustBeAuthenticatedOrChartLink, function( next(); }); -/* API routes -============================================================================= */ - router.delete('/api/queries/:_id', mustBeAuthenticated, async function( req, res ) { try { - await Query.removeOneById(req.params._id); + await queriesUtil.removeById(req.params._id); return res.json({}); } catch (error) { sendError(res, error, 'Problem deleting query'); @@ -41,7 +36,7 @@ router.delete('/api/queries/:_id', mustBeAuthenticated, async function( router.get('/api/queries', mustBeAuthenticated, async function(req, res) { try { - const queries = await Query.findAll(); + const queries = await queriesUtil.findAll(); return res.json({ queries }); } catch (error) { sendError(res, error, 'Problem querying query database'); @@ -53,7 +48,7 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, async function( res ) { try { - const query = await Query.findOneById(req.params._id); + const query = await queriesUtil.findOneById(req.params._id); if (!query) { return res.json({ query: {} @@ -65,21 +60,24 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, async function( } }); -// create new router.post('/api/queries', mustBeAuthenticated, async function(req, res) { - const query = new Query({ - name: req.body.name || 'No Name Query', - tags: req.body.tags, - connectionId: req.body.connectionId, - queryText: req.body.queryText, - chartConfiguration: req.body.chartConfiguration, - createdBy: req.user.email, - modifiedBy: req.user.email - }); + const { name, tags, connectionId, queryText, chartConfiguration } = req.body; + const { email } = req.user; + + const query = { + name: name || 'No Name Query', + tags, + connectionId, + queryText, + chartConfiguration, + createdBy: email, + modifiedBy: email + }; + try { - const newQuery = await query.save(); + const newQuery = await queriesUtil.save(query); // This is async, but save operation doesn't care about when/if finished - newQuery.pushQueryToSlackIfSetup(); + pushQueryToSlack(newQuery); return res.json({ query: newQuery }); @@ -90,19 +88,30 @@ router.post('/api/queries', mustBeAuthenticated, async function(req, res) { router.put('/api/queries/:_id', mustBeAuthenticated, async function(req, res) { try { - const query = await Query.findOneById(req.params._id); + const query = await queriesUtil.findOneById(req.params._id); if (!query) { return sendError(res, null, 'Query not found'); } - query.name = req.body.name || ''; - query.tags = req.body.tags; - query.connectionId = req.body.connectionId; - query.queryText = req.body.queryText; - query.chartConfiguration = req.body.chartConfiguration; - query.modifiedBy = req.user.email; + const { + name, + tags, + connectionId, + queryText, + chartConfiguration + } = req.body; + const { email } = req.user; + + Object.assign(query, { + name, + tags, + connectionId, + queryText, + chartConfiguration, + modifiedBy: email + }); - const newQuery = await query.save(); + const newQuery = await queriesUtil.save(query); return res.json({ query: newQuery }); } catch (error) { sendError(res, error, 'Problem saving query'); diff --git a/server/routes/query-result.js b/server/routes/query-result.js index 11f3ce3c2..e7236543b 100644 --- a/server/routes/query-result.js +++ b/server/routes/query-result.js @@ -1,10 +1,8 @@ -const sanitize = require('sanitize-filename'); -const moment = require('moment'); const router = require('express').Router(); const { runQuery } = require('../drivers/index'); const connections = require('../models/connections.js'); -const Cache = require('../models/Cache.js'); -const Query = require('../models/Query.js'); +const resultCache = require('../models/resultCache.js'); +const queriesUtil = require('../models/queries.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); const sendError = require('../lib/sendError'); @@ -17,7 +15,7 @@ router.get( mustBeAuthenticatedOrChartLink, async function(req, res) { try { - const query = await Query.findOneById(req.params._queryId); + const query = await queriesUtil.findOneById(req.params._queryId); if (!query) { return sendError(res, null, 'Query not found (save query first)'); } @@ -68,27 +66,14 @@ async function getQueryResult(data) { throw new Error('Please choose a connection'); } connection.maxRows = Number(config.get('queryResultMaxRows')); - let cache = await Cache.findOneByCacheKey(cacheKey); - - if (!cache) { - cache = new Cache({ cacheKey }); - } - cache.queryName = sanitize( - (queryName || 'SQLPad Query Results') + ' ' + moment().format('YYYY-MM-DD') - ); - - // Expire cache in 8 hours - const now = new Date(); - cache.expiration = new Date(now.getTime() + 1000 * 60 * 60 * 8); - const newCache = await cache.save(); const queryResult = await runQuery(queryText, connection, user); - queryResult.cacheKey = cacheKey; if (config.get('allowCsvDownload')) { - await newCache.writeXlsx(queryResult); - await newCache.writeCsv(queryResult); + resultCache.saveResultCache(cacheKey, queryName); + await resultCache.writeXlsx(cacheKey, queryResult); + await resultCache.writeCsv(cacheKey, queryResult); } return queryResult; diff --git a/server/routes/schema-info.js b/server/routes/schema-info.js index a8e3ce788..45272981b 100644 --- a/server/routes/schema-info.js +++ b/server/routes/schema-info.js @@ -1,6 +1,6 @@ const router = require('express').Router(); const connections = require('../models/connections'); -const Cache = require('../models/Cache.js'); +const schemaInfoUtil = require('../models/schemaInfo.js'); const driver = require('../drivers'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); @@ -9,38 +9,25 @@ router.get( '/api/schema-info/:connectionId', mustBeAuthenticated, async function(req, res) { + const { connectionId } = req.params; const reload = req.query.reload === 'true'; - const cacheKey = 'schemaCache:' + req.params.connectionId; + try { - let [conn, cache] = await Promise.all([ - connections.findOneById(req.params.connectionId), - // This has problems in TravisCI for some reason... - Cache.findOneByCacheKey(cacheKey) - ]); + const conn = await connections.findOneById(connectionId); if (!conn) { throw new Error('Connection not found'); } - if (cache && !reload) { - const schemaInfo = - typeof cache.schema === 'string' - ? JSON.parse(cache.schema) - : cache.schema; + let schemaInfo = await schemaInfoUtil.getSchemaInfo(connectionId); + if (schemaInfo && !reload) { return res.json({ schemaInfo }); } - if (!cache) { - cache = new Cache({ cacheKey }); - } - - const schemaInfo = await driver.getSchema(conn); + schemaInfo = await driver.getSchema(conn); if (Object.keys(schemaInfo).length) { - // Schema needs to be stringified as JSON - // Column names could have dots in name (incompatible with nedb) - cache.schema = JSON.stringify(schemaInfo); - await cache.save(); + await schemaInfoUtil.saveSchemaInfo(connectionId, schemaInfo); } return res.json({ schemaInfo }); } catch (error) { diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index d5524ada2..e497dd3f3 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -1,7 +1,7 @@ const passport = require('passport'); const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); -const User = require('../models/User.js'); +const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); @@ -14,36 +14,37 @@ async function handleSignup(req, res, next) { } let [user, adminRegistrationOpen] = await Promise.all([ - User.findOneByEmail(req.body.email), - User.adminRegistrationOpen() + usersUtil.findOneByEmail(req.body.email), + usersUtil.adminRegistrationOpen() ]); if (user && user.passhash) { return sendError(res, null, 'User already signed up'); } + if (user) { user.password = req.body.password; user.signupDate = new Date(); + await usersUtil.save(user); + return next(); } - if (!user) { - // if open admin registration or whitelisted email create user - // otherwise exit - if ( - adminRegistrationOpen || - checkWhitelist(whitelistedDomains, req.body.email) - ) { - user = new User({ - email: req.body.email, - password: req.body.password, - role: adminRegistrationOpen ? 'admin' : 'editor', - signupDate: new Date() - }); - } else { - return sendError(res, null, 'Email address not whitelisted'); - } + + // if open admin registration or whitelisted email create user + // otherwise exit + if ( + adminRegistrationOpen || + checkWhitelist(whitelistedDomains, req.body.email) + ) { + user = await usersUtil.save({ + email: req.body.email, + password: req.body.password, + role: adminRegistrationOpen ? 'admin' : 'editor', + signupDate: new Date() + }); + return next(); + } else { + return sendError(res, null, 'Email address not whitelisted'); } - await user.save(); - next(); } catch (error) { sendError(res, error, 'Error saving user'); } diff --git a/server/routes/tags.js b/server/routes/tags.js index ca61160aa..3a2aab2aa 100644 --- a/server/routes/tags.js +++ b/server/routes/tags.js @@ -1,12 +1,12 @@ const _ = require('lodash'); const router = require('express').Router(); -const Query = require('../models/Query.js'); +const queriesUtil = require('../models/queries.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); router.get('/api/tags', mustBeAuthenticated, async function(req, res) { try { - const queries = await Query.findAll(); + const queries = await queriesUtil.findAll(); const tags = _.uniq(_.flatten(_.map(queries, 'tags'))) .sort() .filter(t => t); diff --git a/server/routes/users.js b/server/routes/users.js index 82a586fd9..1bad84f27 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -1,5 +1,5 @@ const router = require('express').Router(); -const User = require('../models/User.js'); +const usersUtil = require('../models/users.js'); const email = require('../lib/email'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); @@ -8,7 +8,7 @@ const config = require('../lib/config'); router.get('/api/users', mustBeAuthenticated, async function(req, res) { try { - const users = await User.findAll(); + const users = await usersUtil.findAll(); return res.json({ users }); } catch (error) { sendError(res, error, 'Problem getting uers'); @@ -18,15 +18,14 @@ router.get('/api/users', mustBeAuthenticated, async function(req, res) { // create/whitelist/invite user router.post('/api/users', mustBeAdmin, async function(req, res) { try { - let user = await User.findOneByEmail(req.body.email); + let user = await usersUtil.findOneByEmail(req.body.email); if (user) { return sendError(res, null, 'User already exists'); } - user = new User({ + user = await usersUtil.save({ email: req.body.email.toLowerCase(), role: req.body.role }); - user = await user.save(); if (config.smtpConfigured()) { email.sendInvite(req.body.email).catch(error => console.error(error)); @@ -43,7 +42,7 @@ router.put('/api/users/:_id', mustBeAdmin, async function(req, res) { return sendError(res, null, "You can't unadmin yourself"); } try { - const updateUser = await User.findOneById(params._id); + const updateUser = await usersUtil.findOneById(params._id); if (!updateUser) { return sendError(res, null, 'user not found'); } @@ -55,8 +54,8 @@ router.put('/api/users/:_id', mustBeAdmin, async function(req, res) { if (body.passwordResetId != null) { updateUser.passwordResetId = body.passwordResetId; } - await updateUser.save(); - return res.json({ user: updateUser }); + const updatedUser = await usersUtil.save(updateUser); + return res.json({ user: updatedUser }); } catch (error) { sendError(res, error, 'Problem saving user'); } @@ -67,7 +66,7 @@ router.delete('/api/users/:_id', mustBeAdmin, async function(req, res) { return sendError(res, null, "You can't delete yourself"); } try { - await User.removeOneById(req.params._id); + await usersUtil.removeById(req.params._id); return res.json({}); } catch (error) { sendError(res, error, 'Problem deleting user'); diff --git a/server/test/api/password-reset.js b/server/test/api/password-reset.js index 3467b4b80..db4de75b5 100644 --- a/server/test/api/password-reset.js +++ b/server/test/api/password-reset.js @@ -1,13 +1,13 @@ const assert = require('assert'); const utils = require('../utils'); const uuid = require('uuid'); -const User = require('../../models/User'); +const usersUtil = require('../../models/users'); async function setReset() { - const user = await User.findOneByEmail('admin@test.com'); + const user = await usersUtil.findOneByEmail('admin@test.com'); const passwordResetId = uuid.v4(); user.passwordResetId = passwordResetId; - await user.save(); + await usersUtil.save(user); return passwordResetId; } diff --git a/server/test/utils.js b/server/test/utils.js index c4413457a..de0b67041 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -1,6 +1,6 @@ const assert = require('assert'); const request = require('supertest'); -const User = require('../models/User'); +const usersUtil = require('../models/users'); const db = require('../lib/db'); const app = require('../app'); @@ -34,8 +34,7 @@ function reset() { async function resetWithUser() { await reset(); const saves = Object.keys(users).map(key => { - const user = new User(users[key]); - return user.save(); + return usersUtil.save(users[key]); }); return Promise.all(saves); } From 6276c7a7e68f7bd0e5eab56ead42fe493ec058c6 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 21:24:09 -0500 Subject: [PATCH 143/855] Update server dependencies (minor & patch) --- server/package-lock.json | 423 ++++++++------------------------------- server/package.json | 10 +- 2 files changed, 90 insertions(+), 343 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index eaecbaed2..7003aad0a 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -34,9 +34,9 @@ } }, "acorn": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", - "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", "dev": true }, "acorn-jsx": { @@ -278,9 +278,9 @@ } }, "bowser": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.5.4.tgz", - "integrity": "sha512-74GGwfc2nzYD19JCiA0RwCxdq7IY5jHeEaSrrgm/5kusEuK+7UK0qDG3gyzN47c4ViNyO4osaKtZE+aSV6nlpQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.7.0.tgz", + "integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w==" }, "brace-expansion": { "version": "1.1.11", @@ -405,33 +405,29 @@ "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } } } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "codepage": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.12.2.tgz", @@ -733,15 +729,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -797,9 +784,9 @@ "dev": true }, "eslint": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", - "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz", + "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -861,12 +848,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", - "dev": true } } }, @@ -882,9 +863,9 @@ } }, "eslint-config-prettier": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz", - "integrity": "sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz", + "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -942,9 +923,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", - "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", + "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1027,32 +1008,6 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, "exit-on-epipe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", @@ -1374,9 +1329,9 @@ } }, "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -1455,9 +1410,9 @@ "dev": true }, "helmet": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.0.tgz", - "integrity": "sha512-TS3GryQMPR7n/heNnGC0Cl3Ess30g8C6EtqZyylf+Y2/kF4lM8JinOR90rzIICsw4ymWTvji4OhDmqsqxkLrcg==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.1.tgz", + "integrity": "sha512-IC/54Lxvvad2YiUdgLmPlNFKLhNuG++waTF5KPYq/Feo3NNhqMFbcLAlbVkai+9q0+4uxjxGPJ9bNykG+3zZNg==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.2.0", @@ -1466,7 +1421,7 @@ "feature-policy": "0.3.0", "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.9.1", + "helmet-csp": "2.9.2", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", @@ -1489,11 +1444,11 @@ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" }, "helmet-csp": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.1.tgz", - "integrity": "sha512-HgdXSJ6AVyXiy5ohVGpK6L7DhjI9KVdKVB1xRoixxYKsFXFwoVqtLKgDnfe3u8FGGKf9Ml9k//C9rnncIIAmyA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.2.tgz", + "integrity": "sha512-Lt5WqNfbNjEJ6ysD4UNpVktSyjEKfU9LVJ1LaFmPfYseg/xPealPfgHhtqdAdjPDopp5zbg/VWCyp4cluMIckw==", "requires": { - "bowser": "2.5.4", + "bowser": "^2.6.1", "camelize": "1.0.0", "content-security-policy-builder": "2.1.0", "dasherize": "2.0.0" @@ -1645,12 +1600,6 @@ "through": "^2.3.6" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "ipaddr.js": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", @@ -1724,12 +1673,6 @@ "has": "^1.0.1" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -1883,15 +1826,6 @@ "verror": "1.10.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1994,15 +1928,6 @@ "signal-exit": "^3.0.0" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -2014,25 +1939,6 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "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 - } - } - }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -2189,9 +2095,9 @@ } }, "mocha": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz", - "integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.1.tgz", + "integrity": "sha512-VCcWkLHwk79NYQc8cxhkmI8IigTIhsCwZ6RTxQsqK6go4UvEhzJkYuHm8B2YtlSxcYq2fY+ucr4JBwoD6ci80A==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -2214,9 +2120,9 @@ "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", - "yargs-unparser": "1.5.0" + "yargs": "13.3.0", + "yargs-parser": "13.1.1", + "yargs-unparser": "1.6.0" }, "dependencies": { "debug": { @@ -2268,9 +2174,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -2291,6 +2197,12 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "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": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", @@ -2500,15 +2412,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -2636,41 +2539,12 @@ "wordwrap": "~1.0.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3009,16 +2883,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" }, - "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" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3538,12 +3402,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -3562,9 +3420,9 @@ } }, "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=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "superagent": { @@ -3898,48 +3756,25 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } } } @@ -4073,22 +3908,21 @@ "dev": true }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "yargs-parser": "^13.1.1" }, "dependencies": { "find-up": { @@ -4111,9 +3945,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -4148,9 +3982,9 @@ } }, "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -4158,101 +3992,14 @@ } }, "yargs-unparser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", - "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "requires": { "flat": "^4.1.0", - "lodash": "^4.17.11", - "yargs": "^12.0.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "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" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "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 - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "lodash": "^4.17.15", + "yargs": "^13.3.0" } } } diff --git a/server/package.json b/server/package.json index 58f370b8a..0f323d4b0 100644 --- a/server/package.json +++ b/server/package.json @@ -42,7 +42,7 @@ "express": "^4.17.1", "express-session": "^1.16.2", "hdb": "^0.15.4", - "helmet": "^3.21.0", + "helmet": "^3.21.1", "ini": "^1.3.5", "joi": "^12.0.0", "json2csv": "^3.11.5", @@ -84,12 +84,12 @@ "odbc": "^1.4.1" }, "devDependencies": { - "eslint": "^6.3.0", + "eslint": "^6.5.1", "eslint-config-airbnb-base": "^13.1.0", - "eslint-config-prettier": "^6.2.0", + "eslint-config-prettier": "^6.4.0", "eslint-plugin-import": "^2.18.0", - "eslint-plugin-prettier": "^3.1.0", - "mocha": "^6.1.4", + "eslint-plugin-prettier": "^3.1.1", + "mocha": "^6.2.1", "node-dev": "^4.0.0", "supertest": "^3.4.2" } From 8ac3bd875c9b019633a646dadfa31a542fff69dc Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 21:42:50 -0500 Subject: [PATCH 144/855] Update Joi (major) --- server/models/queries.js | 14 ++++---- server/models/users.js | 12 +++---- server/package-lock.json | 71 ++++++++++++++++++++++------------------ server/package.json | 2 +- 4 files changed, 54 insertions(+), 45 deletions(-) diff --git a/server/models/queries.js b/server/models/queries.js index 438f32946..e70f6be9e 100644 --- a/server/models/queries.js +++ b/server/models/queries.js @@ -1,5 +1,5 @@ const db = require('../lib/db.js'); -const Joi = require('joi'); +const Joi = require('@hapi/joi'); /* "chartConfiguration": { @@ -15,7 +15,7 @@ const Joi = require('joi'); } */ -const schema = { +const schema = Joi.object({ _id: Joi.string().optional(), // generated by nedb name: Joi.string().required(), tags: Joi.array() @@ -37,12 +37,12 @@ const schema = { .unknown(true) .optional() }).optional(), - createdDate: Joi.date().default(new Date(), 'time of creation'), - modifiedDate: Joi.date().default(new Date(), 'time of modification'), + createdDate: Joi.date().default(Date.now), + modifiedDate: Joi.date().default(Date.now), createdBy: Joi.string().required(), modifiedBy: Joi.string().required(), - lastAccessDate: Joi.date().default(new Date(), 'time of last access') -}; + lastAccessDate: Joi.date().default(Date.now) +}); function findOneById(id) { return db.queries.findOne({ _id: id }); @@ -80,7 +80,7 @@ async function save(query) { return tag.trim(); }); } - const joiResult = Joi.validate(query, schema); + const joiResult = schema.validate(query); if (joiResult.error) { return Promise.reject(joiResult.error); } diff --git a/server/models/users.js b/server/models/users.js index 5a0574598..c444cde1b 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -1,8 +1,8 @@ -const Joi = require('joi'); +const Joi = require('@hapi/joi'); const db = require('../lib/db.js'); const passhash = require('../lib/passhash.js'); -const schema = { +const schema = Joi.object({ _id: Joi.string().optional(), // will be auto-gen by nedb email: Joi.string().required(), role: Joi.string() @@ -16,10 +16,10 @@ const schema = { password: Joi.string() .optional() .strip(), - createdDate: Joi.date().default(new Date(), 'time of creation'), - modifiedDate: Joi.date().default(new Date(), 'time of modification'), + createdDate: Joi.date().default(Date.now), + modifiedDate: Joi.date().default(Date.now), signupDate: Joi.date().optional() -}; +}); async function save(data) { if (!data.email) { @@ -32,7 +32,7 @@ async function save(data) { data.passhash = await passhash.getPasshash(data.password); } - const joiResult = Joi.validate(data, schema); + const joiResult = schema.validate(data); if (joiResult.error) { return Promise.reject(joiResult.error); } diff --git a/server/package-lock.json b/server/package-lock.json index 7003aad0a..f280056d4 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -24,6 +24,46 @@ "js-tokens": "^4.0.0" } }, + "@hapi/address": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz", + "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==" + }, + "@hapi/formula": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-1.2.0.tgz", + "integrity": "sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==" + }, + "@hapi/hoek": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.3.0.tgz", + "integrity": "sha512-C0QL9bmgUXTSuf8nDeGrpMjtJG7tPUr8wG6/wxPbP62tGwCwQtdMSJYfESowmY4P3Hn593f+8OzNY5bckcu/LQ==" + }, + "@hapi/joi": { + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-16.1.7.tgz", + "integrity": "sha512-anaIgnZhNooG3LJLrTFzgGALTiO97zRA1UkvQHm9KxxoSiIzCozB3RCNCpDnfhTJD72QlrHA8nwGmNgpFFCIeg==", + "requires": { + "@hapi/address": "^2.1.2", + "@hapi/formula": "^1.2.0", + "@hapi/hoek": "^8.2.4", + "@hapi/pinpoint": "^1.0.2", + "@hapi/topo": "^3.1.3" + } + }, + "@hapi/pinpoint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-1.0.2.tgz", + "integrity": "sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ==" + }, + "@hapi/topo": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.5.tgz", + "integrity": "sha512-bi9m1jrui9LlvtVdLaHv0DqeOoe+I8dep+nEcTgW6XxJHL3xArQcilYz3tIp0cRC4gWlsVtABK7vNKg4jzEmAA==", + "requires": { + "@hapi/hoek": "8.x.x" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1459,11 +1499,6 @@ "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz", "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==" }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -1704,14 +1739,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "requires": { - "punycode": "2.x.x" - } - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1723,16 +1750,6 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "joi": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-12.0.0.tgz", - "integrity": "sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ==", - "requires": { - "hoek": "4.x.x", - "isemail": "3.x.x", - "topo": "2.x.x" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3553,14 +3570,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", - "requires": { - "hoek": "4.x.x" - } - }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", diff --git a/server/package.json b/server/package.json index 0f323d4b0..cde075050 100644 --- a/server/package.json +++ b/server/package.json @@ -34,6 +34,7 @@ "lint": "eslint '**/*.js'" }, "dependencies": { + "@hapi/joi": "^16.1.7", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.19.0", "cassandra-driver": "^3.6.0", @@ -44,7 +45,6 @@ "hdb": "^0.15.4", "helmet": "^3.21.1", "ini": "^1.3.5", - "joi": "^12.0.0", "json2csv": "^3.11.5", "lodash": "^4.17.11", "minimist": "^1.2.0", From d30f169a1bcffdcf5747e0959a9db37c85ca1da4 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 21:45:28 -0500 Subject: [PATCH 145/855] Update rimraf (major) --- server/package-lock.json | 6 +++--- server/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index f280056d4..3070edec2 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -3083,9 +3083,9 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "requires": { "glob": "^7.1.3" } diff --git a/server/package.json b/server/package.json index cde075050..c4e706a1b 100644 --- a/server/package.json +++ b/server/package.json @@ -67,7 +67,7 @@ "pg": "^7.12.1", "pg-cursor": "^2.0.0", "request": "^2.88.0", - "rimraf": "^2.7.1", + "rimraf": "^3.0.0", "sanitize-filename": "^1.6.3", "serve-favicon": "^2.5.0", "session-file-store": "^1.3.0", From 8ebe9e8dc52b6f441305d5df2d58d0ecc09655a9 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 21:50:22 -0500 Subject: [PATCH 146/855] Update node-xlsx --- server/package-lock.json | 50 +++++++++++++++++++++++----------------- server/package.json | 2 +- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 3070edec2..7595a4d06 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -337,6 +337,11 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", @@ -396,11 +401,13 @@ } }, "cfb": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.0.8.tgz", - "integrity": "sha1-d/ITST1pfXVP2cD1UR6rWtctAs8=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz", + "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==", "requires": { - "commander": "^2.14.1", + "adler-32": "~1.2.0", + "commander": "^2.16.0", + "crc-32": "~1.2.0", "printj": "~1.1.2" } }, @@ -469,9 +476,9 @@ } }, "codepage": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.12.2.tgz", - "integrity": "sha512-FAN+oPs/ocaPLFvIt4vEOHgWA6UJ6t+fVbbVBoXDpTpC+4JYasomYZEEjR/Miph3qQrVnIShRwwmwu4P35JW1w==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", "requires": { "commander": "~2.14.1", "exit-on-epipe": "~1.0.1" @@ -2405,11 +2412,12 @@ } }, "node-xlsx": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.11.2.tgz", - "integrity": "sha512-EVKysbKISk0mWzYLq1kED/V/SEEjlMrdyyBN8xu9gilEeYvHX0G1NrvQU+CyYHxUeMh+stuPNhjwUdBuyyYIZw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.15.0.tgz", + "integrity": "sha512-rQyhWDJ/k60wQemov7a8MlToastWTidrAVFRwTWV+s53LN/SRwU4lnmc5xuFXx/ay+uaLAsAQBp6BkVob5OjOA==", "requires": { - "xlsx": "^0.11.10" + "buffer-from": "^1.1.0", + "xlsx": "^0.14.1" } }, "nodemailer": { @@ -3818,23 +3826,23 @@ "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" }, "xlsx": { - "version": "0.11.19", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.11.19.tgz", - "integrity": "sha512-UTfD64o5Ka/E6QHL12fzcq5wnt9MCtuwgoUdYSTDxjjDkhNmZwSfPlJH/+Yh8vE6nU/0ax3MXNrc9AP4haAmIg==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.14.5.tgz", + "integrity": "sha512-s/5f4/mjeWREmIWZ+HtDfh/rnz51ar+dZ4LWKZU3u9VBx2zLdSIWTdXgoa52/pnZ9Oe/Vu1W1qzcKzLVe+lq4w==", "requires": { "adler-32": "~1.2.0", - "cfb": "~1.0.2", - "codepage": "~1.12.0", - "commander": "~2.13.0", + "cfb": "^1.1.2", + "codepage": "~1.14.0", + "commander": "~2.17.1", "crc-32": "~1.2.0", "exit-on-epipe": "~1.0.1", - "ssf": "~0.10.1" + "ssf": "~0.10.2" }, "dependencies": { "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" } } }, diff --git a/server/package.json b/server/package.json index c4e706a1b..79930bd7c 100644 --- a/server/package.json +++ b/server/package.json @@ -57,7 +57,7 @@ "nedb-promise": "^2.0.1", "node-crate": "^2.0.6", "node-fetch": "^2.6.0", - "node-xlsx": "^0.11.2", + "node-xlsx": "^0.15.0", "nodemailer": "^4.7.0", "passport": "^0.4.0", "passport-google-oauth20": "^2.0.0", From 74f71066d3e43277311e04f31da4961d2116de77 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 21:58:44 -0500 Subject: [PATCH 147/855] Update json2csv --- server/models/resultCache.js | 17 ++++---- server/package-lock.json | 76 +++++++----------------------------- server/package.json | 2 +- 3 files changed, 22 insertions(+), 73 deletions(-) diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 17531ec6b..9b8786a71 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -4,7 +4,7 @@ const moment = require('moment'); const sanitize = require('sanitize-filename'); const db = require('../lib/db.js'); const xlsx = require('node-xlsx'); -const json2csv = require('json2csv'); +const { parse } = require('json2csv'); const config = require('../lib/config'); const dbPath = config.get('dbPath'); @@ -71,21 +71,18 @@ function writeXlsx(cacheKey, queryResult) { function writeCsv(cacheKey, queryResult) { return new Promise(resolve => { - json2csv({ data: queryResult.rows, fields: queryResult.fields }, function( - err, - csv - ) { - if (err) { - console.log(err); - return resolve(); - } + try { + const csv = parse(queryResult.rows, { fields: queryResult.fields }); fs.writeFile(csvFilePath(cacheKey), csv, function(err) { if (err) { console.log(err); } return resolve(); }); - }); + } catch (error) { + console.log(error); + return resolve(); + } }); } diff --git a/server/package-lock.json b/server/package-lock.json index 7595a4d06..85d6e83ab 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -437,14 +437,6 @@ "restore-cursor": "^2.0.0" } }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "requires": { - "colors": "1.0.3" - } - }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -506,11 +498,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1237,6 +1224,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, "requires": { "is-buffer": "~2.0.3" } @@ -1656,7 +1644,8 @@ "is-buffer": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true }, "is-callable": { "version": "1.1.4", @@ -1800,35 +1789,13 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json2csv": { - "version": "3.11.5", - "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-3.11.5.tgz", - "integrity": "sha512-ORsw84BuRKMLxfI+HFZuvxRDnsJps53D5fIGr6tLn4ZY+ymcG8XU00E+JJ2wfAiHx5w2QRNmOLE8xHiGAeSfuQ==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.3.tgz", + "integrity": "sha512-tg5sm25TOwgMsPUixPFmmuOUFtVCj4p57XipoE8gi/ejNftce/0d8LBgWnCkjF4HsLDsFzszdbIEV6mnK0WfNg==", "requires": { - "cli-table": "^0.3.1", - "commander": "^2.8.1", - "debug": "^3.1.0", - "flat": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.get": "^4.4.0", - "lodash.set": "^4.3.0", - "lodash.uniq": "^4.5.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "commander": "^2.15.1", + "jsonparse": "^1.3.1", + "lodash.get": "^4.4.2" } }, "jsonfile": { @@ -1839,6 +1806,11 @@ "graceful-fs": "^4.1.6" } }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -1903,31 +1875,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", diff --git a/server/package.json b/server/package.json index 79930bd7c..1e5bbb686 100644 --- a/server/package.json +++ b/server/package.json @@ -45,7 +45,7 @@ "hdb": "^0.15.4", "helmet": "^3.21.1", "ini": "^1.3.5", - "json2csv": "^3.11.5", + "json2csv": "^4.5.3", "lodash": "^4.17.11", "minimist": "^1.2.0", "mkdirp": "^0.5.1", From 60eac225a732f5ae811e6d66b697e209929869d3 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 22:04:18 -0500 Subject: [PATCH 148/855] Update hdb --- server/package-lock.json | 6 +++--- server/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 85d6e83ab..52f2e68b1 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1431,9 +1431,9 @@ "dev": true }, "hdb": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.15.4.tgz", - "integrity": "sha1-J6WSMv1fQqli4CsFUwy/1frGFRc=", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.17.1.tgz", + "integrity": "sha512-5BQtuMzFcqZZMB4rIT49MVnxZR7JfcFIARsCnYgqViHo2M241Xd4LKjOvrAA17PJ8VauXa7/OMmk1Emo0sjbdw==", "requires": { "iconv-lite": "^0.4.18" } diff --git a/server/package.json b/server/package.json index 1e5bbb686..0f2f25de4 100644 --- a/server/package.json +++ b/server/package.json @@ -42,7 +42,7 @@ "errorhandler": "^1.5.1", "express": "^4.17.1", "express-session": "^1.16.2", - "hdb": "^0.15.4", + "hdb": "^0.17.1", "helmet": "^3.21.1", "ini": "^1.3.5", "json2csv": "^4.5.3", From 645eb862be274cb2104ee8dec098e15b390dc6a6 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 22:17:43 -0500 Subject: [PATCH 149/855] Update supertest (major) --- server/package-lock.json | 6 +++--- server/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 52f2e68b1..a3f0d4c51 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -3438,9 +3438,9 @@ } }, "supertest": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz", - "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", "dev": true, "requires": { "methods": "^1.1.2", diff --git a/server/package.json b/server/package.json index 0f2f25de4..6d3c3b24e 100644 --- a/server/package.json +++ b/server/package.json @@ -91,6 +91,6 @@ "eslint-plugin-prettier": "^3.1.1", "mocha": "^6.2.1", "node-dev": "^4.0.0", - "supertest": "^3.4.2" + "supertest": "^4.0.2" } } From 04e842c9632f3dfd6c980e0735f1f43704285229 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 8 Oct 2019 22:34:53 -0500 Subject: [PATCH 150/855] Update nodemailer (major) --- server/package-lock.json | 6 +++--- server/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index a3f0d4c51..6152fc6aa 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -2373,9 +2373,9 @@ } }, "nodemailer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", - "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.3.0.tgz", + "integrity": "sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw==" }, "normalize-package-data": { "version": "2.5.0", diff --git a/server/package.json b/server/package.json index 6d3c3b24e..a80a1056f 100644 --- a/server/package.json +++ b/server/package.json @@ -58,7 +58,7 @@ "node-crate": "^2.0.6", "node-fetch": "^2.6.0", "node-xlsx": "^0.15.0", - "nodemailer": "^4.7.0", + "nodemailer": "^6.3.0", "passport": "^0.4.0", "passport-google-oauth20": "^2.0.0", "passport-http": "^0.3.0", From d5c017beae9af2e4c94158fc32469c85467606fa Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 9 Oct 2019 00:06:54 -0500 Subject: [PATCH 151/855] Update cassandra-driver (major) --- server/drivers/cassandra/index.js | 10 +++++++++- server/package-lock.json | 18 +++++++++++++++--- server/package.json | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/server/drivers/cassandra/index.js b/server/drivers/cassandra/index.js index ca064ee63..cc12342bf 100644 --- a/server/drivers/cassandra/index.js +++ b/server/drivers/cassandra/index.js @@ -10,6 +10,11 @@ const fields = [ formType: 'TEXT', label: 'Contact points (comma delimited)' }, + { + key: 'localDataCenter', + formType: 'TEXT', + label: 'Local data center' + }, { key: 'keyspace', formType: 'TEXT', @@ -46,10 +51,13 @@ function shutdownClient(client) { * @param {object} connection */ async function runQuery(query, connection) { - const { contactPoints, keyspace, maxRows } = connection; + const { contactPoints, keyspace, localDataCenter, maxRows } = connection; const client = new cassandra.Client({ contactPoints: contactPoints.split(',').map(cp => cp.trim()), + // Unfamiliar with cassandra - docs mention datacenter1 and this works as a default so leaving it in + // If someone familiar with cassandra can expand on this please do + localDataCenter: localDataCenter || 'datacenter1', keyspace }); diff --git a/server/package-lock.json b/server/package-lock.json index 6152fc6aa..271914df0 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -64,6 +64,16 @@ "@hapi/hoek": "8.x.x" } }, + "@types/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + }, + "@types/node": { + "version": "12.7.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", + "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -393,10 +403,12 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "cassandra-driver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-3.6.0.tgz", - "integrity": "sha512-CkN3V+oPaF5RvakUjD3uUjEm8f6U8S0aT1+YqeQsVT3UDpPT2K8SOdNDEHA1KjamakHch6zkDgHph1xWyqBGGw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.2.0.tgz", + "integrity": "sha512-rHOccpH/aYCnNEJzdmQ2TzGRmwuOtgnwdu9G3v+WRwzcYtv2UAWd1yJhZGSaqOrLB3FzB+HR0HOogdtkorA82g==", "requires": { + "@types/long": "^4.0.0", + "@types/node": ">=4", "long": "^2.2.0" } }, diff --git a/server/package.json b/server/package.json index a80a1056f..745cc9bc3 100644 --- a/server/package.json +++ b/server/package.json @@ -37,7 +37,7 @@ "@hapi/joi": "^16.1.7", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.19.0", - "cassandra-driver": "^3.6.0", + "cassandra-driver": "^4.2.0", "detect-port": "^1.3.0", "errorhandler": "^1.5.1", "express": "^4.17.1", From fabd7659f7f72ad60f66905bfac86d23aabcd42d Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 9 Oct 2019 00:27:26 -0500 Subject: [PATCH 152/855] Update mssql (major) --- server/drivers/sqlserver/index.js | 2 +- server/package-lock.json | 130 +++++++++++++++++++++--------- server/package.json | 2 +- 3 files changed, 96 insertions(+), 38 deletions(-) diff --git a/server/drivers/sqlserver/index.js b/server/drivers/sqlserver/index.js index d0697714f..bdb75d365 100644 --- a/server/drivers/sqlserver/index.js +++ b/server/drivers/sqlserver/index.js @@ -39,7 +39,7 @@ function runQuery(query, connection) { requestTimeout: 1000 * 60 * 60, options: { appName: 'SQLPad', - encrypt: connection.sqlserverEncrypt + encrypt: Boolean(connection.sqlserverEncrypt) }, pool: { max: 1, diff --git a/server/package-lock.json b/server/package-lock.json index 271914df0..e760ede6e 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -95,6 +95,34 @@ "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", "dev": true }, + "adal-node": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.1.28.tgz", + "integrity": "sha1-RoxLs+u9lrEnBmn0ucuk4AZepIU=", + "requires": { + "@types/node": "^8.0.47", + "async": ">=0.6.0", + "date-utils": "*", + "jws": "3.x.x", + "request": ">= 2.52.0", + "underscore": ">= 1.3.1", + "uuid": "^3.1.0", + "xmldom": ">= 0.1.x", + "xpath.js": "~1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz", + "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==" + }, + "async": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", + "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" + } + } + }, "address": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", @@ -229,15 +257,6 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, "bagpipe": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/bagpipe/-/bagpipe-0.3.5.tgz", @@ -275,9 +294,9 @@ } }, "big-number": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/big-number/-/big-number-0.3.1.tgz", - "integrity": "sha1-rHMCDApZu3nrF8LOLbd/d9l04BM=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/big-number/-/big-number-1.0.0.tgz", + "integrity": "sha512-cHUzdT+mMXd1ozht8n5ZwBlNiPO/4zCqqkyp3lF1TMPsRJLXUbQ7cKnfXRkrW475H5SOtSOP0HFeihNbpa53MQ==" }, "bignumber.js": { "version": "7.2.1", @@ -302,9 +321,9 @@ } }, "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", + "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -347,6 +366,11 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -580,11 +604,6 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", "dev": true }, - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -634,6 +653,11 @@ "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, + "date-utils": { + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", + "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" + }, "dateformat": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", @@ -754,6 +778,14 @@ "safer-buffer": "^2.1.0" } }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1834,6 +1866,25 @@ "verror": "1.10.0" } }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2225,13 +2276,13 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mssql": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-4.3.7.tgz", - "integrity": "sha512-+cs1uBD2Hut6UNeCnJHUeikWKIEhMTlr8s1bOw2BaVTPcyau1fFUqt1rQRilEq/GsyGkkzrE+TKw0jlvbW5cWQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-5.1.0.tgz", + "integrity": "sha512-eHrqRWCEBaXo48y2ZBaDleFvrWm2vYm6dNm1ci0XLYxm6kUb4KRsvjl74iKFhfYyuF9z6qzmTe/QmoQk+YVcVw==", "requires": { "debug": "^3.2.6", "generic-pool": "^3.6.1", - "tedious": "^2.7.1" + "tedious": "^4.2.0" }, "dependencies": { "debug": { @@ -2958,11 +3009,6 @@ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -3494,19 +3540,31 @@ } }, "tedious": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-2.7.1.tgz", - "integrity": "sha512-u3ciATGm5byim91b3+c3MVTvY1zKjDmhUhnBQZXKymT2Vb9w322dziPQY6MhBNyBEcNONPsAMR+7/Uub7NYABQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-4.2.0.tgz", + "integrity": "sha512-Py59XmvMcYWdjc1qyXDsbBwQE3yM8CJzuDnagjRpwjgndaBQXBULDI3D6OxKClbTNxA3qaLBFd9DjfV+is3AYA==", "requires": { - "babel-runtime": "^6.26.0", - "big-number": "0.3.1", - "bl": "^1.2.2", + "adal-node": "^0.1.22", + "big-number": "1.0.0", + "bl": "^2.0.1", "depd": "^1.1.2", "iconv-lite": "^0.4.23", "native-duplexpair": "^1.0.0", "punycode": "^2.1.0", - "readable-stream": "^2.3.6", + "readable-stream": "^3.0.3", "sprintf-js": "^1.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "text-table": { diff --git a/server/package.json b/server/package.json index 745cc9bc3..e176c24d0 100644 --- a/server/package.json +++ b/server/package.json @@ -51,7 +51,7 @@ "mkdirp": "^0.5.1", "moment": "^2.24.0", "morgan": "^1.9.1", - "mssql": "^4.3.7", + "mssql": "^5.1.0", "mysql": "^2.17.1", "nedb": "^1.8.0", "nedb-promise": "^2.0.1", From a4fcf98b5e4fe702bc52dec4d90d0a2d0d96e275 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 9 Oct 2019 00:30:14 -0500 Subject: [PATCH 153/855] Update eslint-config-airbnb-base (major) --- server/drivers/cassandra/test.js | 2 +- server/drivers/crate/test.js | 2 +- server/drivers/hdb/test.js | 2 +- server/drivers/mock/index.js | 2 +- server/drivers/mock/test.js | 4 ++-- server/drivers/mysql/test.js | 2 +- server/drivers/presto/test.js | 2 +- server/drivers/vertica/test.js | 2 +- server/lib/config/index.js | 2 +- server/package-lock.json | 14 +++++++------- server/package.json | 2 +- 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/server/drivers/cassandra/test.js b/server/drivers/cassandra/test.js index 9b7a811da..29edfbc2d 100644 --- a/server/drivers/cassandra/test.js +++ b/server/drivers/cassandra/test.js @@ -52,7 +52,7 @@ describe('drivers/cassandra', function() { }); it('runQuery over limit', async function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); + const limitedConnection = { ...connection, maxRows: 2 }; const results = await cassandra.runQuery( 'SELECT * FROM test.test;', limitedConnection diff --git a/server/drivers/crate/test.js b/server/drivers/crate/test.js index e089d97aa..487d4db3c 100644 --- a/server/drivers/crate/test.js +++ b/server/drivers/crate/test.js @@ -52,7 +52,7 @@ describe('drivers/crate', function() { }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); + const limitedConnection = { ...connection, maxRows: 2 }; return crate .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { diff --git a/server/drivers/hdb/test.js b/server/drivers/hdb/test.js index f98509ea8..d9706c111 100644 --- a/server/drivers/hdb/test.js +++ b/server/drivers/hdb/test.js @@ -59,7 +59,7 @@ describe('drivers/hdb', function() { }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); + const limitedConnection = { ...connection, maxRows: 2 }; return hdb .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { diff --git a/server/drivers/mock/index.js b/server/drivers/mock/index.js index 18df27aed..15d13028d 100644 --- a/server/drivers/mock/index.js +++ b/server/drivers/mock/index.js @@ -73,7 +73,7 @@ function cartesianify(rows, field) { } else { rows.forEach(row => { field.values.forEach(value => { - const newRow = Object.assign({}, row, { [field.name]: value }); + const newRow = { ...row, [field.name]: value }; newRows.push(newRow); }); }); diff --git a/server/drivers/mock/test.js b/server/drivers/mock/test.js index 32d4b753e..a80f2f144 100644 --- a/server/drivers/mock/test.js +++ b/server/drivers/mock/test.js @@ -25,7 +25,7 @@ describe('drivers/mock', function() { }); it('runQuery under limit', function() { - const c = Object.assign({}, connection, { maxRows: 10000 }); + const c = { ...connection, maxRows: 10000 }; const query = ` -- dimensions = product 5 `; @@ -36,7 +36,7 @@ describe('drivers/mock', function() { }); it('runQuery over limit', function() { - const c = Object.assign({}, connection, { maxRows: 10 }); + const c = { ...connection, maxRows: 10 }; const query = ` -- dimensions = product 10, color 10, orderdate 500 `; diff --git a/server/drivers/mysql/test.js b/server/drivers/mysql/test.js index 41caaede5..999f38b64 100644 --- a/server/drivers/mysql/test.js +++ b/server/drivers/mysql/test.js @@ -51,7 +51,7 @@ describe('drivers/mysql', function() { }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); + const limitedConnection = { ...connection, maxRows: 2 }; return mysql .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { diff --git a/server/drivers/presto/test.js b/server/drivers/presto/test.js index 1257c7896..818837255 100644 --- a/server/drivers/presto/test.js +++ b/server/drivers/presto/test.js @@ -72,7 +72,7 @@ describe('drivers/presto', function() { }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); + const limitedConnection = { ...connection, maxRows: 2 }; return presto .runQuery('SELECT * FROM test LIMIT 10', limitedConnection) .then(results => { diff --git a/server/drivers/vertica/test.js b/server/drivers/vertica/test.js index 58ddf53eb..51a64b2be 100644 --- a/server/drivers/vertica/test.js +++ b/server/drivers/vertica/test.js @@ -55,7 +55,7 @@ describe('drivers/vertica', function() { }); it('runQuery over limit', function() { - const limitedConnection = Object.assign({}, connection, { maxRows: 2 }); + const limitedConnection = { ...connection, maxRows: 2 }; return vertica .runQuery('SELECT * FROM test;', limitedConnection) .then(results => { diff --git a/server/lib/config/index.js b/server/lib/config/index.js index f6dcb2a3a..738b80d68 100644 --- a/server/lib/config/index.js +++ b/server/lib/config/index.js @@ -18,7 +18,7 @@ if (warnings.length) { warnings.forEach(warning => console.warn(warning)); } -const all = Object.assign({}, defaultConfig, envConfig, fileConfig, cliConfig); +const all = { ...defaultConfig, ...envConfig, ...fileConfig, ...cliConfig }; // Clean string boolean values Object.keys(all).forEach(key => { diff --git a/server/package-lock.json b/server/package-lock.json index e760ede6e..843c9b9a2 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -559,9 +559,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "confusing-browser-globals": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.7.tgz", - "integrity": "sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, "contains-path": { @@ -930,12 +930,12 @@ } }, "eslint-config-airbnb-base": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz", - "integrity": "sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz", + "integrity": "sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA==", "dev": true, "requires": { - "confusing-browser-globals": "^1.0.5", + "confusing-browser-globals": "^1.0.7", "object.assign": "^4.1.0", "object.entries": "^1.1.0" } diff --git a/server/package.json b/server/package.json index e176c24d0..f5cb047f4 100644 --- a/server/package.json +++ b/server/package.json @@ -85,7 +85,7 @@ }, "devDependencies": { "eslint": "^6.5.1", - "eslint-config-airbnb-base": "^13.1.0", + "eslint-config-airbnb-base": "^14.0.0", "eslint-config-prettier": "^6.4.0", "eslint-plugin-import": "^2.18.0", "eslint-plugin-prettier": "^3.1.1", From 0ecdfe1ddcb6032c2e6c0f682f2a43469e58cade Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 9 Oct 2019 00:36:09 -0500 Subject: [PATCH 154/855] Update client dependencies (minor/patch) --- client/package-lock.json | 1586 +++++++++++++++++++------------------- client/package.json | 22 +- 2 files changed, 825 insertions(+), 783 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index bb5d4b2c8..6936a55a8 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -13,17 +13,17 @@ } }, "@babel/core": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", - "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", + "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", - "@babel/helpers": "^7.5.5", - "@babel/parser": "^7.5.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5", + "@babel/generator": "^7.6.0", + "@babel/helpers": "^7.6.0", + "@babel/parser": "^7.6.0", + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.0", + "@babel/types": "^7.6.0", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", @@ -41,15 +41,21 @@ } }, "@babel/generator": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", - "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.3.tgz", + "integrity": "sha512-hLhYbAb3pHwxjlijC4AQ7mqZdcoujiNaW7izCT04CIowHK8psN0IN8QjDv0iyFtycF5FowUOTwDloIheI25aMw==", "requires": { - "@babel/types": "^7.5.5", + "@babel/types": "^7.6.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "@babel/helper-annotate-as-pure": { @@ -89,9 +95,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", - "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz", + "integrity": "sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==", "requires": { "@babel/helper-function-name": "^7.1.0", "@babel/helper-member-expression-to-functions": "^7.5.5", @@ -248,13 +254,13 @@ } }, "@babel/helpers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", - "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", + "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.0" } }, "@babel/highlight": { @@ -268,9 +274,9 @@ } }, "@babel/parser": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", - "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.3.tgz", + "integrity": "sha512-sUZdXlva1dt2Vw2RqbMkmfoImubO0D0gaCrNngV6Hi0DA4x3o4mlrq0tbfY0dZEUIccH8I6wQ4qgEtwcpOR6Qg==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -292,11 +298,11 @@ } }, "@babel/plugin-proposal-decorators": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz", - "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz", + "integrity": "sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.4", + "@babel/helper-create-class-features-plugin": "^7.6.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-decorators": "^7.2.0" } @@ -320,9 +326,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", - "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", + "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -338,13 +344,13 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz", + "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "regexpu-core": "^4.6.0" } }, "@babel/plugin-syntax-async-generators": { @@ -446,9 +452,9 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", - "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz", + "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "lodash": "^4.17.13" @@ -478,21 +484,21 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", - "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz", + "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "regexpu-core": "^4.6.0" } }, "@babel/plugin-transform-duplicate-keys": { @@ -565,9 +571,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", - "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", + "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", "requires": { "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", @@ -595,11 +601,11 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz", + "integrity": "sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==", "requires": { - "regexp-tree": "^0.1.6" + "regexpu-core": "^4.6.0" } }, "@babel/plugin-transform-new-target": { @@ -638,9 +644,9 @@ } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.5.0.tgz", - "integrity": "sha512-c5Ba8cpybZFp1Izkf2sWGuNjOxoQ32tFgBvvYvwGhi4+9f6vGiSK9Gex4uVuO/Va6YJFu41aAh1MzMjUWkp0IQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.3.tgz", + "integrity": "sha512-1/YogSSU7Tby9rq2VCmhuRg+6pxsHy2rI7w/oo8RKoBt6uBUFG+mk6x13kK+FY1/ggN92HAfg7ADd1v1+NCOKg==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -699,9 +705,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", - "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz", + "integrity": "sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -725,9 +731,9 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", + "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -759,38 +765,38 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz", - "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.3.tgz", + "integrity": "sha512-aiWINBrPMSC3xTXRNM/dfmyYuPNKY/aexYqBgh0HBI5Y+WO5oRAqW/oROYeYHrF4Zw12r9rK4fMk/ZlAmqx/FQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.5.5", + "@babel/helper-create-class-features-plugin": "^7.6.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz", + "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "regexpu-core": "^4.6.0" } }, "@babel/preset-env": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", - "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.3.tgz", + "integrity": "sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", "@babel/plugin-proposal-dynamic-import": "^7.5.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.6.2", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", @@ -799,11 +805,11 @@ "@babel/plugin-transform-arrow-functions": "^7.2.0", "@babel/plugin-transform-async-to-generator": "^7.5.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-block-scoping": "^7.6.3", "@babel/plugin-transform-classes": "^7.5.5", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-destructuring": "^7.6.0", + "@babel/plugin-transform-dotall-regex": "^7.6.2", "@babel/plugin-transform-duplicate-keys": "^7.5.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", "@babel/plugin-transform-for-of": "^7.4.4", @@ -811,10 +817,10 @@ "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-member-expression-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", "@babel/plugin-transform-modules-systemjs": "^7.5.0", "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.3", "@babel/plugin-transform-new-target": "^7.4.4", "@babel/plugin-transform-object-super": "^7.5.5", "@babel/plugin-transform-parameters": "^7.4.4", @@ -822,12 +828,12 @@ "@babel/plugin-transform-regenerator": "^7.4.5", "@babel/plugin-transform-reserved-words": "^7.2.0", "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-spread": "^7.6.2", "@babel/plugin-transform-sticky-regex": "^7.2.0", "@babel/plugin-transform-template-literals": "^7.4.4", "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.5.5", + "@babel/plugin-transform-unicode-regex": "^7.6.2", + "@babel/types": "^7.6.3", "browserslist": "^4.6.0", "core-js-compat": "^3.1.1", "invariant": "^2.2.2", @@ -843,9 +849,9 @@ } }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.6.3.tgz", + "integrity": "sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-transform-react-display-name": "^7.0.0", @@ -855,12 +861,12 @@ } }, "@babel/preset-typescript": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz", - "integrity": "sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz", + "integrity": "sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.3.2" + "@babel/plugin-transform-typescript": "^7.6.0" } }, "@babel/runtime": { @@ -879,35 +885,35 @@ } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" } }, "@babel/traverse": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", - "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", + "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", + "@babel/generator": "^7.6.3", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.5", - "@babel/types": "^7.5.5", + "@babel/parser": "^7.6.3", + "@babel/types": "^7.6.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", - "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", + "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", @@ -934,9 +940,9 @@ "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" }, "@hapi/address": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.0.tgz", - "integrity": "sha512-ukWwSQ2Kd9rNHFlFd3hAKQTD/O2gYHu90IGl316CHZOGN+Vm+opxWhQ1aG4gfBoP5hjXiBClmck652Pu7/j0cQ==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz", + "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==" }, "@hapi/bourne": { "version": "1.3.2", @@ -944,9 +950,9 @@ "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, "@hapi/hoek": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.2.tgz", - "integrity": "sha512-18P3VwngjNEcmvPj1mmiHLPyUPjhPAxIyJKDj4PRIY0F5ac3P0Vd0hkASPyWXHK0rfY3P9N2FoxV8ZuYaRBZ1g==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.3.0.tgz", + "integrity": "sha512-C0QL9bmgUXTSuf8nDeGrpMjtJG7tPUr8wG6/wxPbP62tGwCwQtdMSJYfESowmY4P3Hn593f+8OzNY5bckcu/LQ==" }, "@hapi/joi": { "version": "15.1.1", @@ -960,9 +966,9 @@ } }, "@hapi/topo": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.3.tgz", - "integrity": "sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.5.tgz", + "integrity": "sha512-bi9m1jrui9LlvtVdLaHv0DqeOoe+I8dep+nEcTgW6XxJHL3xArQcilYz3tIp0cRC4gWlsVtABK7vNKg4jzEmAA==", "requires": { "@hapi/hoek": "8.x.x" } @@ -1010,20 +1016,6 @@ "rimraf": "^2.5.4", "slash": "^2.0.0", "strip-ansi": "^5.0.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "@jest/environment": { @@ -1075,18 +1067,6 @@ "string-length": "^2.0.0" }, "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1300,9 +1280,9 @@ "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.1.tgz", - "integrity": "sha512-p6z6JJroP989jHWcuraeWpzdejehTmLUpyC9smhTBWyPN0VVGe2phbYxpPTV7Vh8XzmFrcG55idrnfWn/2oQEw==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", + "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==" }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "4.2.0", @@ -1320,26 +1300,26 @@ "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" }, "@svgr/babel-preset": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.1.tgz", - "integrity": "sha512-rPFKLmyhlh6oeBv3j2vEAj2nd2QbWqpoJLKzBLjwQVt+d9aeXajVaPNEqrES2spjXKR4OxfgSs7U0NtmAEkr0Q==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", + "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", "requires": { "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.1", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", "@svgr/babel-plugin-transform-svg-component": "^4.2.0" } }, "@svgr/core": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.2.tgz", - "integrity": "sha512-N+tP5CLFd1hP9RpO83QJPZY3NL8AtrdqNbuhRgBkjE/49RnMrrRsFm1wY8pueUfAGvzn6tSXUq29o6ah8RuR5w==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", + "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", "requires": { - "@svgr/plugin-jsx": "^4.3.2", + "@svgr/plugin-jsx": "^4.3.3", "camelcase": "^5.3.1", "cosmiconfig": "^5.2.1" } @@ -1353,12 +1333,12 @@ } }, "@svgr/plugin-jsx": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.2.tgz", - "integrity": "sha512-+1GW32RvmNmCsOkMoclA/TppNjHPLMnNZG3/Ecscxawp051XJ2MkO09Hn11VcotdC2EPrDfT8pELGRo+kbZ1Eg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", + "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", "requires": { "@babel/core": "^7.4.5", - "@svgr/babel-preset": "^4.3.1", + "@svgr/babel-preset": "^4.3.3", "@svgr/hast-util-to-babel-ast": "^4.3.2", "svg-parser": "^2.0.0" } @@ -1401,9 +1381,9 @@ } }, "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", + "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", "requires": { "@babel/types": "^7.0.0" } @@ -1468,65 +1448,60 @@ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" }, "@types/yargs": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", - "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", + "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==" + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" }, "@typescript-eslint/eslint-plugin": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", - "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.3.3.tgz", + "integrity": "sha512-12cCbwu5PbQudkq2xCIS/QhB7hCMrsNPXK+vJtqy/zFqtzVkPRGy12O5Yy0gUK086f3VHV/P4a4R4CjMW853pA==", "requires": { - "@typescript-eslint/experimental-utils": "1.13.0", - "eslint-utils": "^1.3.1", + "@typescript-eslint/experimental-utils": "2.3.3", + "eslint-utils": "^1.4.2", "functional-red-black-tree": "^1.0.1", "regexpp": "^2.0.1", - "tsutils": "^3.7.0" + "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", - "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.3.3.tgz", + "integrity": "sha512-MQ4jKPMTU1ty4TigJCRKFPye2qyQdH8jzIIkceaHgecKFmkNS1hXPqKiZ+mOehkz6+HcN5Nuvwm+frmWZR9tdg==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-scope": "^4.0.0" + "@typescript-eslint/typescript-estree": "2.3.3", + "eslint-scope": "^5.0.0" } }, "@typescript-eslint/parser": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", - "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.3.3.tgz", + "integrity": "sha512-+cV53HuYFeeyrNW8x/rgPmbVrzzp/rpRmwbJnNtwn4K8mroL1BdjxwQh7X9cUHp9rm4BBiEWmD3cSBjKG7d5mw==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "1.13.0", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-visitor-keys": "^1.0.0" + "@typescript-eslint/experimental-utils": "2.3.3", + "@typescript-eslint/typescript-estree": "2.3.3", + "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", - "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.3.tgz", + "integrity": "sha512-GkACs12Xp8d/STunNv/iSMYJFQrkrax9vuPZySlgSzoJJtw1cp6tbEw4qsLskQv6vloLrkFJHcTJ0a/yCB5cIA==", "requires": { + "glob": "^7.1.4", + "is-glob": "^4.0.1", "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } + "semver": "^6.3.0" } }, "@webassemblyjs/ast": { @@ -1698,9 +1673,9 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz", - "integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", + "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==" }, "accepts": { "version": "1.3.7", @@ -1712,14 +1687,14 @@ } }, "acorn": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", - "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" }, "acorn-globals": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", - "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" @@ -1743,9 +1718,9 @@ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, "address": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", - "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" }, "adjust-sourcemap-loader": { "version": "2.0.0", @@ -1876,11 +1851,6 @@ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -1895,16 +1865,6 @@ "es-abstract": "^1.7.0" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -2005,17 +1965,17 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.4.tgz", + "integrity": "sha512-Koz2cJU9dKOxG8P1f8uVaBntOv9lP4yz9ffWvWaicv9gHBPhpQB22nGijwd8gqW9CNT+UdkbQOQNLVI8jN1ZfQ==", "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", + "browserslist": "^4.7.0", + "caniuse-lite": "^1.0.30000998", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" + "postcss": "^7.0.18", + "postcss-value-parser": "^4.0.2" }, "dependencies": { "postcss-value-parser": { @@ -2096,27 +2056,16 @@ } }, "babel-eslint": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz", - "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.0.0", "@babel/traverse": "^7.0.0", "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" } }, "babel-extract-comments": { @@ -2197,9 +2146,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -2207,9 +2156,9 @@ } }, "babel-plugin-named-asset-import": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.3.tgz", - "integrity": "sha512-1XDRysF4894BUdMChT+2HHbtJYiO7zx5Be7U6bT8dISy7OdyETMGIAQBMPQCsY1YRf0xcubwnKKaDr5bk15JTA==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.4.tgz", + "integrity": "sha512-S6d+tEzc5Af1tKIMbsf2QirCcPdQ+mKUCY2H1nJj1DyA1ShwpsoxEOAwbWsG5gcXNV/olpvQd9vrUWRx4bnhpw==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2240,35 +2189,118 @@ } }, "babel-preset-react-app": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.1.tgz", - "integrity": "sha512-v7MeY+QxdBhM9oU5uOQCIHLsErYkEbbjctXsb10II+KAnttbe0rvprvP785dRxfa9dI4ZbsGXsRU07Qdi5BtOw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.2.tgz", + "integrity": "sha512-aXD+CTH8Chn8sNJr4tO/trWKqe5sSE4hdO76j9fhVezJSzmpWYWUSc5JoPmdSxADwef5kQFNGKXd433vvkd2VQ==", "requires": { - "@babel/core": "7.5.5", + "@babel/core": "7.6.0", "@babel/plugin-proposal-class-properties": "7.5.5", - "@babel/plugin-proposal-decorators": "7.4.4", + "@babel/plugin-proposal-decorators": "7.6.0", "@babel/plugin-proposal-object-rest-spread": "7.5.5", "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-destructuring": "7.5.0", + "@babel/plugin-transform-destructuring": "7.6.0", "@babel/plugin-transform-flow-strip-types": "7.4.4", "@babel/plugin-transform-react-display-name": "7.2.0", - "@babel/plugin-transform-runtime": "7.5.5", - "@babel/preset-env": "7.5.5", + "@babel/plugin-transform-runtime": "7.6.0", + "@babel/preset-env": "7.6.0", "@babel/preset-react": "7.0.0", - "@babel/preset-typescript": "7.3.3", - "@babel/runtime": "7.5.5", + "@babel/preset-typescript": "7.6.0", + "@babel/runtime": "7.6.0", "babel-plugin-dynamic-import-node": "2.3.0", "babel-plugin-macros": "2.6.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { - "@babel/runtime": { + "@babel/plugin-proposal-object-rest-spread": { "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/preset-env": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", + "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.6.0", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.6.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.6.0", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, + "@babel/runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", + "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", "requires": { "regenerator-runtime": "^0.13.2" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -2387,9 +2419,9 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", + "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==" }, "bn.js": { "version": "4.11.8", @@ -2673,21 +2705,6 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "cache-base": { @@ -2758,9 +2775,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000989", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", - "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==" + "version": "1.0.30000999", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz", + "integrity": "sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg==" }, "capture-exit": { "version": "2.0.0", @@ -3322,9 +3339,9 @@ } }, "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" }, "chrome-trace-event": { "version": "1.0.2", @@ -3620,9 +3637,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", - "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -3705,9 +3722,9 @@ } }, "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" }, "core-js-compat": { "version": "3.2.1", @@ -3781,9 +3798,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -4058,9 +4075,9 @@ } }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, "d": { "version": "1.0.1", @@ -4072,9 +4089,9 @@ } }, "d3": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.11.0.tgz", - "integrity": "sha512-LXgMVUAEAzQh6WfEEOa8tJX4RA64ZJ6twC3CJ+Xzid+fXWLTZkkglagXav/eOoQgzQi5rzV0xC4Sfspd6hFDHA==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.12.0.tgz", + "integrity": "sha512-flYVMoVuhPFHd9zVCe2BxIszUWqBcd5fvQGMNRmSiBrgdnh6Vlruh60RJQTouAK9xPbOB0plxMvBm4MoyODXNg==", "requires": { "d3-array": "1", "d3-axis": "1", @@ -4710,33 +4727,34 @@ "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" }, "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, "downshift": { - "version": "3.2.13", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-3.2.13.tgz", - "integrity": "sha512-vR6NRUH5KojyVH1FKXLrHMkDhS9Ou1vcBb/KuY32YxmOk0kHLtaTASWpUwGL4fqHldvE8Wc8gGtKfhtJcY1DFg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-3.3.4.tgz", + "integrity": "sha512-3bM11S3p78p/moyJqDPc1j357dm/C+dN+54HKuc526k5etNXvnXyxsb+Ufd2yLL6qK4QZA62DysAgtMCIsKCNA==", "requires": { "@babel/runtime": "^7.4.5", + "@reach/auto-id": "^0.2.0", "compute-scroll-into-view": "^1.0.9", "prop-types": "^15.7.2", "react-is": "^16.9.0" }, "dependencies": { "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { "regenerator-runtime": "^0.13.2" } }, "react-is": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", - "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" } } }, @@ -4800,15 +4818,15 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", - "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", + "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==", "dev": true }, "electron-to-chromium": { - "version": "1.3.252", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz", - "integrity": "sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg==" + "version": "1.3.278", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.278.tgz", + "integrity": "sha512-4cPkOCY5k4z69MHOA96VUt+Wl24AbLHQcm7W9ckabJ/iRe7oBFNMiliw75lK/w++R9bKCUxJ0mFnMRMylnAlbA==" }, "elliptic": { "version": "6.5.1", @@ -4840,21 +4858,59 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "entities": { @@ -4879,9 +4935,9 @@ } }, "es-abstract": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.1.tgz", - "integrity": "sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -4891,8 +4947,8 @@ "is-regex": "^1.0.4", "object-inspect": "^1.6.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.0.0", - "string.prototype.trimright": "^2.0.0" + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { @@ -4970,9 +5026,9 @@ } }, "eslint": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", - "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz", + "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==", "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -5013,15 +5069,6 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "import-fresh": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", @@ -5039,20 +5086,20 @@ } }, "eslint-config-prettier": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz", - "integrity": "sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz", + "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==", "dev": true, "requires": { "get-stdin": "^6.0.0" } }, "eslint-config-react-app": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.1.tgz", - "integrity": "sha512-GYXP3F/0PSHlYfGHhahqnJze8rYKxzXgrzXVqRRd4rDO40ga4NA3aHM7/HKbwceDN0/C1Ij3BoAWFawJgRbXEw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.2.tgz", + "integrity": "sha512-VhlESAQM83uULJ9jsvcKxx2Ab0yrmjUt8kDz5DyhTQufqWE0ssAnejlWri5LXv25xoXfdqOyeDPdfJS9dXKagQ==", "requires": { - "confusing-browser-globals": "^1.0.8" + "confusing-browser-globals": "^1.0.9" } }, "eslint-import-resolver-node": { @@ -5080,15 +5127,36 @@ } }, "eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", - "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.2.tgz", + "integrity": "sha512-S5VnD+UpVY1PyYRqeBd/4pgsmkvSokbHqTXAQMpvCyRr3XN2tvSLo9spm2nEpqQqh9dezw3os/0zWihLeOg2Rw==", "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "fs-extra": "^8.1.0", + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^1.3.1", + "schema-utils": "^2.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } } }, "eslint-module-utils": { @@ -5322,9 +5390,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -5332,9 +5400,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", - "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", + "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -5372,9 +5440,9 @@ "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -5440,9 +5508,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" }, "events": { "version": "3.0.0", @@ -5956,9 +6024,9 @@ "integrity": "sha512-i/mVBOoa9o+tl+u9owOJUF8k8L85odZNIsctB+JAK2HFT8jckiBwmk+3uydlm6FN8czgnkIwQtBv6yyAbrzXjw==" }, "follow-redirects": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.8.1.tgz", - "integrity": "sha512-micCIbldHioIegeKs41DoH0KS3AXfFzgS30qVkM6z/XOE/GJgvmsoc839NUqa1B9udYe9dQxgv7KFwng6+p/dw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", "requires": { "debug": "^3.0.0" }, @@ -6161,9 +6229,9 @@ "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==" }, "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz", + "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==" }, "get-stdin": { "version": "6.0.0", @@ -6193,9 +6261,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6206,9 +6274,9 @@ } }, "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "requires": { "is-glob": "^4.0.1" } @@ -6311,9 +6379,9 @@ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" }, "handlebars": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.0.tgz", - "integrity": "sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz", + "integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -6438,16 +6506,16 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, "history": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", - "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "requires": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", + "resolve-pathname": "^3.0.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0", - "value-equal": "^0.4.0" + "value-equal": "^1.0.1" } }, "hmac-drbg": { @@ -6469,9 +6537,9 @@ } }, "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" }, "hpack.js": { "version": "2.1.6", @@ -6610,6 +6678,13 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "http-parser-js": { @@ -6618,11 +6693,11 @@ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -6766,9 +6841,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "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", @@ -6991,6 +7066,11 @@ "path-is-inside": "^1.0.1" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7150,12 +7230,12 @@ } }, "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.8.0" + "jest-cli": "^24.9.0" }, "dependencies": { "jest-cli": { @@ -7212,20 +7292,6 @@ "micromatch": "^3.1.10", "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-diff": { @@ -7941,11 +8007,11 @@ "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7986,20 +8052,6 @@ "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-runtime": { @@ -8030,20 +8082,6 @@ "slash": "^2.0.0", "strip-bom": "^3.0.0", "yargs": "^13.3.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-serializer": { @@ -8069,20 +8107,6 @@ "natural-compare": "^1.4.0", "pretty-format": "^24.9.0", "semver": "^6.2.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-util": { @@ -8130,16 +8154,40 @@ } }, "jest-watch-typeahead": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.1.tgz", - "integrity": "sha512-cDIko96c4Yqg/7mfye1eEYZ6Pvugo9mnOOhGQod3Es7/KptNv1b+9gFVaotzdqNqTlwbkA80BnWHtzV4dc+trA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.0.tgz", + "integrity": "sha512-bJR/HPNgOQnkmttg1OkBIrYFAYuxFxExtgQh67N2qPvaWGVC8TCkedRNPKBfmZfVXFD3u2sCH+9OuS5ApBfCgA==", "requires": { - "ansi-escapes": "^3.0.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.1", "jest-watcher": "^24.3.0", - "slash": "^2.0.0", - "string-length": "^2.0.0", + "slash": "^3.0.0", + "string-length": "^3.1.0", "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + } + } } }, "jest-watcher": { @@ -8283,9 +8331,9 @@ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", "requires": { "minimist": "^1.2.0" } @@ -8552,9 +8600,9 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "loglevel": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", - "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==" + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==" }, "loose-envify": { "version": "1.4.0", @@ -8633,18 +8681,18 @@ } }, "match-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.0.1.tgz", - "integrity": "sha512-DdlYxhN20iVJI7jEK7wkZY+EPtaj2G4tT59lDSxG3F6lD9gGtQKaLNCP/0HF4q2n3bT/dRO5L7j3PL8TK5wRdA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.0.2.tgz", + "integrity": "sha512-5EcCLEmPgfvq2hg1DAgAG7zqqS9bnZmRXzLR3md0xRi3Q1oGnnze6HuY+4bDRtm+X2lTsVZL8oG9FOkALFT4vw==", "requires": { "@babel/runtime": "^7.5.5", "remove-accents": "0.4.2" }, "dependencies": { "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -8662,9 +8710,9 @@ } }, "mdi-react": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.5.0.tgz", - "integrity": "sha512-OTm2TnBRgvHaMfBJsEqxHdiLZ4SToDC/f9ewI3x8yg0g20Fk7vO3YbBdpBF5C046ls2Emv5yKshoxue6mYpP7A==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.6.0.tgz", + "integrity": "sha512-mes6iLVHCEs0gDg/WNiF/xBZ6ES6EQtd10Aoe186yKU/TeWiYDLgmKaybIyV2UPsplD0bfHpxyhS2B0W9c+pqg==" }, "mdn-data": { "version": "2.0.4", @@ -8757,9 +8805,9 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", - "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==" }, "methods": { "version": "1.1.2", @@ -8841,9 +8889,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -8851,11 +8899,12 @@ } }, "mini-css-extract-plugin": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", - "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", "requires": { "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" } @@ -9057,9 +9106,9 @@ } }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" }, "node-int64": { "version": "0.4.0", @@ -9136,6 +9185,13 @@ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } } } @@ -9165,18 +9221,11 @@ } }, "node-releases": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz", - "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==", + "version": "1.1.35", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.35.tgz", + "integrity": "sha512-JGcM/wndCN/2elJlU0IGdVEJQQnJwsLbgPCFd2pY7V0mxf17bZ0Gb/lgOtL29ZQhvEX5shnVhxQyZz3ex94N8w==", "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "semver": "^6.3.0" } }, "normalize-package-data": { @@ -9211,9 +9260,15 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } }, "npm-run-path": { "version": "2.0.2", @@ -9332,14 +9387,14 @@ } }, "object.fromentries": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", - "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", + "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", "function-bind": "^1.1.1", - "has": "^1.0.1" + "has": "^1.0.3" } }, "object.getownpropertydescriptors": { @@ -9405,9 +9460,9 @@ } }, "open": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", - "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "requires": { "is-wsl": "^1.1.0" } @@ -9515,9 +9570,9 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "requires": { "p-try": "^2.0.0" } @@ -9551,11 +9606,11 @@ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" }, @@ -9613,9 +9668,9 @@ } }, "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -9813,9 +9868,9 @@ } }, "portfinder": { - "version": "1.0.23", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", - "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==", + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", + "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", "requires": { "async": "^1.5.2", "debug": "^2.2.0", @@ -9843,9 +9898,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", - "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", + "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -10446,6 +10501,13 @@ "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + } } }, "postcss-normalize-whitespace": { @@ -10669,6 +10731,11 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", @@ -10777,9 +10844,9 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "psl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz", - "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" }, "public-encrypt": { "version": "4.0.3", @@ -10839,6 +10906,15 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -10903,9 +10979,9 @@ } }, "react": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", - "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.10.2.tgz", + "integrity": "sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -10925,23 +11001,16 @@ } }, "react-app-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.2.tgz", - "integrity": "sha512-yZcpLnIr0FOIzrOOz9JC37NWAWEuCaQWmYn9EWjEzlCW4cOmA5MkT5L3iP8QuUeFnoqVCTJgjIWYbXEJgNXhGA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.4.tgz", + "integrity": "sha512-5Vte6ki7jpNsNCUKaboyofAhmURmCn2Y6Hu7ydJ6Iu4dct1CIGoh/1FT7gUZKAbowVX2lxVPlijvp1nKxfAl4w==", "requires": { - "core-js": "3.1.4", + "core-js": "3.2.1", "object-assign": "4.1.1", "promise": "8.0.3", "raf": "3.4.1", "regenerator-runtime": "0.13.3", "whatwg-fetch": "3.0.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - } } }, "react-clientside-effect": { @@ -10962,13 +11031,13 @@ } }, "react-dev-utils": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.3.tgz", - "integrity": "sha512-OyInhcwsvycQ3Zr2pQN+HV4gtRXrky5mJXIy4HnqrWa+mI624xfYfqGuC9dYbxp4Qq3YZzP8GSGQjv0AgNU15w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.1.0.tgz", + "integrity": "sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg==", "requires": { "@babel/code-frame": "7.5.5", - "address": "1.1.0", - "browserslist": "4.6.6", + "address": "1.1.2", + "browserslist": "4.7.0", "chalk": "2.4.2", "cross-spawn": "6.0.5", "detect-port-alt": "1.1.6", @@ -10985,24 +11054,14 @@ "loader-utils": "1.2.3", "open": "^6.3.0", "pkg-up": "2.0.0", - "react-error-overlay": "^6.0.1", + "react-error-overlay": "^6.0.3", "recursive-readdir": "2.2.2", - "shell-quote": "1.6.1", - "sockjs-client": "1.3.0", + "shell-quote": "1.7.2", + "sockjs-client": "1.4.0", "strip-ansi": "5.2.0", "text-table": "0.2.0" }, "dependencies": { - "browserslist": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", - "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", - "requires": { - "caniuse-lite": "^1.0.30000984", - "electron-to-chromium": "^1.3.191", - "node-releases": "^1.1.25" - } - }, "inquirer": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", @@ -11026,14 +11085,14 @@ } }, "react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.2.tgz", + "integrity": "sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.15.0" + "scheduler": "^0.16.2" } }, "react-draggable": { @@ -11046,9 +11105,9 @@ } }, "react-error-overlay": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.1.tgz", - "integrity": "sha512-V9yoTr6MeZXPPd4nV/05eCBvGH9cGzc52FN8fs0O0TVQ3HYYf1n7EgZVtHbldRq5xU9zEzoXIITjYNIfxDDdUw==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.3.tgz", + "integrity": "sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw==" }, "react-focus-lock": { "version": "1.19.1", @@ -11116,9 +11175,9 @@ } }, "react-router": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.1.tgz", - "integrity": "sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", + "integrity": "sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==", "requires": { "@babel/runtime": "^7.1.2", "history": "^4.9.0", @@ -11133,41 +11192,41 @@ } }, "react-router-dom": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.1.tgz", - "integrity": "sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.2.tgz", + "integrity": "sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==", "requires": { "@babel/runtime": "^7.1.2", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.0.1", + "react-router": "5.1.2", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" } }, "react-scripts": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.1.1.tgz", - "integrity": "sha512-dbjTG9vJC61OI62hIswQYg5xHvwlxDTH6QXz6ICEuA5AqkFQWk1LKl76sk8fVL2WsyumbBc4FErALwKcEV2vNA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.2.0.tgz", + "integrity": "sha512-6LzuKbE2B4eFQG6i1FnTScn9HDcWBfXXnOwW9xKFPJ/E3rK8i1ufbOZ0ocKyRPxJAKdN7iqg3i7lt0+oxkSVOA==", "requires": { - "@babel/core": "7.5.5", + "@babel/core": "7.6.0", "@svgr/webpack": "4.3.2", - "@typescript-eslint/eslint-plugin": "1.13.0", - "@typescript-eslint/parser": "1.13.0", - "babel-eslint": "10.0.2", - "babel-jest": "^24.8.0", + "@typescript-eslint/eslint-plugin": "^2.2.0", + "@typescript-eslint/parser": "^2.2.0", + "babel-eslint": "10.0.3", + "babel-jest": "^24.9.0", "babel-loader": "8.0.6", - "babel-plugin-named-asset-import": "^0.3.3", - "babel-preset-react-app": "^9.0.1", + "babel-plugin-named-asset-import": "^0.3.4", + "babel-preset-react-app": "^9.0.2", "camelcase": "^5.2.0", "case-sensitive-paths-webpack-plugin": "2.2.0", "css-loader": "2.1.1", "dotenv": "6.2.0", - "dotenv-expand": "4.2.0", + "dotenv-expand": "5.1.0", "eslint": "^6.1.0", - "eslint-config-react-app": "^5.0.1", - "eslint-loader": "2.2.1", + "eslint-config-react-app": "^5.0.2", + "eslint-loader": "3.0.2", "eslint-plugin-flowtype": "3.13.0", "eslint-plugin-import": "2.18.2", "eslint-plugin-jsx-a11y": "6.2.3", @@ -11179,11 +11238,11 @@ "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", "is-wsl": "^1.1.0", - "jest": "24.8.0", + "jest": "24.9.0", "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.8.0", - "jest-watch-typeahead": "0.3.1", - "mini-css-extract-plugin": "0.5.0", + "jest-resolve": "24.9.0", + "jest-watch-typeahead": "0.4.0", + "mini-css-extract-plugin": "0.8.0", "optimize-css-assets-webpack-plugin": "5.0.3", "pnp-webpack-plugin": "1.5.0", "postcss-flexbugs-fixes": "4.1.0", @@ -11191,19 +11250,19 @@ "postcss-normalize": "7.0.1", "postcss-preset-env": "6.7.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.2", - "react-dev-utils": "^9.0.3", + "react-app-polyfill": "^1.0.4", + "react-dev-utils": "^9.1.0", "resolve": "1.12.0", "resolve-url-loader": "3.1.0", "sass-loader": "7.2.0", "semver": "6.3.0", "style-loader": "1.0.0", "terser-webpack-plugin": "1.4.1", - "ts-pnp": "1.1.2", + "ts-pnp": "1.1.4", "url-loader": "2.1.0", - "webpack": "4.39.1", + "webpack": "4.41.0", "webpack-dev-server": "3.2.1", - "webpack-manifest-plugin": "2.0.4", + "webpack-manifest-plugin": "2.1.1", "workbox-webpack-plugin": "4.3.1" } }, @@ -11341,9 +11400,9 @@ } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "regenerator-transform": { "version": "0.14.1", @@ -11367,11 +11426,6 @@ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" }, - "regexp-tree": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.13.tgz", - "integrity": "sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==" - }, "regexp.prototype.flags": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", @@ -11386,9 +11440,9 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "regexpu-core": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", - "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", "requires": { "regenerate": "^1.4.0", "regenerate-unicode-properties": "^8.1.0", @@ -11593,9 +11647,9 @@ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, "resolve-url": { "version": "0.2.1", @@ -11840,9 +11894,9 @@ } }, "scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -11864,11 +11918,11 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "requires": { - "node-forge": "0.7.5" + "node-forge": "0.9.0" } }, "semver": { @@ -11961,6 +12015,11 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -12069,15 +12128,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "shellwords": { "version": "0.1.1", @@ -12249,9 +12302,9 @@ } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "requires": { "debug": "^3.2.5", "eventsource": "^1.0.7", @@ -12271,6 +12324,14 @@ } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -12282,61 +12343,24 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-explorer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.0.1.tgz", - "integrity": "sha512-mv2sv2b6oN2L9n18O/eLrYiP5zfWEHESLq4utWBqNw8GnkbuRuXs8twVCOhMT5hxRzfQgS7Yxh7HlQaW8oeiAQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.1.0.tgz", + "integrity": "sha512-VlOYrBo7gKT72E3IGMzK33ddEWIHGIdyraz8nmpxC7n0ZrzGWq08pWkB8FBxlJJCm9xmP3imlZ9ElUsGbKPpvQ==", "dev": true, "requires": { "btoa": "^1.2.1", "chalk": "^2.4.2", "convert-source-map": "^1.6.0", - "ejs": "^2.6.2", + "ejs": "^2.7.1", "escape-html": "^1.0.3", "glob": "^7.1.4", - "lodash": "^4.17.11", - "open": "^6.3.0", + "lodash": "^4.17.15", + "open": "^6.4.0", "source-map": "^0.7.3", "temp": "^0.9.0", - "yargs": "^13.2.4" + "yargs": "^14.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -12354,49 +12378,29 @@ "strip-ansi": "^5.1.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.0.tgz", + "integrity": "sha512-/is78VKbKs70bVZH7w4YaZea6xcJWOAwkhbR0CFuZBmYtfTYF0xjGJF43AYd8g2Uii1yJwmS5GR2vBmrc32sbg==", "dev": true, "requires": { "cliui": "^5.0.0", + "decamelize": "^1.2.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "yargs-parser": "^15.0.0" } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -12660,6 +12664,11 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, "string-length": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", @@ -12699,21 +12708,21 @@ } }, "string.prototype.trimleft": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz", - "integrity": "sha1-aLaqjhYsaoDnbjqKDC50cYbicf8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" } }, "string.prototype.trimright": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz", - "integrity": "sha1-q0pW2AKgH75yk+EehPJNyBZGYd0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" } }, "string_decoder": { @@ -12790,9 +12799,9 @@ }, "dependencies": { "schema-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.2.0.tgz", - "integrity": "sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", "requires": { "ajv": "^6.10.2", "ajv-keywords": "^3.4.1" @@ -12919,9 +12928,9 @@ } }, "terser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.1.tgz", - "integrity": "sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.8.tgz", + "integrity": "sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -12929,9 +12938,9 @@ }, "dependencies": { "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==" }, "source-map": { "version": "0.6.1", @@ -13046,14 +13055,14 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, "tiny-invariant": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", - "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", + "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" }, "tiny-warning": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", - "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, "tmp": { "version": "0.0.33", @@ -13141,15 +13150,10 @@ "punycode": "^2.1.0" } }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, "ts-pnp": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz", - "integrity": "sha512-f5Knjh7XCyRIzoC/z1Su1yLLRrPrFCgtUAh/9fCSP6NKbATwpOL1+idQVXQokK9GRFURn/jYPGPfegIctwunoA==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.4.tgz", + "integrity": "sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw==" }, "tslib": { "version": "1.9.3", @@ -13183,9 +13187,9 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", - "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "type-check": { "version": "0.3.2", @@ -13195,6 +13199,11 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -13397,9 +13406,9 @@ }, "dependencies": { "schema-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.2.0.tgz", - "integrity": "sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", "requires": { "ajv": "^6.10.2", "ajv-keywords": "^3.4.1" @@ -13480,9 +13489,9 @@ } }, "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "vary": { "version": "1.1.2", @@ -13567,9 +13576,9 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.39.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.1.tgz", - "integrity": "sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz", + "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==", "requires": { "@webassemblyjs/ast": "1.8.5", "@webassemblyjs/helper-module-context": "1.8.5", @@ -13600,13 +13609,22 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } } } }, "webpack-dev-middleware": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz", - "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "requires": { "memory-fs": "^0.4.1", "mime": "^2.4.4", @@ -13718,6 +13736,29 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -13794,12 +13835,13 @@ } }, "webpack-manifest-plugin": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", - "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.1.1.tgz", + "integrity": "sha512-2zqJ6mvc3yoiqfDjghAIpljhLSDh/G7vqGrzYcYqqRCd/ZZZCAuc/YPE5xG0LGpLgDJRhUNV1H+znyyhIxahzA==", "requires": { "fs-extra": "^7.0.0", "lodash": ">=3.5 <5", + "object.entries": "^1.1.0", "tapable": "^1.0.0" } }, @@ -13927,9 +13969,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -14124,9 +14166,9 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "xmlchars": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", - "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "xregexp": { "version": "4.0.0", @@ -14144,9 +14186,9 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yargs": { "version": "13.3.0", diff --git a/client/package.json b/client/package.json index 9f1941da9..3e5a30f24 100644 --- a/client/package.json +++ b/client/package.json @@ -8,23 +8,23 @@ "@reach/menu-button": "^0.1.18", "@reach/tooltip": "^0.2.2", "brace": "^0.11.1", - "d3": "^5.11.0", - "downshift": "^3.2.13", + "d3": "^5.12.0", + "downshift": "^3.3.4", "keymaster": "^1.6.2", "localforage": "^1.7.3", "lodash": "^4.17.15", - "match-sorter": "^4.0.1", - "mdi-react": "^5.5.0", + "match-sorter": "^4.0.2", + "mdi-react": "^5.6.0", "mitt": "^1.1.3", "prop-types": "^15.7.2", - "react": "^16.9.0", + "react": "^16.10.2", "react-ace": "^7.0.4", "react-copy-to-clipboard": "^5.0.0", - "react-dom": "^16.9.0", + "react-dom": "^16.10.2", "react-draggable": "^3.3.2", "react-measure": "^2.3.0", - "react-router-dom": "^5.0.1", - "react-scripts": "^3.1.1", + "react-router-dom": "^5.1.2", + "react-scripts": "^3.2.0", "react-split-pane": "^0.1.87", "react-window": "^1.8.5", "taucharts": "^2.7.4", @@ -47,8 +47,8 @@ "not op_mini all" ], "devDependencies": { - "eslint-config-prettier": "^6.2.0", - "eslint-plugin-prettier": "^3.1.0", - "source-map-explorer": "^2.0.1" + "eslint-config-prettier": "^6.4.0", + "eslint-plugin-prettier": "^3.1.1", + "source-map-explorer": "^2.1.0" } } From 0f90a3c860970f81821ff07ad89039a874c5fea4 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 9 Oct 2019 00:37:04 -0500 Subject: [PATCH 155/855] Update project dependencies (minor/patch) --- package-lock.json | 140 ++++++++++++++++++++++------------------------ package.json | 4 +- 2 files changed, 69 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 326a71acf..deed2caa7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,28 +25,28 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz", - "integrity": "sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.2", + "@nodelib/fs.stat": "2.0.3", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz", - "integrity": "sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz", - "integrity": "sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.2", + "@nodelib/fs.scandir": "2.1.3", "fastq": "^1.6.0" } }, @@ -83,9 +83,9 @@ "dev": true }, "@types/node": { - "version": "12.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz", - "integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==", + "version": "12.7.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", + "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==", "dev": true }, "@types/normalize-package-data": { @@ -95,13 +95,13 @@ "dev": true }, "aggregate-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz", - "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, "requires": { "clean-stack": "^2.0.0", - "indent-string": "^3.2.0" + "indent-string": "^4.0.0" } }, "ansi-escapes": { @@ -259,9 +259,9 @@ "dev": true }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", "dev": true }, "concat-map": { @@ -348,9 +348,9 @@ "dev": true }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -399,16 +399,15 @@ } }, "fast-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz", - "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz", + "integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.1", - "@nodelib/fs.walk": "^1.2.1", - "glob-parent": "^5.0.0", - "is-glob": "^4.0.1", - "merge2": "^1.2.3", + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", "micromatch": "^4.0.2" } }, @@ -457,9 +456,9 @@ "dev": true }, "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz", + "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==", "dev": true }, "get-stdin": { @@ -492,9 +491,9 @@ } }, "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -538,15 +537,15 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, "husky": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.5.tgz", - "integrity": "sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.8.tgz", + "integrity": "sha512-HFOsgcyrX3qe/rBuqyTt+P4Gxn5P0seJmr215LAZ/vnwK3jWB3r0ck7swbzGRUbufCf9w/lgHPVbF/YXQALgfQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -560,17 +559,6 @@ "read-pkg": "^5.1.1", "run-node": "^1.0.0", "slash": "^3.0.0" - }, - "dependencies": { - "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" - } - } } }, "ignore": { @@ -590,9 +578,9 @@ } }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "inflight": { @@ -684,9 +672,9 @@ "dev": true }, "is-path-inside": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.1.tgz", - "integrity": "sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg==", + "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-promise": { @@ -742,9 +730,9 @@ "dev": true }, "lint-staged": { - "version": "9.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.2.5.tgz", - "integrity": "sha512-d99gTBFMJ29159+9iRvaMEQstmNcPAbQbhHSYw6D/1FncvFdIj8lWHztaq3Uq+tbZPABHXQ/fyN7Rp1QwF8HIw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.2.tgz", + "integrity": "sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -764,9 +752,9 @@ }, "dependencies": { "execa": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz", - "integrity": "sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.5.tgz", + "integrity": "sha512-SwmwZZyJjflcqLSgllk4EQlMLst2p9muyzwNugKGFlpAz6rZ7M+s2nBR97GAq4Vzjwx2y9rcMcmqzojwN+xwNA==", "dev": true, "requires": { "cross-spawn": "^6.0.5", @@ -884,6 +872,12 @@ "supports-color": "^2.0.0" } }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, "log-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", @@ -960,9 +954,9 @@ "dev": true }, "merge2": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", - "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", "dev": true }, "micromatch": { @@ -1289,9 +1283,9 @@ } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "semver-compare": { diff --git a/package.json b/package.json index 5630516ef..dd9886a73 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "3.1.0", "private": true, "devDependencies": { - "husky": "^3.0.5", - "lint-staged": "^9.2.5", + "husky": "^3.0.8", + "lint-staged": "^9.4.2", "prettier": "^1.18.2" }, "prettier": { From d7745f94eba7625a971c32e54132c3e4c0c85708 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 10 Oct 2019 19:00:28 -0500 Subject: [PATCH 156/855] Update server dependencies (minor/patch) --- server/package-lock.json | 12 ++++++------ server/package.json | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 843c9b9a2..86b590a30 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1833,9 +1833,9 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json2csv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.3.tgz", - "integrity": "sha512-tg5sm25TOwgMsPUixPFmmuOUFtVCj4p57XipoE8gi/ejNftce/0d8LBgWnCkjF4HsLDsFzszdbIEV6mnK0WfNg==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.4.tgz", + "integrity": "sha512-YxBhY4Lmn8IvVZ36nqg5omxneLy9JlorkqW1j/EDCeqvmi+CQ4uM+wsvXlcIqvGDewIPXMC/O/oF8DX9EH5aoA==", "requires": { "commander": "^2.15.1", "jsonparse": "^1.3.1", @@ -2436,9 +2436,9 @@ } }, "nodemailer": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.3.0.tgz", - "integrity": "sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.3.1.tgz", + "integrity": "sha512-j0BsSyaMlyadEDEypK/F+xlne2K5m6wzPYMXS/yxKI0s7jmT1kBx6GEKRVbZmyYfKOsjkeC/TiMVDJBI/w5gMQ==" }, "normalize-package-data": { "version": "2.5.0", diff --git a/server/package.json b/server/package.json index f5cb047f4..51a2ae29a 100644 --- a/server/package.json +++ b/server/package.json @@ -45,7 +45,7 @@ "hdb": "^0.17.1", "helmet": "^3.21.1", "ini": "^1.3.5", - "json2csv": "^4.5.3", + "json2csv": "^4.5.4", "lodash": "^4.17.11", "minimist": "^1.2.0", "mkdirp": "^0.5.1", @@ -58,7 +58,7 @@ "node-crate": "^2.0.6", "node-fetch": "^2.6.0", "node-xlsx": "^0.15.0", - "nodemailer": "^6.3.0", + "nodemailer": "^6.3.1", "passport": "^0.4.0", "passport-google-oauth20": "^2.0.0", "passport-http": "^0.3.0", From 94da83ae63cf452995c3f96ed24097b276264834 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 10 Oct 2019 19:21:59 -0500 Subject: [PATCH 157/855] Update passport-saml (major) --- server/package-lock.json | 79 ++++++++++++++++++---------------------- server/package.json | 2 +- 2 files changed, 36 insertions(+), 45 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 86b590a30..3c5e13130 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -706,7 +706,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -792,9 +791,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", - "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", + "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==" }, "emoji-regex": { "version": "7.0.3", @@ -829,7 +828,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -843,7 +841,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -1360,8 +1357,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -1457,7 +1453,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -1471,8 +1466,7 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "hdb": { "version": "0.17.1", @@ -1694,14 +1688,12 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-extglob": { "version": "2.1.1", @@ -1743,7 +1735,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^1.0.1" } @@ -1752,7 +1743,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -2476,8 +2466,7 @@ "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 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.0", @@ -2507,7 +2496,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.5.1" @@ -2683,17 +2671,17 @@ } }, "passport-saml": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-0.35.0.tgz", - "integrity": "sha512-WvLhFeMhAy9GaJvuORR2M6NiW0L9KxSlQRbiTajHBJRMziJ/Yg7uZosrwpoDwhztYaB8PpG0tCuMRG43WWYoCQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-1.2.0.tgz", + "integrity": "sha512-CU1JOx9FTITF8+vl/G1g7FV6kHWXYzECV3pq3D8K3RIM1MS0efbfQ2hkgDFdoZGdG9DdMH5z8OBW/O8qoXnkLQ==", "requires": { "debug": "^3.1.0", "passport-strategy": "*", "q": "^1.5.0", - "xml-crypto": "^0.10.1", + "xml-crypto": "^1.1.4", "xml-encryption": "^0.11.0", "xml2js": "0.4.x", - "xmlbuilder": "^9.0.4", + "xmlbuilder": "^11.0.0", "xmldom": "0.1.x" }, "dependencies": { @@ -3718,6 +3706,15 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3869,19 +3866,12 @@ } }, "xml-crypto": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.10.1.tgz", - "integrity": "sha1-+DL3TM9W8kr8rhFjofyrRNlndKg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", "requires": { - "xmldom": "=0.1.19", - "xpath.js": ">=0.0.3" - }, - "dependencies": { - "xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=" - } + "xmldom": "0.1.27", + "xpath": "0.0.27" } }, "xml-encryption": { @@ -3907,18 +3897,19 @@ } }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", + "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "util.promisify": "~1.0.0", + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xmldom": { "version": "0.1.27", diff --git a/server/package.json b/server/package.json index 51a2ae29a..cc9b828e9 100644 --- a/server/package.json +++ b/server/package.json @@ -63,7 +63,7 @@ "passport-google-oauth20": "^2.0.0", "passport-http": "^0.3.0", "passport-local": "^1.0.0", - "passport-saml": "^0.35.0", + "passport-saml": "^1.2.0", "pg": "^7.12.1", "pg-cursor": "^2.0.0", "request": "^2.88.0", From c1096d4842663cddbd839a85bbd4526bff41e5f1 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 10 Oct 2019 19:30:04 -0500 Subject: [PATCH 158/855] Update client dependencies mdi-react & react-draggable (major) --- client/package-lock.json | 12 ++++++------ client/package.json | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 6936a55a8..0b69eec33 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8710,9 +8710,9 @@ } }, "mdi-react": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-5.6.0.tgz", - "integrity": "sha512-mes6iLVHCEs0gDg/WNiF/xBZ6ES6EQtd10Aoe186yKU/TeWiYDLgmKaybIyV2UPsplD0bfHpxyhS2B0W9c+pqg==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mdi-react/-/mdi-react-6.2.0.tgz", + "integrity": "sha512-IM1+/YjJ5DJ4rWKDqphfxra6RM52T6Yiki1pr7dJzoE8B5SoPln0D3wwPMWuwEm9fd8oqsM8eMwAYuim3tgmzg==" }, "mdn-data": { "version": "2.0.4", @@ -11096,9 +11096,9 @@ } }, "react-draggable": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.2.tgz", - "integrity": "sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.0.3.tgz", + "integrity": "sha512-4vD6zms+9QGeZ2RQXzlUBw8PBYUXy+dzYX5r22idjp9YwQKIIvD/EojL0rbjS1GK4C3P0rAJnmKa8gDQYWUDyA==", "requires": { "classnames": "^2.2.5", "prop-types": "^15.6.0" diff --git a/client/package.json b/client/package.json index 3e5a30f24..19fc6646c 100644 --- a/client/package.json +++ b/client/package.json @@ -14,14 +14,14 @@ "localforage": "^1.7.3", "lodash": "^4.17.15", "match-sorter": "^4.0.2", - "mdi-react": "^5.6.0", + "mdi-react": "^6.2.0", "mitt": "^1.1.3", "prop-types": "^15.7.2", "react": "^16.10.2", "react-ace": "^7.0.4", "react-copy-to-clipboard": "^5.0.0", "react-dom": "^16.10.2", - "react-draggable": "^3.3.2", + "react-draggable": "^4.0.3", "react-measure": "^2.3.0", "react-router-dom": "^5.1.2", "react-scripts": "^3.2.0", From 5fcc6f6152e710a87c20cf54df5bae7f7f03abb6 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 10 Oct 2019 19:46:02 -0500 Subject: [PATCH 159/855] v3.1.1 --- CHANGELOG.md | 15 +++++++++++++++ README.md | 2 ++ client/package-lock.json | 2 +- client/package.json | 2 +- package-lock.json | 2 +- package.json | 2 +- server/package-lock.json | 2 +- server/package.json | 2 +- 8 files changed, 23 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9f439f0f..957bb08e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 3.1.1 + +### October 10, 2019 + +Update all dependencies to latest (client & server). Includes major updates to following modules: + +- SAP Hana +- Cassandra +- SQL Server +- email support +- XLSX and CSV query result downloads +- SAML authentication + +Some integrations are not able to be tested by existing test setup. Please open an issue if any breakage is discovered. + ## 3.1.0 ### September 30, 2019 diff --git a/README.md b/README.md index dd16b6074..c4d35d823 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ A web app for writing and running SQL queries and visualizing the results. Suppo The docker image runs on port 3000 and uses `/var/lib/sqlpad` for the embedded database directory. +`latest` tag is continously built from latest commit in repo. Use specific version tags to ensure stability. + For configuration exposed via environment variables reference [CONFIGURATION.md](https://github.com/rickbergfalk/sqlpad/blob/master/CONFIGURATION.md). See [docker-examples](https://github.com/rickbergfalk/sqlpad/tree/master/docker-examples) directory for example docker-compose setup with SQL Server. diff --git a/client/package-lock.json b/client/package-lock.json index 0b69eec33..f7700a8fb 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "3.1.0", + "version": "3.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index 19fc6646c..bed54be35 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "3.1.0", + "version": "3.1.1", "private": true, "proxy": "http://localhost:3010", "dependencies": { diff --git a/package-lock.json b/package-lock.json index deed2caa7..12eb10fe1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "3.1.0", + "version": "3.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index dd9886a73..d4f70b3af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "3.1.0", + "version": "3.1.1", "private": true, "devDependencies": { "husky": "^3.0.8", diff --git a/server/package-lock.json b/server/package-lock.json index 3c5e13130..7210ba848 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "3.1.0", + "version": "3.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index cc9b828e9..a4e12c242 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "3.1.0", + "version": "3.1.1", "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { From 0d8f894e42fbb8f055487f78172ea8afe91ea6bd Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Sat, 12 Oct 2019 17:19:30 -0500 Subject: [PATCH 160/855] Define connections from config (#476) * Parse connection info from environment * Rename to getConnectionsFromConfig * Read connections from config file * Sort all connections together * Fix getConfigFromFile use * Load connection from config file during dev * Disable connection edit/delete buttons if connection is not editable * Don't render buttons for connections from config * Add connection configuration documentation * 3.2.0 won't be out immediately * Update README.md * Actually 3.2.0 will publish immediately after merge * Use SQLPAD_CONNECTIONS__ for consistency --- README.md | 256 ++++++++++++++++++++++- client/src/connections/ConnectionList.js | 2 +- server/config.dev.ini | 7 + server/lib/config/fromFile.js | 24 ++- server/lib/config/index.js | 3 +- server/models/connections.js | 103 ++++++++- server/package.json | 2 +- server/test/models/connections.js | 74 +++++++ 8 files changed, 446 insertions(+), 25 deletions(-) create mode 100644 server/config.dev.ini create mode 100644 server/test/models/connections.js diff --git a/README.md b/README.md index c4d35d823..97ab943ac 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,10 @@ sqlpad --dbPath ../db --port 3010 A docker image may be built using the Dockerfile located in `server` directory. See `docker-publish.sh` for example docker build command. +## Development + +[Developer guide](DEVELOPER-GUIDE.md) + ## Configuration SQLPad may be configured via environment variables, config file, or command line flags. @@ -245,9 +249,257 @@ Default: `true` Allows pre-approval of email domains. Delimit multiple domains by empty space. Env var: `WHITELISTED_DOMAINS` -## Development +### Connection configuration -[Developer guide](DEVELOPER-GUIDE.md) +As of 3.2.0 connections may be defined via application configuration. + +Every connection defined should provide a `name` and `driver` value, with driver equaling the value in header parentheses below. `name` will be the label used in the UI to label the connection. + +Field names and values are case sensitive. + +The connection ID value used can be any alphanumeric value, and is case-sensitive. This can be a randomly generated value like SQLPad's underlying embedded database uses, or it can be a more human-friendly name, or an id used from another source. + +How connections are defined in configuration depends on the source of the configuration. + +#### Environment variable + +When using environment variables, connection field values must be provided using an environment variable with the convention `SQLPAD_CONNECTIONS____`. Note double underscores between `SQLPAD_CONNECTIONS`, ``, and ``. Both connection ID and field name values are case sensitive. Boolean values should be the value `true` or `false`. + +Example for a MySQL connection with id `prod123`. + +```sh +SQLPAD_CONNECTIONS__prod123__name="Production 123" +SQLPAD_CONNECTIONS__prod123__driver=mysql +SQLPAD_CONNECTIONS__prod123__host=localhost +SQLPAD_CONNECTIONS__prod123__mysqlInsecureAuth=true +``` + +#### INI file + +When defining a connection in an INI file, use section header with the value `connections.`. + +```ini +[connections.prod123] +name = Production 123 +driver = mysql +host = localhost +mysqlInsecureAuth = true +``` + +#### JSON file + +When using JSON file, provide `` as a key under `connections`. + +```json +{ + "connections": { + "prod123": { + "name": "Production 123", + "driver": "mysql", + "host": "localhost", + "mysqlInsecureAuth": true + } + } +} +``` + +#### CrateDB (crate) + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be cratetext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    + +#### Apache Drill (drill) + + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be drilltext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    usernameDatabase Usernametext
    passwordDatabase Passwordtext
    drillDefaultSchemaDefault Schematext
    sslUse SSL to connect to Drillboolean
    + +#### SAP Hana (hdb) + + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be hdbtext
    hostHost/Server/IP Addresstext
    hanaportPort (e.g. 39015)text
    usernameDatabase Usernametext
    passwordDatabase Passwordtext
    hanadatabaseTenanttext
    hanaSchemaSchema (optional)text
    + +#### MySQL (mysql) + + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be mysqltext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    databaseDatabasetext
    usernameDatabase Usernametext
    passwordDatabase Passwordtext
    mysqlInsecureAuthUse old/insecure pre 4.1 Auth Systemboolean
    + +#### PostgreSQL (postgres) + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be postgrestext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    databaseDatabasetext
    usernameDatabase Usernametext
    passwordDatabase Passwordtext
    postgresSslUse SSLboolean
    postgresCertDatabase Certificate Pathtext
    postgresKeyDatabase Key Pathtext
    postgresCADatabase CA Pathtext
    useSocksConnect through SOCKS proxyboolean
    socksHostProxy hostnametext
    socksPortProxy porttext
    socksUsernameUsername for socks proxytext
    socksPasswordPassword for socks proxytext
    + +#### PrestoDB (presto) + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be prestotext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    usernameDatabase Usernametext
    prestoCatalogCatalogtext
    prestoSchemaSchematext
    + +#### MS SQL Server (sqlserver) + + + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be sqlservertext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    databaseDatabasetext
    usernameDatabase Usernametext
    passwordDatabase Passwordtext
    domainDomaintext
    sqlserverEncryptEncrypt (necessary for Azure)boolean
    + +#### Vertica (vertica) + + + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be verticatext
    hostHost/Server/IP Addresstext
    portPort (optional)text
    databaseDatabasetext
    usernameDatabase Usernametext
    passwordDatabase Passwordtext
    + +#### Cassandra (cassandra) + + + + + + + + + + + + + + + + +
    keydescriptiondata type
    nameName of connectiontext
    driverMust be cassandratext
    contactPointsContact points (comma delimited)text
    localDataCenterLocal data centertext
    keyspaceKeyspacetext
    ## License diff --git a/client/src/connections/ConnectionList.js b/client/src/connections/ConnectionList.js index 03105c7de..1f0a1c904 100644 --- a/client/src/connections/ConnectionList.js +++ b/client/src/connections/ConnectionList.js @@ -97,7 +97,7 @@ function ConnectionList({ const actions = []; - if (currentUser.role === 'admin') { + if (currentUser.role === 'admin' && item.editable) { actions.push(