diff --git a/.eslintrc.json b/.eslintrc.json index 711026dbf..37795411d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,7 +3,8 @@ "env": { "browser": true, "es6": true, - "amd": true + "amd": true, + "jest": true }, "parser": "babel-eslint", "parserOptions": { diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 1e198c2fd..762670881 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -455,30 +455,63 @@ "summary_description_not_scanned_2": { "message": "Navigate to another page and I promise I'll deliver the goods." }, + "summary_custom_settings": { + "message": "Custom Settings" + }, "summary_trust_site": { "message": "Trust Site" }, + "summary_trust_site_active": { + "message": "Site Trusted" + }, "summary_restrict_site": { "message": "Restrict Site" }, + "summary_restrict_site_active": { + "message": "Site Restricted" + }, "summary_undo": { "message": "Undo" }, "summary_pause_ghostery": { + "message": "Pause Ghostery" + }, + "summary_pause_ghostery_tooltip": { + "message": "Pause Ghostery extension." + }, + "summary_pause_ghostery_ab_pause": { "message": "Pause" }, "pause_30_min": { "message": "for 30 min" }, + "pause_30_min_condensed": { + "message": "30 mins" + }, "pause_1_hour": { "message": "for 1 hour" }, + "pause_1_hour_condensed": { + "message": "1 hr" + }, "pause_24_hours": { "message": "for 24 hours" }, + "pause_24_hours_condensed": { + "message": "24 hrs" + }, "summary_resume_ghostery": { + "message": "Resume Ghostery" + }, + "summary_resume_ghostery_tooltip": { + "message": "Ghostery extension paused. Click to resume." + }, + "summary_resume_ghostery_ab_pause": { "message": "Resume" }, + "summary_show_menu": { + "message": "show menu" + }, "summary_map_these_trackers": { "message": "Map These Trackers" }, @@ -645,6 +678,9 @@ "tracker_plural": { "message": "trackers" }, + "tracker_found": { + "message": "found" + }, "panel_signin_success": { "message": "You are now signed in as " }, @@ -756,6 +792,12 @@ "panel_header_verify_account": { "message": "Verify Account" }, + "panel_header_simple_view": { + "message": "Simple View" + }, + "panel_header_detailed_view": { + "message": "Detailed View" + }, "password_characters_requirements": { "message": "Only these special characters are allowed: !@#$%^&*=+()<>{}[];:,./?" }, @@ -1030,7 +1072,10 @@ "message": "Search by tracker" }, "page_load": { - "message": "Page Load" + "message": "Page Load:" + }, + "trackers_blocked": { + "message": "Trackers Blocked:" }, "settings_trusted_restricted_sites": { "message": "Trust & Restrict" @@ -1140,11 +1185,53 @@ "settings_filter_new": { "message": "New Since Last Update" }, + "alert_ghostery_paused": { + "message": "Ghostery extension has been paused." + }, + "alert_ghostery_resumed": { + "message": "Ghostery extension has been resumed." + }, + "alert_anti_track_on": { + "message": "Enhanced Anti-Trackng ON. Personal data will be anonymized." + }, + "alert_anti_track_off": { + "message": "Enhanced Anti-Tracking OFF. Personal data will not be anonymized." + }, + "alert_ad_block_on": { + "message": "Enhanced Ad-Blocking ON. Advertisements will be blocked." + }, + "alert_ad_block_off": { + "message": "Enhanced Ad-Blocking OFF. Advertisements will not be blocked." + }, + "alert_smart_block_on": { + "message": "Smart Blocking ON. Tracker blocking will be adjusted to optimize page performance." + }, + "alert_smart_block_off": { + "message": "Smart Blocking OFF. Tracker blocking will not be automatically adjusted." + }, + "alert_reload": { + "message": "Reload to see changes." + }, + "alert_site_trusted": { + "message": "Site whitelisted. Trackers will be allowed and Anti-Tracking disabled on this site." + }, + "alert_site_trusted_off": { + "message": "Site no longer whitelisted." + }, + "alert_site_restricted": { + "message": "Site blacklisted. Trackers will be blocked and Anti-Tracking enabled on this site." + }, + "alert_site_restricted_off": { + "message": "Site no longer blacklisted." + }, "tooltip_anti_track": { "message": "Enhanced Anti-Tracking" }, "tooltip_anti_track_body": { - "message": "Anonymize unblocked and unknown trackers for greater browsing protection." + "message": "Anonymize personal data for greater protection." + }, + "tooltip_anti_track_body_on": { + "message": "Personal data points anonymized." }, "tooltip_body_in_cliqz": { "message": "Feature already active in Cliqz by default." @@ -1153,7 +1240,10 @@ "message": "Enhanced Ad Blocking" }, "tooltip_ad_block_body": { - "message": "Block advertisements on websites you visit." + "message": "Block advertisements." + }, + "tooltip_ad_block_body_on": { + "message": "Advertisements have been blocked." }, "tooltip_smart_block": { "message": "Smart Blocking" @@ -1161,11 +1251,23 @@ "tooltip_smart_block_body": { "message": "Automatically block and unblock trackers to optimize page performance." }, + "tooltip_smart_block_body_on": { + "message": "Tracker blocking adjusted to optimize page performance." + }, "tooltip_trust": { - "message": "Always allow trackers on this site." + "message": "Always allow trackers & disable Anti-Tracking on this site." + }, + "tooltip_trust_on": { + "message": "Trackers allowed and Anti-Tracking disabled on site. Click to Undo." }, "tooltip_restrict": { - "message": "Always block trackers on this site." + "message": "Always block trackers & protect my personal data on this site." + }, + "tooltip_restrict_on": { + "message": "Trackers blocked and Anti-Tracking enabled on site. Click to Undo." + }, + "tooltip_custom_settings": { + "message": "Use my selected tracker settings." }, "tooltip_pause": { "message": "Pause Ghostery" diff --git a/app/images/panel/line-empty-moon.svg b/app/images/panel/line-empty-moon.svg new file mode 100644 index 000000000..0e7716c28 --- /dev/null +++ b/app/images/panel/line-empty-moon.svg @@ -0,0 +1,10 @@ + + + + Line + Created with Sketch. + + + + + diff --git a/app/images/panel/right-left-moon.svg b/app/images/panel/right-left-moon.svg new file mode 100644 index 000000000..1982c7eb3 --- /dev/null +++ b/app/images/panel/right-left-moon.svg @@ -0,0 +1,13 @@ + + + + right-left-moon + Created with Sketch. + + + + + + + + diff --git a/app/images/panel/right-right-moon.svg b/app/images/panel/right-right-moon.svg index d14604deb..96028e576 100644 --- a/app/images/panel/right-right-moon.svg +++ b/app/images/panel/right-right-moon.svg @@ -1,17 +1,13 @@ - - symbol - half circle caret right + + right-right-moon Created with Sketch. - - - - - - - + + + - \ No newline at end of file + diff --git a/app/panel/actions/BlockingActions.js b/app/panel/actions/BlockingActions.js index 0738353d0..8b6e823ae 100644 --- a/app/panel/actions/BlockingActions.js +++ b/app/panel/actions/BlockingActions.js @@ -11,7 +11,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_BLOCKING_DATA, +import { + GET_BLOCKING_DATA, UPDATE_BLOCK_ALL_TRACKERS, UPDATE_CATEGORIES, UPDATE_CATEGORY_BLOCKED, @@ -19,7 +20,8 @@ import { GET_BLOCKING_DATA, UPDATE_TRACKER_TRUST_RESTRICT, TOGGLE_EXPANDED, TOGGLE_EXPAND_ALL, - TOGGLE_EXPAND_CATEGORY } from '../constants/constants'; + TOGGLE_EXPAND_CATEGORY +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; /** diff --git a/app/panel/actions/DrawerActions.js b/app/panel/actions/DrawerActions.js deleted file mode 100644 index 51c23e125..000000000 --- a/app/panel/actions/DrawerActions.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Drawer Action creators - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -import { GET_CLIQZ_MODULE_DATA, - OPEN_DRAWER, - CLOSE_DRAWER, - TOGGLE_DRAWER_SETTING } from '../constants/constants'; -import { sendMessageInPromise } from '../utils/msg'; - -/** - * Get data for Cliqz adblock and antitracking modules - * @return {Object} dispatch - */ -export function getCliqzModuleData() { - return function (dispatch) { - return sendMessageInPromise('getCliqzModuleData').then((data) => { - dispatch({ - type: GET_CLIQZ_MODULE_DATA, - data, - }); - }); - }; -} - -/** - * Open drawer - * @param {Object} data - * @return {Object} - */ -export function openDrawer(data) { - return { - type: OPEN_DRAWER, - data, - }; -} - -/** - * Close drawer - * @return {Object} - */ -export function closeDrawer() { - return { - type: CLOSE_DRAWER, - }; -} - -/** - * Update checkboxes in Drawer. Picked up by Panel reducer. - * @return {Object} - */ -export function toggleDrawerSetting(settingName, isEnabled) { - const data = { - settingName, - isEnabled, - }; - return { - type: TOGGLE_DRAWER_SETTING, - data, - }; -} diff --git a/app/panel/actions/PanelActions.js b/app/panel/actions/PanelActions.js index faa5981b1..a3dbb2404 100644 --- a/app/panel/actions/PanelActions.js +++ b/app/panel/actions/PanelActions.js @@ -11,13 +11,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_PANEL_DATA, GET_SUMMARY_DATA, GET_BLOCKING_DATA, +import { + GET_PANEL_DATA, GET_SUMMARY_DATA, GET_BLOCKING_DATA, SHOW_NOTIFICATION, + TOGGLE_CLIQZ_FEATURE, CLOSE_NOTIFICATION, + TOGGLE_EXPERT, LOGIN_SUCCESS, LOGIN_FAILED, LOGOUT, CREATE_ACCOUNT_SUCCESS, CREATE_ACCOUNT_FAILED, - FORGOT_PASSWORD_SUCCESS, FORGOT_PASSWORD_FAILED } from '../constants/constants'; + FORGOT_PASSWORD_SUCCESS, FORGOT_PASSWORD_FAILED +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; import { doXHR } from '../utils/utils'; import globals from '../../../src/classes/Globals'; @@ -25,6 +29,22 @@ import { decodeJwt, log } from '../../../src/utils/common'; const API_ROOT_URL = `https://consumerapi.${globals.GHOSTERY_DOMAIN}.com`; +/** + * Update Cliqz Features. + * @return {Object} + */ +export function toggleCliqzFeature(featureName, isEnabled) { + const data = { + featureName, + isEnabled, + }; + return { + type: TOGGLE_CLIQZ_FEATURE, + data, + }; +} + + /** * Fetch panel data from background, only on the initial load. Returns combined * Panel, Summary and Blocking data as needed. @@ -84,6 +104,16 @@ export function closeNotification(data) { }; } +/** + * Called from Header and Summary's toggleExpert() and picked up by panel reducer + * @return {Object} + */ +export function toggleExpert() { + return { + type: TOGGLE_EXPERT, + }; +} + /** * Call consumerAPI and set updated login info to state. Called from Login * Component. Picked up by Panel reducer. diff --git a/app/panel/actions/SettingsActions.js b/app/panel/actions/SettingsActions.js index e2fa4c512..516618fc6 100644 --- a/app/panel/actions/SettingsActions.js +++ b/app/panel/actions/SettingsActions.js @@ -10,7 +10,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_SETTINGS_DATA, +import { + GET_SETTINGS_DATA, IMPORT_SETTINGS_DIALOG, IMPORT_SETTINGS_NATIVE, IMPORT_SETTINGS_FAILED, @@ -26,7 +27,8 @@ import { GET_SETTINGS_DATA, SETTINGS_TOGGLE_EXPAND_CATEGORY, SETTINGS_UPDATE_SEARCH_VALUE, SETTINGS_SEARCH_SUBMIT, - SETTINGS_FILTER } from '../constants/constants'; + SETTINGS_FILTER +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; import { hashCode } from '../../../src/utils/common'; import globals from '../../../src/classes/Globals'; @@ -280,4 +282,3 @@ export function filter(data) { data, }; } - diff --git a/app/panel/actions/SummaryActions.js b/app/panel/actions/SummaryActions.js index 936f7c6a9..c9628e478 100644 --- a/app/panel/actions/SummaryActions.js +++ b/app/panel/actions/SummaryActions.js @@ -11,12 +11,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_SUMMARY_DATA, +import { + GET_SUMMARY_DATA, UPDATE_TRACKER_COUNTS, UPDATE_GHOSTERY_PAUSED, UPDATE_SITE_POLICY, FILTER_TRACKERS, - TOGGLE_EXPERT } from '../constants/constants'; + TOGGLE_EXPERT +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; /** @@ -101,13 +103,3 @@ export function filterTrackers(data) { data, }; } - -/** - * Called from Summary.toggleExpert() and picked up by panel reducer - * @return {Object} - */ -export function toggleExpert() { - return { - type: TOGGLE_EXPERT, - }; -} diff --git a/app/panel/components/Blocking.jsx b/app/panel/components/Blocking.jsx index 639934ec4..2295a8a6e 100644 --- a/app/panel/components/Blocking.jsx +++ b/app/panel/components/Blocking.jsx @@ -14,7 +14,7 @@ import React, { Component } from 'react'; import Categories from './Blocking/Categories'; import BlockingHeader from './Blocking/BlockingHeader'; -import NotScanned from './NotScanned'; +import NotScanned from './BuildingBlocks/NotScanned'; import { updateSummaryBlockingCount } from '../utils/blocking'; /** * @class Implement Blocking View in the right @@ -254,7 +254,7 @@ class Blocking extends React.Component { paused_blocking={this.props.paused_blocking} selected_app_ids={this.props.selected_app_ids} /> - {this.state.disableBlocking ? + {(this.state.disableBlocking && this.props.is_expanded) ? :
diff --git a/app/panel/components/BuildingBlocks/CliqzFeatures.jsx b/app/panel/components/BuildingBlocks/CliqzFeatures.jsx new file mode 100644 index 000000000..7513e6d22 --- /dev/null +++ b/app/panel/components/BuildingBlocks/CliqzFeatures.jsx @@ -0,0 +1,204 @@ +/** + * Cliqz Features Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements buttons to render and toggle for Cliqz's features on/off. + * @memberof PanelClasses + */ +class CliqzFeatures extends React.Component { + constructor(props) { + super(props); + + // Event Bindings + this.getAntiTrackingTotal = this.getAntiTrackingTotal.bind(this); + this.getAdBlockingTotal = this.getAdBlockingTotal.bind(this); + this.getSmartBlockingTotal = this.getSmartBlockingTotal.bind(this); + this.clickAntiTracking = this.clickAntiTracking.bind(this); + this.clickAdBlocking = this.clickAdBlocking.bind(this); + this.clickSmartBlocking = this.clickSmartBlocking.bind(this); + } + + /** + * Calculates the text for above the Ad Blocking feature icon + * @return {String | Int} The text for above the Ad Blocking icon + */ + getAdBlockingTotal() { + if (!this.props.adBlockingActive) { + return '-'; + } + return this.props.adBlocking && this.props.adBlocking.totalCount || 0; + } + + /** + * Calculates the text for above the Smart Blocking feature icon + * @return {String | Int} The text for above the Smart Blocking icon + */ + getSmartBlockingTotal() { + if (!this.props.smartBlockingActive) { + return '-'; + } + const blockedCount = this.props.smartBlocking && Object.keys(this.props.smartBlocking.blocked).length || 0; + const unblockedCount = this.props.smartBlocking && Object.keys(this.props.smartBlocking.unblocked).length || 0; + + return blockedCount + unblockedCount; + } + + /** + * Calculates the text for above the Anti Tracking feature icon + * @return {String | Int} The text for above the Anit Tracking icon + */ + getAntiTrackingTotal() { + if (!this.props.antiTrackingActive) { + return '-'; + } + let antiTrackingTotal = 0; + for (const category in this.props.antiTracking) { + if (this.props.antiTracking.hasOwnProperty(category)) { + for (const app in this.props.antiTracking[category]) { + if (this.props.antiTracking[category][app] === 'unsafe') { + antiTrackingTotal++; + } + } + } + } + return antiTrackingTotal; + } + + /** + * Handles the click event for the AdBlocking button + */ + clickAdBlocking() { + if (this.props.isInactive) { + return; + } + this.props.clickButton({ + feature: 'enable_ad_block', + status: this.props.adBlockingActive, + text: !this.props.adBlockingActive ? t('alert_ad_block_on') : t('alert_ad_block_off'), + }); + } + + /** + * Handles the click event for the SmartBlocking button + */ + clickSmartBlocking() { + if (this.props.isInactive) { + return; + } + this.props.clickButton({ + feature: 'enable_smart_block', + status: this.props.smartBlockingActive, + text: !this.props.smartBlockingActive ? t('alert_smart_block_on') : t('alert_smart_block_off'), + }); + } + + /** + * Handles the click event for the AntiTracking button + */ + clickAntiTracking() { + if (this.props.isInactive) { + return; + } + this.props.clickButton({ + feature: 'enable_anti_tracking', + status: this.props.antiTrackingActive, + text: !this.props.antiTrackingActive ? t('alert_anti_track_on') : t('alert_anti_track_off'), + }); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Cliqz Features portion of the Summary View + */ + render() { + const { + isSmaller, + isCondensed, + isInactive, + antiTrackingActive, + adBlockingActive, + smartBlockingActive, + } = this.props; + + const cliqzFeaturesClassNames = ClassNames('sub-component', 'cliqz-features', { + smaller: isSmaller, + condensed: isCondensed, + inactive: isInactive, + }); + const antiTrackingClassNames = ClassNames('anti-tracking', 'cliqz-feature', { + active: antiTrackingActive, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const adBlockingClassNames = ClassNames('ad-blocking', 'cliqz-feature', { + active: adBlockingActive, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const smartBlockingClassNames = ClassNames('smart-blocking', 'cliqz-feature', { + active: smartBlockingActive, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + + return ( +
+
+
{this.getAntiTrackingTotal()}
+
+ +
+
+ { t('drawer_title_enable_anti_tracking') } +
+
+
+
{this.getAdBlockingTotal()}
+
+ +
+
+ { t('drawer_title_enable_ad_block') } +
+
+
+
{this.getSmartBlockingTotal()}
+
+ +
+
+ { t('drawer_title_enable_smart_block') } +
+
+
+ ); + } +} + +export default CliqzFeatures; diff --git a/app/panel/components/DonutGraph.jsx b/app/panel/components/BuildingBlocks/DonutGraph.jsx similarity index 58% rename from app/panel/components/DonutGraph.jsx rename to app/panel/components/BuildingBlocks/DonutGraph.jsx index 5f98631d5..43f80cb16 100644 --- a/app/panel/components/DonutGraph.jsx +++ b/app/panel/components/BuildingBlocks/DonutGraph.jsx @@ -12,18 +12,22 @@ */ import React, { Component } from 'react'; +import ClassNames from 'classnames'; import * as d3 from 'd3'; import { scaleLinear } from 'd3-scale'; + /** - * @class Generate donut graph with tracker data in the Summary view. + * @class Generate donut graph. Used to display tracker data in the Summary View. * @memberOf PanelClasses */ class DonutGraph extends React.Component { constructor(props) { super(props); - // event bindings - this.clickTrackersAll = this.clickTrackersAll.bind(this); + // Event Bindings + this.clickGraphText = this.clickGraphText.bind(this); + + // Variables this.colors = { regular: (id) => { switch (id) { @@ -47,56 +51,75 @@ class DonutGraph extends React.Component { return '#e8e8e8'; } }, - restricted: scaleLinear().range(['#f75065', '#ffb0Ba']), - paused: scaleLinear().range(['#848484', '#c9c9c9']), + redscale: scaleLinear().range(['#f75065', '#ffb0Ba']), + greyscale: scaleLinear().range(['#848484', '#c9c9c9']), }; } + /** * Lifecycle event */ componentDidMount() { const { - categories, sitePolicy, pausedBlocking, trackerCounts, isExpert + categories, + renderRedscale, + renderGreyscale, + totalCount, + isSmall, } = this.props; + this.generateGraph(categories, { - sitePolicy, - pausedBlocking, - trackerCounts, - isExpert, + renderRedscale, + renderGreyscale, + totalCount, + isSmall, }); } + /** * Lifecycle event */ componentWillReceiveProps(nextProps) { const { - categories, sitePolicy, pausedBlocking, trackerCounts, isExpert + categories, + renderRedscale, + renderGreyscale, + totalCount, + ghosteryFeatureSelect, + isSmall, } = this.props; + if (categories.length !== nextProps.categories.length || - sitePolicy !== nextProps.sitePolicy || - pausedBlocking !== nextProps.pausedBlocking || - isExpert !== nextProps.isExpert) { + renderRedscale !== nextProps.renderRedscale || + renderGreyscale !== nextProps.renderGreyscale || + totalCount !== nextProps.totalCount || + ghosteryFeatureSelect !== nextProps.ghosteryFeatureSelect || + isSmall !== nextProps.isSmall) { this.generateGraph(nextProps.categories, { - sitePolicy: nextProps.sitePolicy, - pausedBlocking: nextProps.pausedBlocking, - trackerCounts: nextProps.trackerCounts, - isExpert: nextProps.isExpert, + renderRedscale: nextProps.renderRedscale, + renderGreyscale: nextProps.renderGreyscale, + totalCount: nextProps.totalCount, + isSmall: nextProps.isSmall, }); } } + /** - * Generate donut-shaped graph with the scanning results. Add mouse event listeners - * to the parts of the created donut which would navigate to the corresponding - * tracker category in the blocking view. - * @param {Object} categories list of categories detected on the site - * @param {Object} options site policy, paused state, stats of the scanning + * Generate donut-shaped graph with the scanning results. + * Add mouse event listeners to the arcs of the donut graph that filter the + * detailed view to the corresponding tracker category. + * @param {Array} categories list of categories detected on the site + * @param {Object} options options for the graph */ generateGraph(categories, options) { - const { sitePolicy, pausedBlocking } = options; + const { + renderRedscale, + renderGreyscale, + totalCount, + isSmall + } = options; const graphData = []; - const trackerCounts = options.trackerCounts || {}; - const trackerCount = trackerCounts.allowed + trackerCounts.blocked || 0; - const size = options.isExpert ? 94 : 121; + const size = isSmall ? 94 : 120; const width = +size; const height = +size; const radius = Math.min(width, height) / 2; @@ -124,6 +147,14 @@ class DonutGraph extends React.Component { // Clear graph d3.select(this.node).selectAll('*').remove(); + // Clear tooltips + categories.forEach((cat) => { + const tooltip = document.getElementById(`${cat.id}_tooltip`); + if (tooltip) { + tooltip.classList.remove('show'); + } + }); + // Draw graph const chart = d3.select(this.node) .append('svg') @@ -149,16 +180,21 @@ class DonutGraph extends React.Component { g.append('path') .style('fill', (d, i) => { - if (pausedBlocking) { - const pausedExp = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; - return this.colors.paused(pausedExp); - } else if (sitePolicy === 1) { - const restrictedExp = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; - return this.colors.restricted(restrictedExp); + if (renderGreyscale) { + const greyTone = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; + return this.colors.greyscale(greyTone); + } else if (renderRedscale) { + const redTone = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; + return this.colors.redscale(redTone); } return this.colors.regular(d.data.id); }) - .attr('class', (d, i) => ((d.data.name) ? 'clickable' : 'disabled')) + .attr('class', (d, i) => { + if (d.data.name) { + return (isSmall) ? 'clickable' : 'not-clickable'; + } + return 'disabled'; + }) .on('mouseover', (d, i) => { const pX = arc.centroid(d)[0] + (width / 2); const pY = arc.centroid(d)[1] + (height / 2); @@ -176,8 +212,8 @@ class DonutGraph extends React.Component { } }) .on('click', (d, i) => { - if (d.data.name) { - this.props.actions.filterTrackers({ type: 'category', name: d.data.id }); + if (d.data.name && isSmall) { + this.props.clickDonut({ type: 'category', name: d.data.id }); } }) .transition() @@ -205,35 +241,44 @@ class DonutGraph extends React.Component { }) .ease(d3.easeLinear); } + /** - * Trigger action which results in navigating to full blocking view. - * @param {Object} event mouseclick on the total number of trackers - * displayed in the 'hole' of the donut + * Handle click event for graph text. Filters to show all categories. */ - clickTrackersAll(event) { - this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); + clickGraphText() { + this.props.clickDonut({ type: 'trackers', name: 'all' }); } + /** - * Render Donut Chart. - * @return {ReactComponent} ReactComponent instance + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the donut-graph portion of the Summary View */ render() { + const { isSmall, totalCount } = this.props; + const componentClasses = ClassNames('sub-component', 'donut-graph', { + small: isSmall, + big: !isSmall, + }); + return ( -
-
-
-
- {this.props.trackerCounts.allowed + this.props.trackerCounts.blocked || 0} -
-
Trackers
-
-
{ this.node = node; }} /> +
+
{this.props.categories.map(cat => ( {cat.name} ))}
+
{ this.node = node; }} /> +
+
{totalCount}
+
+ {(totalCount === 1) ? t('tracker_signular') : t('tracker_plural')} +
+ {t('tracker_found')} +
+
+
); } diff --git a/app/panel/components/BuildingBlocks/GhosteryFeatures.jsx b/app/panel/components/BuildingBlocks/GhosteryFeatures.jsx new file mode 100644 index 000000000..ea4600d9f --- /dev/null +++ b/app/panel/components/BuildingBlocks/GhosteryFeatures.jsx @@ -0,0 +1,170 @@ +/** + * Ghostery Features Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements buttons to render and toggle for Ghostery's features on/off. + * @memberof PanelClasses + */ +class GhosteryFeatures extends React.Component { + constructor(props) { + super(props); + + // Event Bindings + this.clickTrustButton = this.clickTrustButton.bind(this); + this.clickCustomButton = this.clickCustomButton.bind(this); + this.clickRestrictButton = this.clickRestrictButton.bind(this); + this.getTrustText = this.getTrustText.bind(this); + this.getRestrictText = this.getRestrictText.bind(this); + } + + /** + * Gets the text for the Trust Button under different conditions + * @return {String} The text for the Trust Button as a string + */ + getTrustText() { + if (this.props.isCondensed) { + return ''; + } else if (this.props.sitePolicy === 2) { + return t('summary_trust_site_active'); + } + return t('summary_trust_site'); + } + + /** + * Gets the text for the Restrict Button under different conditions + * @return {String} The text for the Restrict Button as a string + */ + getRestrictText() { + if (this.props.isCondensed) { + return ''; + } else if (this.props.sitePolicy === 1) { + return t('summary_restrict_site_active'); + } + return t('summary_restrict_site'); + } + + /** + * Handles the click event for the Trust Site button + */ + clickTrustButton() { + if (this.props.isInactive) { + return; + } + this.props.clickButton('trust'); + } + + /** + * Handles the click event for the Custom Settings button + */ + clickCustomButton() { + if (this.props.isInactive) { + return; + } + this.props.clickButton('custom'); + } + + /** + * Handles the click event for the Restrict Site button + */ + clickRestrictButton() { + if (this.props.isInactive) { + return; + } + this.props.clickButton('restrict'); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Ghostery Features portion of the Summary View + */ + render() { + const { + isAbPause, + isInactive, + isStacked, + isCondensed, + sitePolicy + } = this.props; + + const buttonGroupClassNames = ClassNames('button-group', { + inactive: isInactive, + stacked: isStacked, + }); + const trustClassNames = ClassNames('button', 'button-trust', 'g-tooltip', { + 'ab-pause': isAbPause, + 'button-left': isAbPause && !isStacked, + 'button-top': (isAbPause || isCondensed) && isStacked, + condensed: isCondensed, + active: sitePolicy === 2, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const customClassNames = ClassNames('button', 'button-custom', 'g-tooltip', { + 'ab-pause': isAbPause, + 'button-center': isAbPause && true, + condensed: isCondensed, + active: !sitePolicy, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const restrictClassNames = ClassNames('button', 'button-restrict', 'g-tooltip', { + 'ab-pause': isAbPause, + 'button-right': isAbPause && !isStacked, + 'button-bottom': isAbPause && isStacked, + 'button-center': !isAbPause && isCondensed && isStacked, + condensed: isCondensed, + active: sitePolicy === 1, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + + return ( +
+
+
+ + + {this.getTrustText()} + + + +
+ {isAbPause && ( +
+ + + {t('summary_custom_settings')} + + + +
+ )} +
+ + + {this.getRestrictText()} + + + +
+
+
+ ); + } +} + +export default GhosteryFeatures; diff --git a/app/panel/components/NotScanned.jsx b/app/panel/components/BuildingBlocks/NotScanned.jsx similarity index 51% rename from app/panel/components/NotScanned.jsx rename to app/panel/components/BuildingBlocks/NotScanned.jsx index cd634675f..ef010894e 100644 --- a/app/panel/components/NotScanned.jsx +++ b/app/panel/components/BuildingBlocks/NotScanned.jsx @@ -1,5 +1,5 @@ /** - * NotScanned Component + * Not Scanned Component * * Ghostery Browser Extension * https://www.ghostery.com/ @@ -12,24 +12,31 @@ */ import React, { Component } from 'react'; +import ClassNames from 'classnames'; + /** - * @class Implement Not Scanned component to be displayed in main panel - * when a site is not scannable or has not been scanned. + * @class Implements the Not Scanned component displayed in the Summary view + * when a site is not scannable or has not yet been scanned. * @memberof PanelClasses */ -const NotScanned = (props) => ( // eslint-disable-line arrow-parens -
-
-
+const NotScanned = (props) => { + const notScannedClassNames = ClassNames('sub-component', 'not-scanned', { + small: props.isSmall, + }); + + return ( // eslint-disable-line arrow-parens +
+
{t('summary_page_not_scanned') }
-
+
{ t('summary_description_not_scanned_1') } -

+
+
{ t('summary_description_not_scanned_2') }
-
-); + ); +}; export default NotScanned; diff --git a/app/panel/components/BuildingBlocks/PauseButton.jsx b/app/panel/components/BuildingBlocks/PauseButton.jsx new file mode 100644 index 000000000..2aec23a37 --- /dev/null +++ b/app/panel/components/BuildingBlocks/PauseButton.jsx @@ -0,0 +1,191 @@ +/** + * Pause Button Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements the Pause button on the Summary view. + * @memberof PanelClasses + */ +class PauseButton extends React.Component { + constructor(props) { + super(props); + this.state = { + showDropdown: false, + }; + + // Event Bindings + this.clickDropdownCaret = this.clickDropdownCaret.bind(this); + this.clickDropdownPause = this.clickDropdownPause.bind(this); + this.clickOutside = this.clickOutside.bind(this); + } + + /** + * Handles the click event for the Dropdown Caret + */ + clickDropdownCaret() { + if (!this.state.showDropdown) { + this.setState({ showDropdown: true }); + document.body.addEventListener('click', this.clickOutside); + } else { + this.setState({ showDropdown: false }); + document.body.removeEventListener('click', this.clickOutside); + } + } + + /** + * Handles clicking outside the dropdown menu when the menu is exposed + * @param {Object} event the click event + */ + clickOutside(event) { + const classes = event.target.className || ''; + if (classes && typeof classes === 'string' && (classes.indexOf('button-caret') !== -1 || classes.indexOf('dropdown-clickable') !== -1)) { + return; + } + document.body.removeEventListener('click', this.clickOutside); + this.setState({ showDropdown: false }); + } + + /** + * Handles the click event for timed pause in the dropdown list + */ + /** + * Handles the click event for timed pause in the dropdown list + * @param {int} time The time in minutes that Ghostery should be paused` + */ + clickDropdownPause(time) { + this.setState({ showDropdown: false }); + document.body.removeEventListener('click', this.clickOutside); + this.props.clickPause(time); + } + + /** + * Helper render function for the dropdown list + * @return {JSX} JSX for the dropdown list + */ + renderDropdown() { + const { isCondensed, isPausedTimeout } = this.props; + + function dropdownItemClassName(value) { + return ClassNames('dropdown-item', 'clickable', 'dropdown-clickable', { + selected: value === isPausedTimeout / 60000, + }); + } + + const dropdownStyles = { + width: `${this.pauseWidth + 26}px`, + }; + + return ( +
+ {this.props.dropdownItems.map(item => ( +
{ this.clickDropdownPause(item.val); }}> + + {!isCondensed ? item.name : item.name_condensed} + +
+ ))} +
+ ); + } + + /** + * Helper render function for Pause Button text + * @return {JSX} JSX for the Pause Button's text + */ + renderPauseButtonText() { + const { + isPaused, + isCondensed, + isAbPause, + } = this.props; + + if (isCondensed) { + return (); + } else if (isAbPause) { + return ( + + {isPaused ? t('summary_resume_ghostery_ab_pause') : t('summary_pause_ghostery_ab_pause')} + + ); + } + return ( + + {isPaused ? t('summary_resume_ghostery') : t('summary_pause_ghostery')} + + ); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Pause Button on the Summary View + */ + render() { + const pauseButtonClassNames = ClassNames('button', 'button-left', 'button-pause', { + 'g-tooltip': !this.props.isAbPause, + active: this.props.isPaused, + smaller: !this.props.isCentered, + smallest: this.props.isCentered && this.props.isCondensed, + 'no-border-radius': this.props.isCentered && this.props.isCondensed, + 'dropdown-open': this.state.showDropdown, + }); + const dropdownButtonClassNames = ClassNames('button', 'button-right', 'button-caret', { + active: this.state.showDropdown, + smaller: !this.props.isCentered, + smallest: this.props.isCentered && this.props.isCondensed, + 'no-border-radius': this.props.isCentered && this.props.isCondensed, + 'dropdown-open': this.state.showDropdown, + }); + const dropdownContainerClassNames = ClassNames('button-group', 'dropdown-container', { + centered: this.props.isCentered, + }); + const dropdownContainerStyles = { + left: `${(this.props.isCentered && this.props.isAbPause) ? this.pauseLeft : 0}px`, + }; + + return ( +
+
+
{ + this.pauseWidth = node && node.clientWidth; + this.pauseLeft = node && node.offsetLeft; + }} + > + {this.renderPauseButtonText()} + {!this.props.isAbPause && ( + + )} +
+
+ + {t('summary_show_menu')} + +
+
+
+ {this.state.showDropdown && this.renderDropdown()} +
+
+ ); + } +} + +export default PauseButton; diff --git a/app/panel/components/BuildingBlocks/index.js b/app/panel/components/BuildingBlocks/index.js new file mode 100644 index 000000000..6d3ab2d18 --- /dev/null +++ b/app/panel/components/BuildingBlocks/index.js @@ -0,0 +1,26 @@ +/** + * Building Blocks Sub Components + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import CliqzFeatures from './CliqzFeatures'; +import DonutGraph from './DonutGraph'; +import GhosteryFeatures from './GhosteryFeatures'; +import NotScanned from './NotScanned'; +import PauseButton from './PauseButton'; + +export { + CliqzFeatures, + DonutGraph, + GhosteryFeatures, + NotScanned, + PauseButton +}; diff --git a/app/panel/components/Detail.jsx b/app/panel/components/Detail.jsx index e0a602cdf..cb33319e6 100644 --- a/app/panel/components/Detail.jsx +++ b/app/panel/components/Detail.jsx @@ -13,6 +13,7 @@ import React, { Component } from 'react'; import { Route } from 'react-router-dom'; +import ClassNames from 'classnames'; import DetailMenu from './DetailMenu'; import Summary from '../containers/SummaryContainer'; import Blocking from '../containers/BlockingContainer'; @@ -59,13 +60,14 @@ class Detail extends React.Component { * @return {ReactComponent} ReactComponent instance */ render() { + const condensedToggleClassNames = ClassNames('condensed-toggle', { + condensed: this.props.is_expanded, + }); + return (
-
-
-
-
+
diff --git a/app/panel/components/Drawer.jsx b/app/panel/components/Drawer.jsx deleted file mode 100644 index f96870e9d..000000000 --- a/app/panel/components/Drawer.jsx +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Drawer Component - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -/* eslint react/no-string-refs: 0 */ - -import React, { Component } from 'react'; -import Tooltip from './Tooltip'; -/** - * @class Implement panel at the bottom of the main panel - * which slides up when user clicks on feature icon on the panel. - * It allows to toggle a feature and display its stats. - * @memberof PanelClasses - */ -class Drawer extends React.Component { - componentDidMount() { - document.body.addEventListener('click', this.clickOutsideHandler); - this.props.actions.getCliqzModuleData(); - } - /** - * Lifecycle event - */ - componentWillUnmount() { - document.body.removeEventListener('click', this.clickOutsideHandler); - } - /** - * Calculate total number of trackers being accosted by a specified feature - * @param {string} type name of the feature - * @return {number} total number of trackers - */ - getCount = (type) => { - let total = 0; - switch (type) { - case 'enable_anti_tracking': - for (const category in this.props.antiTracking) { - if (this.props.antiTracking.hasOwnProperty(category)) { - for (const app in this.props.antiTracking[category]) { - if (this.props.antiTracking[category][app] === 'unsafe') { - total++; - } - } - } - } - return total; - case 'enable_ad_block': - return this.props.adBlock && this.props.adBlock.totalCount || 0; - case 'enable_smart_block': - Object.keys(this.props.smartBlock.blocked).forEach((key) => { - total++; - }); - Object.keys(this.props.smartBlock.unblocked).forEach((key) => { - total++; - }); - return total; - default: - return 0; - } - } - - /** - * Map active feature name to a locator of the corresponding button. - * - * @return {string} style class name of the corresponding button - */ - getButtonClassName = () => { - switch (this.props.activeDrawerType) { - case 'enable_anti_tracking': - return 'anti-track-btn'; - case 'enable_ad_block': - return 'ad-block-btn'; - case 'enable_smart_block': - return 'smart-block-btn'; - default: - return false; - } - } - /** - * Handle clicks outside buttons. This action should close the drawer. - * @param {Object} evt mouseclick event - */ - clickOutsideHandler = (evt) => { - const activeClassName = this.getButtonClassName(); - if (!this.refs.drawer.contains(evt.target) - && (!evt.target.classList.contains('cliqz-control-btn') || - evt.target.classList.contains(activeClassName)) - && !evt.target.classList.contains('needs-reload-link')) { - evt.preventDefault(); - evt.stopPropagation(); - this.props.actions.closeDrawer(); - } - } - - isChecked = () => this.props[this.props.activeDrawerType] || false - - toggleSetting = () => { - this.props.actions.showNotification({ - updated: this.props.activeDrawerType, - reload: true, - }); - this.props.actions.toggleDrawerSetting(this.props.activeDrawerType, this.isChecked()); - } - /** - * Render drawer at the bottom of the main view. - * @return {ReactComponent} ReactComponent instance - */ - render() { - return ( -
-
- - { t(`drawer_title_${this.props.activeDrawerType}`) } - -
- -
-
-
-
-
-
-
- {this.getCount(this.props.activeDrawerType)} -
-
-
-
- { t(`drawer_label_${this.props.activeDrawerType}`) } -
- - -
-
-
{t(`drawer_desc_${this.props.activeDrawerType}`)}
-
-
-
- { t(`drawer_status_${this.props.activeDrawerType}`) } - {this.isChecked() ? t('drawer_on') : t('drawer_off')} -
- -
-
-
- ); - } -} - -export default Drawer; diff --git a/app/panel/components/Header.jsx b/app/panel/components/Header.jsx index 54eb1359f..d7e746b35 100644 --- a/app/panel/components/Header.jsx +++ b/app/panel/components/Header.jsx @@ -10,14 +10,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ + import React, { Component } from 'react'; import { Link } from 'react-router-dom'; import ClassNames from 'classnames'; import HeaderMenu from './HeaderMenu'; import { sendMessage } from '../utils/msg'; import { log } from '../../../src/utils/common'; + /** - * @class Implement header component which is common to all panel views + * @class Implements header component which is common to all panel views * @memberof PanelClasses */ class Header extends React.Component { @@ -27,26 +29,53 @@ class Header extends React.Component { dropdownOpen: false, }; - // event bindings + // Event Bindings + this.clickSimpleTab = this.clickSimpleTab.bind(this); + this.clickDetailedTab = this.clickDetailedTab.bind(this); + this.toggleExpert = this.toggleExpert.bind(this); this.toggleDropdown = this.toggleDropdown.bind(this); - this.getKebab = this.getKebab.bind(this); this.clickSignInVerify = this.clickSignInVerify.bind(this); } + /** - * Initialize kebab menu icon with refrence to DOM elementiption] - * @param {Object} ref React reference attribute of the menu icon + * Handles clicking on the Simple View tab */ - getKebab(ref) { - this.kebab = ref; + clickSimpleTab() { + if (this.props.is_expert) { + this.toggleExpert(); + } } + /** - * Toggle drop-down pane with menu items + * Handles clicking on the Detailed View tab + */ + clickDetailedTab() { + if (!this.props.is_expert) { + this.toggleExpert(); + } + } + + /** + * Toggle between Simple and Detailed Views. + */ + toggleExpert() { + this.props.actions.toggleExpert(); + if (this.props.is_expert) { + this.props.history.push('/'); + } else { + this.props.history.push('/detail'); + } + } + + /** + * Handles toggling the drop-down pane open/closed */ toggleDropdown() { this.setState({ dropdownOpen: !this.state.dropdownOpen }); } + /** - * Click the sign in / verify link in the header + * Handles clicking the sign-in / verify link */ clickSignInVerify() { if (!this.props.logged_in) { @@ -63,17 +92,40 @@ class Header extends React.Component { }); } } + /** - * Render header. - * @return {ReactComponent} ReactComponent instance - */ + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Header Component of the panel + */ render() { const { pathname } = this.props.location; + const showTabs = pathname === '/' || pathname.startsWith('/detail'); const headerLogoClasses = ClassNames('header-logo', { 'show-back-arrow': (pathname !== '/' && !pathname.startsWith('/detail')), }); + const tabSimpleClassNames = ClassNames('header-tab', { + active: !this.props.is_expert, + }); + const tabDetailedClassNames = ClassNames('header-tab', { + active: this.props.is_expert, + }); + return (
+ { showTabs && ( +
+
+ + {t('panel_header_simple_view')} + +
+
+ + {t('panel_header_detailed_view')} + +
+
+ )}
@@ -87,7 +139,11 @@ class Header extends React.Component { { !this.props.logged_in ? t('panel_header_sign_in') : (!this.props.is_validated ? t('panel_header_verify_account') : '') }
-
+
{ this.kebab = node; }} + />
{ this.state.dropdownOpen && - { t('panel_needs_reload') } - { t('panel_click_to_reload') } - - ) : (this.props.notificationFilter === 'slow') ? - - - { t('panel_tracker_slow_non_secure_end') } - - : (this.props.notificationFilter === 'compatibility') ? + + if (this.props.notificationText) { + return ( + + + {needsReload && ( +
{ t('alert_reload') }
+ )} +
+ ); + } else if (needsReload) { + return ( + + {t('panel_needs_reload')} + { t('alert_reload') } + + ); + } else if (this.props.notificationFilter === 'slow') { + return ( + + + { t('panel_tracker_slow_non_secure_end') } + + ); + } else if (this.props.notificationFilter === 'compatibility') { + return ( { t('panel_tracker_breaking_page_end') } - : ( - - ); + ); + } + + return ( + + ); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Panel + */ + render() { + // this prevents double rendering when waiting for getPanelData() to finish + if (!this.props.initialized) { + return null; + } + return (
@@ -143,20 +169,12 @@ class Panel extends React.Component { - {calloutText} + {this.renderNotification()}
{ this.props.children } - { this.props.drawerIsOpen && - - }
); } diff --git a/app/panel/components/SelectButton.jsx b/app/panel/components/SelectButton.jsx deleted file mode 100644 index dc9425869..000000000 --- a/app/panel/components/SelectButton.jsx +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Select Button Component - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -import React, { Component } from 'react'; -/** - * @class Implement generic split button component - * used currently in Pause Ghostery button on Summary view. - * @memberof PanelClasses - */ -class SelectButton extends React.Component { - constructor(props) { - super(props); - - this.state = { - isOpen: false, - }; - } - /** - * Handler for mouse clicks outside of the Select Button. - * @param {Object} e mouseclick event - */ - clickOutside = (e) => { - // skip if clicking on right button or select menu to avoid - // click event conflicts - if (this.rightButton.contains(e.target) || this.selectMenu.contains(e.target)) { - return; - } - this.setState({ isOpen: false }); - } - /** - * Toogle showing of the menu - * @return {Object} iOpen as its property - */ - toggleMenu = () => { - this.setState((prevState, props) => { - if (!prevState.isOpen) { - document.body.addEventListener('click', this.clickOutside); - } else { - document.body.removeEventListener('click', this.clickOutside); - } - return { isOpen: !prevState.isOpen }; - }); - } - /** - * Handle click on a menu item - */ - listClickHandler = (item) => { - this.toggleMenu(); - this.props.callback(item.val); - } - /** - * Handle click on the button itself - */ - buttonClickHandler = () => { - if (this.state.isOpen) { - this.toggleMenu(); - } - this.props.callback(); - } - /** - * Render Select Button component. - * @return {ReactComponent} ReactComponent instance - */ - render() { - const listItems = this.props.menuItems.map((item, idx) => ( -
  • { this.listClickHandler(item); }}> -
    -
    - {item.name} -
    -
  • - )); - - return ( -
    -
    - -
    - {this.state.isOpen ? -
    { this.selectMenu = ref; }}> -
      - {listItems} -
    -
    - : - null - } -
    - ); - } -} - -export default SelectButton; diff --git a/app/panel/components/Settings/GlobalBlocking.jsx b/app/panel/components/Settings/GlobalBlocking.jsx index 5ddc0285f..a28578e1e 100644 --- a/app/panel/components/Settings/GlobalBlocking.jsx +++ b/app/panel/components/Settings/GlobalBlocking.jsx @@ -12,6 +12,7 @@ */ import React, { Component } from 'react'; +import ClassNames from 'classnames'; import Categories from '../Blocking/Categories'; import BlockingHeader from '../Blocking/BlockingHeader'; /** @@ -40,12 +41,12 @@ class GlobalBlocking extends React.Component { const categories = this.props.settingsData ? this.props.settingsData.categories : []; const filterText = this.props.settingsData ? this.props.settingsData.filterText : t('settings_filter_all_label'); const expandAll = this.props.settingsData ? this.props.settingsData.expand_all_trackers : false; + const condensedToggleClassNames = ClassNames('condensed-toggle', { + condensed: settingsData.is_expanded, + }); return (
    -
    -
    -
    -
    +
    { + clickPauseButton(time) { + const ghosteryPaused = this.props.paused_blocking; + const text = ghosteryPaused ? t('alert_ghostery_resumed') : t('alert_ghostery_paused'); + sendMessage('ping', ghosteryPaused ? 'resume' : 'pause'); + if (typeof time === 'number') { + sendMessage('ping', 'pause_snooze'); + } + + this.props.actions.updateGhosteryPaused({ + ghosteryPaused: (typeof time === 'number' ? true : !ghosteryPaused), + time: time * 60000, + }); + this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); + this.props.actions.showNotification({ + updated: 'ghosteryPaused', + reload: true, + text, + }); + } + + /** + * Handles clicking on any part of the Donut graph + * @param {Object} data Properties of the click and resulting filter + */ + clickDonut(data) { if (!this.props.is_expert) { this.toggleExpert(); } + this.props.actions.filterTrackers(data); + } + + /** + * Handles clicking on the total trackers count on the condensed view + */ + clickTrackersCount() { + this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); } + /** - * Toggle between simple and detail (expert) views + * Toggle between Simple and Detailed Views. */ toggleExpert() { this.props.actions.toggleExpert(); @@ -143,94 +171,48 @@ class Summary extends React.Component { this.props.history.push('/detail'); } } - /** - * Disable controls for a site that cannot be scanned by - * Ghostery or has not yet been scanned. - * @param {Object} props nextProps - */ - updateSiteNotScanned(props) { - const { siteNotScanned, categories } = props; - const pageUrl = props.pageUrl || ''; - if (siteNotScanned || !categories || pageUrl.search('http') === -1) { - this.setState({ disableBlocking: true }); - } else { - this.setState({ disableBlocking: false }); - } - } /** - * Trigger actions which display notifications - * about slow or non-secure trackers. - * @param {Object} props nextProps - */ - updateTrackerCountAlert(props) { - const { alertCounts } = props; - - if (alertCounts.total) { - // Set notification on Panel View - if (alertCounts.compatibility) { - if (BROWSER_INFO.name === 'edge') { - let text = t('panel_tracker_breaking_page'); - text = text.replace('$1', alertCounts.compatibility); - text = text.replace('$2', (alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')); - props.actions.showNotification({ - classes: 'hideous', - filter: 'compatibility', - text, - }); - } else { - props.actions.showNotification({ - classes: 'hideous', - filter: 'compatibility', - text: t( - 'panel_tracker_breaking_page', - [alertCounts.compatibility, - (alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')], - ), - }); - } - } else if (BROWSER_INFO.name === 'edge') { - let text = t('panel_tracker_slow_non_secure'); - text = text.replace('$1', alertCounts.total - alertCounts.compatibility); - text = text.replace('$2', (alertCounts.total - alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')); - props.actions.showNotification({ - classes: 'hideous', - filter: 'slow', - text, - }); + * Handles clicking on Trackers Blocked. Triggers a filter action + */ + clickTrackersBlocked() { + const { sitePolicy, is_expert } = this.props; + if (is_expert) { + if (sitePolicy === 1) { + this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); } else { - props.actions.showNotification({ - classes: 'hideous', - filter: 'slow', - text: t( - 'panel_tracker_slow_non_secure', - [alertCounts.total - alertCounts.compatibility, - (alertCounts.total - alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')], - ), - }); + this.props.actions.filterTrackers({ type: 'trackers', name: 'blocked' }); } } } + + /** - * Implement handler for clicks on the 'trust' and 'restrict' buttons - * @param {Object} event click event - */ - clickSitePolicy(event) { - const { ghosteryPaused, sitePolicy } = this.props; - const targetClasses = event.currentTarget.classList || []; - const type = targetClasses.contains('controls-trust') ? 'whitelist' : 'blacklist'; - let updated_site_policy; + * Handles clicking on Ghostery Features: Trust Site, Restrict Site, Custom Settings + * @param {String} button The button that was clicked: trust, restrict, custom + */ + clickSitePolicy(button) { + const { paused_blocking, sitePolicy } = this.props; + let type; + let text; + let classes; - if (this.state.disableBlocking || ghosteryPaused) { + if (this.state.disableBlocking || paused_blocking) { return; } - if (type === 'whitelist') { + if (button === 'trust' || (button === 'custom' && sitePolicy === 2)) { sendMessage('ping', 'trust_site'); - updated_site_policy = (sitePolicy === 1 || !sitePolicy) ? 2 : false; - } else { + type = 'whitelist'; + text = (sitePolicy === 2) ? t('alert_site_trusted_off') : t('alert_site_trusted'); + classes = (sitePolicy === 2) ? 'warning' : 'success'; + } else if (button === 'restrict' || (button === 'custom' && sitePolicy === 1)) { sendMessage('ping', 'restrict_site'); - updated_site_policy = (sitePolicy === 2 || !sitePolicy) ? 1 : false; + type = 'blacklist'; + text = (sitePolicy === 1) ? t('alert_site_restricted_off') : t('alert_site_restricted'); + classes = (sitePolicy === 1) ? 'warning' : 'alert'; + } else { + return; } this.props.actions.updateSitePolicy({ @@ -242,52 +224,33 @@ class Summary extends React.Component { this.props.actions.showNotification({ updated: type, reload: true, + classes, + text, }); } /** - * Implement handler for clicks on the 'pause' button. Trigger appropriate actions. - */ - clickGhosteryPause(time) { - const ghosteryPaused = this.props.paused_blocking; - sendMessage('ping', ghosteryPaused ? 'resume' : 'pause'); - if (typeof time === 'number') { - sendMessage('ping', 'pause_snooze'); - } - - this.props.actions.updateGhosteryPaused({ - ghosteryPaused: (typeof time === 'number' ? true : !ghosteryPaused), - time: time * 60000, - }); - this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); + * Handles clicking on Cliqz Features: AntiTracking, AdBlocking, SmartBlocking + * @param {Object} options options including: + * feature: enable_anti_tracking, enable_ad_block, enable_smart_block + * status: whether the feature should be turned on or off + * text: the text for the notification. + */ + clickCliqzFeature(options) { + const { feature, status, text } = options; this.props.actions.showNotification({ - updated: 'ghosteryPaused', + updated: feature, reload: true, + text, }); - } - /** - * Implement handler for clicking on the blocked tracker count. Trigger a filter action. - */ - clickTrackersBlocked(event) { - const { sitePolicy } = this.props; - - if (sitePolicy === 1) { - this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); - } else { - this.props.actions.filterTrackers({ type: 'trackers', name: 'blocked' }); - } - } - /** - * Implement handler for clicking on the slow and/or non-secure tracker count. Trigger a filter action. - */ - clickTrackersAlerts(event) { - this.props.actions.filterTrackers({ type: 'trackers', name: 'warning' }); + this.props.actions.toggleCliqzFeature(feature, status); } /** - * Implement handler for clicking 'Map These Trackers' which opens Evidon page. - */ + * Handles clicking on Map These Trackers, which opens Evidon page. + */ clickMapTheseTrackers() { + if (this.state.disableBlocking) { return; } sendMessage('ping', 'live_scan'); sendMessage('openNewTab', { url: `https:\/\/www.evidon.com/solutions/trackermap/?url=${this.props.pageUrl}&utm_source=Ghostery&utm_medium=referral&utm_term=&utm_content=&utm_campaign=GhosteryMapTrackers`, @@ -296,175 +259,150 @@ class Summary extends React.Component { }); window.close(); // for firefox } + /** - * Render Summary view. - * @return {ReactComponent} ReactComponent instance - */ + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Summary View of the panel + */ render() { - const showBody = (!this.props.is_expanded || !this.props.is_expert); - const buttonDisabled = (this.state.disableBlocking || this.props.paused_blocking || this.props.sitePolicy !== false); - const alertText = this.props.paused_blocking ? t('enable_when_paused') : (this.props.sitePolicy === 1) ? t('enable_when_blacklisted') : (this.props.sitePolicy === 2) ? t('enable_when_whitelisted') : this.state.disableBlocking ? t('enable_when_not_scanned') : ''; - const getTooltipClass = () => ((!this.props.is_expert && 'top') - || ((this.props.is_expert && this.props.is_expanded) && 'right')); - - const summaryClassNames = [ - this.props.is_expanded && this.props.is_expert ? 'expanded' : '', - this.props.is_expert || this.props.is_android ? 'expert' : 'simple', - this.state.disableBlocking ? 'not-scanned' : '', - ]; - const loadInfoClasses = ClassNames('columns small-12 medium-4 text-left load-info g-tooltip', { + const { abPause } = this.state; + const { is_expert, is_expanded } = this.props; + const showCondensed = is_expert && is_expanded; + + const summaryClassNames = ClassNames('', { + expert: is_expert, + condensed: showCondensed, + 'ab-pause': abPause, + }); + + const blockedTrackersClassNames = ClassNames('blocked-trackers', { + clickable: is_expert, + }); + const pageLoadClassNames = ClassNames('page-load', { fast: +this.state.trackerLatencyTotal < 5, slow: +this.state.trackerLatencyTotal > 10, }); + const mapTheseTrackersClassNames = ClassNames('map-these-trackers', { + clickable: !this.state.disableBlocking, + 'not-clickable': this.state.disableBlocking + }); + return ( -
    - - {(!this.props.is_expanded || !this.props.is_expert) && -
    -
    - -
    +
    + {abPause && ( +
    + +
    + )} + + {this.state.disableBlocking && !showCondensed && ( + + )} + + {abPause && !this.state.disableBlocking && is_expert && !showCondensed && ( +
    + {this.props.pageHost}
    - } + )} -
    -
    + {!this.state.disableBlocking && !showCondensed && ( +
    + +
    + )} + {!this.state.disableBlocking && showCondensed && ( +
    {this.props.trackerCounts.allowed + this.props.trackerCounts.blocked || 0}
    -
    + )} -
    -
    + {!this.state.disableBlocking && (!abPause || !is_expert) && !showCondensed && ( +
    {this.props.pageHost}
    -
    + )} - { this.state.disableBlocking ? - - : -
    -
    - {t('summary_blocked')}:  - {this.props.trackerCounts.blocked} - { !showBody && - - } -
    -
    - { (this.props.alertCounts.total === 1) ? t('summary_alert') : t('summary_alerts') }:  - {this.props.alertCounts.total} - { !showBody && - - } -
    -
    - { t('page_load') }:  - {this.state.trackerLatencyTotal ? `${this.state.trackerLatencyTotal} ${t('settings_seconds')}` : '–'} - { !showBody && - - } + {!this.state.disableBlocking && ( +
    +
    + {t('trackers_blocked')} + + {this.props.trackerCounts.blocked || 0} +
    -
    - } - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    +
    + {t('page_load')} + + {this.state.trackerLatencyTotal ? `${this.state.trackerLatencyTotal} ${t('settings_seconds')}` : '-'} +
    - {(this.props.is_expert && !this.props.is_expanded) && -
    { t('summary_map_these_trackers') }
    - }
    + )} + + {this.state.disableBlocking && is_expert && showCondensed && ( +
    + )} + +
    + + + {!abPause && ( + + )} +
    + +
    +
    + + {is_expert && !showCondensed && ( +
    + { t('summary_map_these_trackers') } +
    + )} +
    ); } diff --git a/app/panel/components/Tooltip.jsx b/app/panel/components/Tooltip.jsx index 46cbb25ba..1cf8a204a 100644 --- a/app/panel/components/Tooltip.jsx +++ b/app/panel/components/Tooltip.jsx @@ -13,8 +13,9 @@ import React, { Component } from 'react'; import ReactDOM from 'react-dom'; + /** - * @class Implements tooltip component used throughout the views. + * @class Implements a Tooltip component that is used in many panel views. * @memberof PanelClasses */ class Tooltip extends React.Component { @@ -23,7 +24,13 @@ class Tooltip extends React.Component { this.state = { show: false, }; + + // Event Bindings + this.delayHover = this.delayHover.bind(this); + this.enter = this.enter.bind(this); + this.leave = this.leave.bind(this); } + /** * Lifecycle event. Set listeners. */ @@ -34,6 +41,7 @@ class Tooltip extends React.Component { this.parentNode.addEventListener('mouseleave', this.leave); this.parentNode.addEventListener('click', this.leave); } + /** * Lifecycle event. Remove listeners. */ @@ -42,33 +50,37 @@ class Tooltip extends React.Component { this.parentNode.removeEventListener('mouseleave', this.leave); this.parentNode.removeEventListener('click', this.leave); } + /** - * Set 1 sec delay for showing the tooltip. + * Implements mouseenter. Sets a 1 second delay for showing the tooltip. */ - delayHover = (e) => { + delayHover() { this.delay = setTimeout(() => { this.enter(); }, 1000); } + /** - * Set tooltip show state. + * Sets the state for Show. */ - enter = () => { + enter() { this.setState({ show: true }); if (this.props.disabled && this.props.showNotification && this.props.alertText) { this.props.showNotification({ text: this.props.alertText, classes: 'warning', filter: 'tooltip' }); } } + /** - * Implement handler for mouseleave event and hide the tooltip. + * Implements mouseleave. */ - leave = (e) => { + leave() { clearTimeout(this.delay); this.setState({ show: false }); } + /** - * Render Tooltip component. - * @return {ReactComponent} ReactComponent instance + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Tooltip component */ render() { return ( diff --git a/app/panel/components/__tests__/PauseButton.jsx b/app/panel/components/__tests__/PauseButton.jsx new file mode 100644 index 000000000..ca426efa0 --- /dev/null +++ b/app/panel/components/__tests__/PauseButton.jsx @@ -0,0 +1,160 @@ +/** + * Pause Button Test Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React from 'react'; +import renderer from 'react-test-renderer'; +import { shallow } from 'enzyme'; +import PauseButton from '../BuildingBlocks/PauseButton'; + + +// Fake the translation function to only return the translation key +global.t = function (str) { + return str; +}; + +// Fake the Tooltip implementation +jest.mock('../Tooltip'); + +// Snapshot Tests +it('renders unpaused state in simple view', () => { + const initialState = { + isAbPause: false, + isPaused: false, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: true, + isCondensed: false, + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); +}); + +it('renders paused state in detailed view', () => { + const initialState = { + isAbPause: false, + isPaused: true, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: false, + isCondensed: false, + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); +}); + +it('renders paused state in detailed condensed view', () => { + const initialState = { + isAbPause: true, + isPaused: true, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: false, + isCondensed: true, + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); +}); + +// Shallow Snapshot rendered with Enzyme +it('renders the state of the pause button correctly when Ghostery is not paused', () => { + const initialState = { + isPaused: false, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: false, + isCondensed: false, + }; + const component = shallow(); + expect(component.find('.button').length).toBe(2); + expect(component.find('.button.button-pause').length).toBe(1); + expect(component.find('.button.button-pause.active').length).toBe(0); + expect(component.find('.button.button-pause.smaller').length).toBe(1); + expect(component.find('.button.button-pause.smallest').length).toBe(0); + expect(component.find('.dropdown-container').length).toBe(1); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(0); + expect(component.find('.button-caret').length).toBe(1); + expect(component.find('.button-caret.active').length).toBe(0); + component.setState({ showDropdown: true }); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(3); + expect(component.find('.dropdown-container .dropdown-item.selected').length).toBe(0); + expect(component.find('.button-caret.active').length).toBe(1); +}); + +it('renders the state of the pause button correctly when Ghostery is paused', () => { + const initialState = { + isPaused: true, + isPausedTimeout: 1800000, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: true, + isCondensed: false, + }; + const component = shallow(); + expect(component.find('.button').length).toBe(2); + expect(component.find('.button.button-pause').length).toBe(1); + expect(component.find('.button.button-pause.active').length).toBe(1); + expect(component.find('.button.button-pause.smaller').length).toBe(0); + expect(component.find('.button.button-pause.smallest').length).toBe(0); + expect(component.find('.dropdown-container').length).toBe(1); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(0); + expect(component.find('.button-caret').length).toBe(1); + expect(component.find('.button-caret.active').length).toBe(0); + component.setState({ showDropdown: true }); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(3); + expect(component.find('.dropdown-container .dropdown-item.selected').length).toBe(1); + expect(component.find('.button-caret.active').length).toBe(1); +}); + +it('renders the pause button correctly it is centered and condensed', () => { + const initialState = { + isPaused: false, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: true, + isCondensed: true, + }; + const component = shallow(); + expect(component.find('.button').length).toBe(2); + expect(component.find('.button.button-pause').length).toBe(1); + expect(component.find('.button.button-pause.smaller').length).toBe(0); + expect(component.find('.button.button-pause.smallest').length).toBe(1); +}); diff --git a/app/panel/components/__tests__/__snapshots__/PauseButton.jsx.snap b/app/panel/components/__tests__/__snapshots__/PauseButton.jsx.snap new file mode 100644 index 000000000..5e51b945d --- /dev/null +++ b/app/panel/components/__tests__/__snapshots__/PauseButton.jsx.snap @@ -0,0 +1,116 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders paused state in detailed condensed view 1`] = ` +
    +
    +
    + +
    +
    + + summary_show_menu + +
    +
    +
    +
    +`; + +exports[`renders paused state in detailed view 1`] = ` +
    +
    +
    + + summary_resume_ghostery + +
    +
    + + summary_show_menu + +
    +
    +
    +
    +`; + +exports[`renders unpaused state in simple view 1`] = ` +
    +
    +
    + + summary_pause_ghostery + +
    +
    + + summary_show_menu + +
    +
    +
    +
    +`; diff --git a/app/panel/constants/constants.js b/app/panel/constants/constants.js index 4ac0dcd96..530eebfc7 100644 --- a/app/panel/constants/constants.js +++ b/app/panel/constants/constants.js @@ -14,6 +14,7 @@ // panel export const GET_PANEL_DATA = 'GET_PANEL_DATA'; export const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION'; +export const TOGGLE_CLIQZ_FEATURE = 'TOGGLE_CLIQZ_FEATURE'; export const CLOSE_NOTIFICATION = 'CLOSE_NOTIFICATION'; export const LOGIN_SUCCESS = 'LOGIN_SUCCESS'; export const LOGIN_FAILED = 'LOGIN_FAILED'; @@ -63,8 +64,3 @@ export const SETTINGS_TOGGLE_EXPAND_ALL = 'SETTINGS_TOGGLE_EXPAND_ALL'; export const SETTINGS_TOGGLE_EXPAND_CATEGORY = 'SETTINGS_TOGGLE_EXPAND_CATEGORY'; export const SETTINGS_UPDATE_SEARCH_VALUE = 'SETTINGS_UPDATE_SEARCH_VALUE'; export const SETTINGS_FILTER = 'SETTINGS_FILTER'; - -// drawer -export const GET_CLIQZ_MODULE_DATA = 'GET_CLIQZ_MODULE_DATA'; -export const CLOSE_DRAWER = 'CLOSE_DRAWER'; -export const OPEN_DRAWER = 'OPEN_DRAWER'; diff --git a/app/panel/containers/BlockingContainer.js b/app/panel/containers/BlockingContainer.js index 58c809157..0af7a577c 100644 --- a/app/panel/containers/BlockingContainer.js +++ b/app/panel/containers/BlockingContainer.js @@ -27,6 +27,7 @@ import { showNotification } from '../actions/PanelActions'; * in this case it won't be passed by React (see https://github.com/reactjs/react-redux/blob/master/docs/api.md). */ const mapStateToProps = (state, ownProps) => Object.assign({}, state.blocking, { + is_expanded: state.panel.is_expanded, language: state.panel.language, pageHost: state.summary.pageHost, paused_blocking: state.summary.paused_blocking, diff --git a/app/panel/containers/DrawerContainer.js b/app/panel/containers/DrawerContainer.js deleted file mode 100644 index 1efac8c12..000000000 --- a/app/panel/containers/DrawerContainer.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Drawer Container - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; -import Drawer from '../components/Drawer'; -import * as drawerActions from '../actions/DrawerActions'; -import { showNotification } from '../actions/PanelActions'; -/** - * Map redux store state properties to Drawer component own properties. - * @memberOf PanelContainers - * @param {Object} state entire Redux store's state - * @param {Object} ownProps props passed to the connected component - * @return {function} this function returns plain object, which will be merged into Drawer component props - * @todo We are not using ownProps, so we better not specify it explicitly, - * in this case it won't be passed by React (see https://github.com/reactjs/react-redux/blob/master/docs/api.md). - */ -const mapStateToProps = (state, ownProps) => Object.assign({}, state.drawer); -/** - * Bind Drawer component action creators using Redux's bindActionCreators - * @memberOf PanelContainers - * @param {function} dispatch redux store method which dispatches actions - * @param {Object} ownProps Drawer component own props - * @return {function} to be used as an argument in redux connect call - */ -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(Object.assign(drawerActions, { showNotification }), dispatch), -}); -/** - * Connects Drawer component to the Redux store. - * @memberOf PanelContainers - * @param {function} mapStateToProps maps redux store state properties to Drawer component own properties - * @param {function} mapDispatchToProps binds Drawer component action creators - * @return {Object} A higher-order React component class that passes state and action - * creators into Drawer component. Used by React framework. - */ -export default connect(mapStateToProps, mapDispatchToProps)(Drawer); diff --git a/app/panel/containers/SummaryContainer.js b/app/panel/containers/SummaryContainer.js index e48b29cff..d128280c6 100644 --- a/app/panel/containers/SummaryContainer.js +++ b/app/panel/containers/SummaryContainer.js @@ -16,7 +16,6 @@ import { bindActionCreators } from 'redux'; import Summary from '../components/Summary'; import * as summaryActions from '../actions/SummaryActions'; import * as panelActions from '../actions/PanelActions'; -import * as drawerActions from '../actions/DrawerActions'; /** * Map redux store state properties to Summary view component own properties. * @memberOf PanelContainers @@ -26,7 +25,7 @@ import * as drawerActions from '../actions/DrawerActions'; * @todo We are not using ownProps, so we better not specify it explicitly, * in this case it won't be passed by React (see https://github.com/reactjs/react-redux/blob/master/docs/api.md). */ -const mapStateToProps = (state, ownProps) => Object.assign({}, state.summary, state.panel, state.drawer, { +const mapStateToProps = (state, ownProps) => Object.assign({}, state.summary, state.panel, { is_expanded: state.panel.is_expanded, is_expert: state.panel.is_expert, tab_id: state.panel.tab_id, @@ -39,7 +38,7 @@ const mapStateToProps = (state, ownProps) => Object.assign({}, state.summary, st * @return {function} to be used as an argument in redux connect call */ const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(Object.assign(summaryActions, panelActions, drawerActions), dispatch), + actions: bindActionCreators(Object.assign(summaryActions, panelActions), dispatch), }); /** * Connects Summary view component to the Redux store. Pass updated match, location, and history props to the wrapped component. diff --git a/app/panel/reducers/blocking.js b/app/panel/reducers/blocking.js index ce691ed99..d1ec55feb 100644 --- a/app/panel/reducers/blocking.js +++ b/app/panel/reducers/blocking.js @@ -12,7 +12,8 @@ */ /* eslint no-use-before-define: 0 */ -import { GET_BLOCKING_DATA, +import { + GET_BLOCKING_DATA, FILTER_TRACKERS, UPDATE_BLOCK_ALL_TRACKERS, UPDATE_CATEGORIES, @@ -20,7 +21,8 @@ import { GET_BLOCKING_DATA, UPDATE_TRACKER_BLOCKED, UPDATE_TRACKER_TRUST_RESTRICT, TOGGLE_EXPAND_ALL, - TOGGLE_EXPAND_CATEGORY } from '../constants/constants'; + TOGGLE_EXPAND_CATEGORY +} from '../constants/constants'; import { updateTrackerBlocked, updateCategoryBlocked, updateBlockAllTrackers, toggleExpandAll, toggleExpandCategory } from '../utils/blocking'; import { removeFromObject, updateObject } from '../utils/utils'; import { sendMessage } from '../utils/msg'; diff --git a/app/panel/reducers/drawer.js b/app/panel/reducers/drawer.js deleted file mode 100644 index 88c371668..000000000 --- a/app/panel/reducers/drawer.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Drawer Reducer - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ -import { GET_CLIQZ_MODULE_DATA, - OPEN_DRAWER, - CLOSE_DRAWER } from '../constants/constants'; - -const initialState = { - activeDrawerType: null, - adBlock: {}, - antiTracking: {}, - drawerIsOpen: false, -}; -/** - * Default export for drawer component reducer. - * @memberOf PanelReactReducers - * - * @param {Object} state current state - * @param {Object} action action which provides data - * @return {Object} updated state clone - */ -export default (state = initialState, action) => { - switch (action.type) { - case GET_CLIQZ_MODULE_DATA: { - return Object.assign({}, state, { adBlock: action.data.adblock, antiTracking: action.data.antitracking }); - } - case OPEN_DRAWER: { - return Object.assign({}, state, { - drawerIsOpen: true, - activeDrawerType: action.data, - }); - } - case CLOSE_DRAWER: { - return Object.assign({}, state, { drawerIsOpen: false }); - } - default: return state; - } -}; diff --git a/app/panel/reducers/index.js b/app/panel/reducers/index.js index a32f293ac..1313ce387 100644 --- a/app/panel/reducers/index.js +++ b/app/panel/reducers/index.js @@ -22,7 +22,6 @@ import login from './login'; import createAccount from './createAccount'; import settings from './settings'; import forgotPassword from './forgotPassword'; -import drawer from './drawer'; /** * Export combined reducers object which provides * the full list of reducers. To be imported by React. @@ -40,7 +39,6 @@ const Reducers = combineReducers({ createAccount, settings, forgotPassword, - drawer, }); export default Reducers; diff --git a/app/panel/reducers/panel.js b/app/panel/reducers/panel.js index ca570fb44..bb1b980ba 100644 --- a/app/panel/reducers/panel.js +++ b/app/panel/reducers/panel.js @@ -13,7 +13,8 @@ /* eslint no-use-before-define: 0 */ -import { GET_PANEL_DATA, +import { + GET_PANEL_DATA, SHOW_NOTIFICATION, CLOSE_NOTIFICATION, LOGIN_SUCCESS, @@ -21,8 +22,9 @@ import { GET_PANEL_DATA, CREATE_ACCOUNT_SUCCESS, TOGGLE_EXPANDED, TOGGLE_EXPERT, - TOGGLE_DRAWER_SETTING, - UPDATE_NOTIFICATION_STATUS } from '../constants/constants'; + TOGGLE_CLIQZ_FEATURE, + UPDATE_NOTIFICATION_STATUS +} from '../constants/constants'; import { sendMessage } from '../utils/msg'; const initialState = { @@ -93,9 +95,9 @@ export default (state = initialState, action) => { decoded_user_token: action.data.decoded_user_token, }); } - case TOGGLE_DRAWER_SETTING: { + case TOGGLE_CLIQZ_FEATURE: { let pingName = ''; - switch (action.data.settingName) { + switch (action.data.featureName) { case 'enable_anti_tracking': pingName = action.data.isEnabled ? 'antitrack_off' : 'antitrack_on'; break; @@ -111,8 +113,8 @@ export default (state = initialState, action) => { if (pingName) { sendMessage('ping', pingName); } - sendMessage('setPanelData', { [action.data.settingName]: !action.data.isEnabled }); - return Object.assign({}, state, { [action.data.settingName]: !action.data.isEnabled }); + sendMessage('setPanelData', { [action.data.featureName]: !action.data.isEnabled }); + return Object.assign({}, state, { [action.data.featureName]: !action.data.isEnabled }); } case TOGGLE_EXPANDED: { sendMessage('setPanelData', { is_expanded: !state.is_expanded }); @@ -185,13 +187,13 @@ const _showNotification = (state, action) => { sendMessage('setPanelData', { needsReload: updated_needsReload }); // if we have changes and the user wants to see banners, then show - if (Object.keys(updated_needsReload.changes).length > 0 && reloadBannerStatus.show && nowTime > reloadBannerStatus.show_time) { + if ((msg.text || Object.keys(updated_needsReload.changes).length > 0) && reloadBannerStatus.show && nowTime > reloadBannerStatus.show_time) { updated_notificationShown = true; } else { updated_notificationShown = false; } - updated_notificationClasses = 'warning'; + updated_notificationClasses = msg.classes || 'warning'; } else { // Notification banners (success/warnings) if (trackersBannerStatus.show && nowTime > trackersBannerStatus.show_time) { diff --git a/app/panel/reducers/settings.js b/app/panel/reducers/settings.js index 8f8021188..6549dcb2d 100644 --- a/app/panel/reducers/settings.js +++ b/app/panel/reducers/settings.js @@ -14,7 +14,8 @@ /* eslint no-use-before-define: 0 */ import moment from 'moment/min/moment-with-locales.min'; -import { GET_SETTINGS_DATA, +import { + GET_SETTINGS_DATA, IMPORT_SETTINGS_DIALOG, IMPORT_SETTINGS_NATIVE, IMPORT_SETTINGS_FAILED, @@ -28,7 +29,8 @@ import { GET_SETTINGS_DATA, SETTINGS_TOGGLE_EXPAND_ALL, SETTINGS_TOGGLE_EXPAND_CATEGORY, SETTINGS_UPDATE_SEARCH_VALUE, - SETTINGS_FILTER } from '../constants/constants'; + SETTINGS_FILTER +} from '../constants/constants'; import { updateTrackerBlocked, updateCategoryBlocked, updateBlockAllTrackers, toggleExpandAll, toggleExpandCategory } from '../utils/blocking'; import { removeFromObject, updateObject } from '../utils/utils'; import { sendMessage } from '../utils/msg'; diff --git a/app/panel/reducers/summary.js b/app/panel/reducers/summary.js index 0b6bc92cc..91779e6d5 100644 --- a/app/panel/reducers/summary.js +++ b/app/panel/reducers/summary.js @@ -13,10 +13,12 @@ /* eslint no-use-before-define: 0 */ -import { GET_SUMMARY_DATA, +import { + GET_SUMMARY_DATA, UPDATE_GHOSTERY_PAUSED, UPDATE_SITE_POLICY, - UPDATE_TRACKER_COUNTS } from '../constants/constants'; + UPDATE_TRACKER_COUNTS +} from '../constants/constants'; import { addToArray, removeFromArray } from '../utils/utils'; import { sendMessage } from '../utils/msg'; diff --git a/app/scss/panel.scss b/app/scss/panel.scss index fe6153ac0..47a14536a 100644 --- a/app/scss/panel.scss +++ b/app/scss/panel.scss @@ -8,7 +8,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -50,6 +50,9 @@ html body { @import './partials/_help'; @import './partials/_account'; @import './partials/_drawer'; -@import './partials/_select_button'; +@import './partials/_pause_button'; +@import './partials/_donut_graph'; +@import './partials/_ghostery_features'; +@import './partials/_cliqz_features'; @import './partials/_tooltip'; @import './partials/_not_scanned'; diff --git a/app/scss/partials/_blocking.scss b/app/scss/partials/_blocking.scss index f478c413c..085e37ab4 100644 --- a/app/scss/partials/_blocking.scss +++ b/app/scss/partials/_blocking.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -294,58 +294,6 @@ } } -.expertTab { - @extend %pointer; - position: absolute; - top: 200px; - left: -26px; - width: 25px; - height: 50px; - .dash { - height: 20px; - width: 3px; - border-radius: 2px; - background-color: #D1D9DC; - margin-right: 7px; - } - .reverse-dash { - @extend .dash; - margin-right: -12px !important; - } - .moon { - display: none; - position: inherit; - } - .reverse-moon { - @extend .moon; - right: -26px !important; - } - &:hover { - .dash .reverse-dash { - display: none; - } - .moon { - display: block; - &:after { - content: url('../../app/images/panel/left-left-moon.svg'); - } - } - .reverse-moon { - display: block; - &:after { - content: url('../../app/images/panel/right-right-moon.svg') !important; - } - } - } - &.expanded { - &:hover { - .moon:after { - content: url('../../app/images/panel/left-right-moon.svg'); - } - } - } -} - @import './partials/_blocking_category'; @import './partials/_blocking_tracker'; @import './partials/_blocking_header'; diff --git a/app/scss/partials/_cliqz_features.scss b/app/scss/partials/_cliqz_features.scss new file mode 100644 index 000000000..9b214379d --- /dev/null +++ b/app/scss/partials/_cliqz_features.scss @@ -0,0 +1,138 @@ +/** + * Cliqz Features Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +@function buildIconAntiTracking($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconAdBlocking($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconSmartBlocking($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconDash($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +.sub-component.cliqz-features { + .cliqz-feature { + display: inline-block; + width: 150px; + margin: 0 10px; + } + &.smaller .cliqz-feature { + width: 55px; + margin: 0 10px; + } + &.smaller.condensed .cliqz-feature { + width: 40px; + margin: 0 0 5px; + .count { + line-height: 14px; + } + .icon { + width: 40px; + height: 40px; + background-size: 30px 30px; + } + } + + .count { + color: rgba(#c8c7c2, 0); + text-align: center; + font-size: 14px; + line-height: 28px; + font-weight: 600; + transition: color 0.25s ease-out; + + background-repeat: no-repeat; + background-position: center center; + background-size: 15px 10px; + transition: background-image 0.25s ease-out; + background-image: buildIconDash(#c8c7c2); + } + .active .count { + color: #1dafed; + background: none; + } + &.inactive .count { + color: rgba(#dedede, 0); + background-image: buildIconDash(#dedede); + } + &.inactive .active .count { + color: #a4d4f2; + background: none; + } + + .icon { + margin: 0 auto; + height: 50px; + width: 50px; + background-repeat: no-repeat; + background-position: center center; + background-size: 50px 50px; + transition: background-image 0.25s ease-out; + } + .anti-tracking .icon { background-image: buildIconAntiTracking(#c8c7c2); } + .active.anti-tracking .icon { background-image: buildIconAntiTracking(#1dafed); } + &.inactive .anti-tracking .icon { background-image: buildIconAntiTracking(#dedede); } + &.inactive .active.anti-tracking .icon { background-image: buildIconAntiTracking(#a4d4f2); } + + .ad-blocking .icon { background-image: buildIconAdBlocking(#c8c7c2); } + .active.ad-blocking .icon { background-image: buildIconAdBlocking(#1dafed); } + &.inactive .ad-blocking .icon { background-image: buildIconAdBlocking(#dedede); } + &.inactive .active.ad-blocking .icon { background-image: buildIconAdBlocking(#a4d4f2); } + + .smart-blocking .icon { background-image: buildIconSmartBlocking(#c8c7c2); } + .active.smart-blocking .icon { background-image: buildIconSmartBlocking(#1dafed); } + &.inactive .smart-blocking .icon { background-image: buildIconSmartBlocking(#dedede); } + &.inactive .active.smart-blocking .icon { background-image: buildIconSmartBlocking(#a4d4f2); } + + .feature-name { + color: #c8c7c2; + text-align: center; + font-size: 11px; + line-height: 26px; + font-weight: 600; + transition: color 0.25s ease-out; + + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; + } + .active .feature-name { color: #1dafed; } + &.inactive .feature-name { color: #dedede; } + &.inactive .active .feature-name { color: #a4d4f2; } + &.smaller .feature-name { display: none; } + + .cliqz-feature.clickable:hover { + .count { background-image: buildIconDash(#a4a4a4); } + &.anti-tracking .icon { background-image: buildIconAntiTracking(#a4a4a4); } + &.ad-blocking .icon { background-image: buildIconAdBlocking(#a4a4a4); } + &.smart-blocking .icon { background-image: buildIconSmartBlocking(#a4a4a4); } + .feature-name { color: #a4a4a4; } + } + .cliqz-feature.active.clickable:hover { + .count { + color: #0093bd; + background: none; + } + &.anti-tracking .icon { background-image: buildIconAntiTracking(#0093bd); } + &.ad-blocking .icon { background-image: buildIconAdBlocking(#0093bd); } + &.smart-blocking .icon { background-image: buildIconSmartBlocking(#0093bd); } + .feature-name { color: #0093bd; } + } +} diff --git a/app/scss/partials/_detail.scss b/app/scss/partials/_detail.scss index 995d08eb4..721799448 100644 --- a/app/scss/partials/_detail.scss +++ b/app/scss/partials/_detail.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -63,13 +63,34 @@ } #content-detail { - @include expanding-panel(70px); + @include expanding-panel(66px); } #settings-global-blocking { @include expanding-panel(2px); } +.condensed-toggle { + position: absolute; + height: 50px; + width: 25px; + top: 198px; + z-index: 2; + cursor: pointer; + background-position: 7px center; + background-size: 3px 20px; + background-repeat: no-repeat; + background-image: url('../../app/images/panel/line-empty-moon.svg'); + &:hover { + background-size: 25px 50px; + background-position: center; + background-image: url('../../app/images/panel/right-left-moon.svg'); + } + &.condensed:hover { + background-image: url('../../app/images/panel/right-right-moon.svg'); + } +} + .coming-soon { background-color: #fff; .detail-header { diff --git a/app/scss/partials/_donut_graph.scss b/app/scss/partials/_donut_graph.scss new file mode 100644 index 000000000..af2d8d9fa --- /dev/null +++ b/app/scss/partials/_donut_graph.scss @@ -0,0 +1,66 @@ +/** + * Donut Graph Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +.sub-component.donut-graph { + .show-on-big { display: none; } + &.big .show-on-big { display: block; } + + .graph-text { + text-transform: capitalize; + text-align: center; + font-size: 12px; + line-height: 16px; + font-weight: 500; + color: #4a4a4a; + } + &.big .graph-text { + margin-top: -125px; + padding-top: 22px; + height: 120px; + } + &.small .graph-text { + margin-top: -99px; + padding-top: 18px; + height: 94px; + } + .graph-text-count { + font-size: 30px; + line-height: 41px; + font-weight: 700; + } + &.small .graph-text-count { + font-size: 28px; + line-height: 35px; + } + + .tooltip-container { + position: relative; + height: 0; + width: 0; + .tooltip { + white-space: nowrap; + pointer-events: none; + opacity: 0; + visibility: hidden; + transition: opacity .2s ease-in; + } + .tooltip.show { + visibility: visible; + opacity: 1; + } + .tooltip::before { + left: 50%; + margin-left: -8px; + } + } +} diff --git a/app/scss/partials/_ghostery_features.scss b/app/scss/partials/_ghostery_features.scss new file mode 100644 index 000000000..eb4e3f75f --- /dev/null +++ b/app/scss/partials/_ghostery_features.scss @@ -0,0 +1,168 @@ +/** + * Ghostery Features Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +@function buildIconTrust($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconRestrict($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +.sub-component.ghostery-features { + .button { + width: 150px; + height: 45px; + font-size: 11px; + line-height: 1.5; + color: #4a4a4a; + border-color: #cccccc; + background-color: #ffffff; + margin-bottom: 0; + box-shadow: inset 0 0 0 0 rgba($white, 0); + + transition: background-image 0.25s ease-out, + background-color 0.25s ease-out, + border-color 0.25s ease-out, + box-shadow 0.25 ease-out, + color 0.25s ease-out; + &:hover { + background-color: #efefef; + } + } + .button.active.button-trust { + color: #ffffff; + border-color: #85b329; + background-color: #9ecc42; + box-shadow: inset 0px 1px 7px 2px #85b329; + &:hover { + background-color: #85b329; + } + } + .button.active.button-restrict { + color: #ffffff; + border-color: #ce273c; + background-color: #e74055; + box-shadow: inset 0px 1px 7px 2px #ce273c; + &:hover { + background-color: #ce273c; + } + } + .button.active.ab-pause { + color: #ffffff; + border-color: #2092bf; + background-color: #1dafed; + box-shadow: inset 0px 1px 7px 2px #2092bf; + &:hover { + background-color: #0093bd; + } + } + + .full-height { height: 100%; } + .button-trust .button-text, + .button-restrict .button-text { + padding: 0 10px 0 30px; + background-repeat: no-repeat; + background-position: 0 center; + background-size: 14px 14px; + } + .button-trust .button-text { + background-image: buildIconTrust(#4a4a4a); + } + .button-trust.active .button-text { + background-image: buildIconTrust(#ffffff); + } + .button-restrict .button-text { + background-image: buildIconRestrict(#4a4a4a); + } + .button-restrict.active .button-text { + background-image: buildIconRestrict(#ffffff); + } + + .button-group.inactive { + .button { + color: #a4a4a4; + border-color: #e5e5e5; + background-color: #ffffff; + box-shadow: inset 0 0 0 0 rgba($white, 0); + } + .button.active.button-trust { + color: #ffffff; + border-color: #b8e65c; + background-color: #b8e65c; + } + .button.active.button-restrict { + color: #ffffff; + border-color: #ff8da2; + background-color: #ff8da2; + } + .button.active.ab-pause { + color: #ffffff; + border-color: #a4d4f2; + background-color: #a4d4f2; + } + .button-trust .button-text { + background-image: buildIconTrust(#a4a4a4); + } + .button-trust.active .button-text { + background-image: buildIconTrust(#ffffff); + } + .button-restrict .button-text { + background-image: buildIconRestrict(#a4a4a4); + } + .button-restrict.active .button-text { + background-image: buildIconRestrict(#ffffff); + } + } + + .button-group.stacked .button { + height: 35px; + margin-bottom: 0; + } + .button-group.stacked .button.condensed { + width: 66px; + height: 41px; + .button-text { + padding: 10px; + font-size: 9px; + background-position: center center; + } + } + + .button-top { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; + } + .button-left { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + .button-center { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + .button-bottom { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top: 0; + } + .button-right { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: 0; + } +} diff --git a/app/scss/partials/_header.scss b/app/scss/partials/_header.scss index 8af95ceb5..c40978638 100644 --- a/app/scss/partials/_header.scss +++ b/app/scss/partials/_header.scss @@ -5,13 +5,37 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ #ghostery-header { + .header-tab-group { + position: absolute; + height: 36px; + width: 280px; + left: calc(50% - 140px); + } + .header-tab { + cursor: pointer; + height: 20px; + width: 140px; + text-align: center; + color: $white; + background-color: #2092bf; + } + .header-tab.active { + color: #4a4a4a; + background-color: $white; + } + .header-tab-text { + text-align: center; + width: 100%; + font-size: 10px; + } + .top-bar { background-color: $ghosty-blue; color: $white; diff --git a/app/scss/partials/_not_scanned.scss b/app/scss/partials/_not_scanned.scss index c478414c1..425dcd5cf 100644 --- a/app/scss/partials/_not_scanned.scss +++ b/app/scss/partials/_not_scanned.scss @@ -1,73 +1,42 @@ /** - * Panel Not Scanned Sass + * Not Scanned Sass * * Ghostery Browser Extension * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -#panel { - .not-scanned-wrapper { - .title { - font-size: 18px; - color: #4a90e2; - } - .text { - font-size: 12px; - color: #4a4a4a; - max-width: 270px; - margin: 0 auto; - } +.sub-component.not-scanned { + text-align: center; + margin: 0 auto; + overflow: hidden; + + height: 247px; + max-width: 300px; + padding-top: 57px; + &.small { + height: 200px; + max-width: 160px; + padding-top: 30px; + } + + .not-scanned-header { + font-size: 18px; + color: #1dafed; + margin-bottom: 10px; } - #content-summary { - .not-scanned-wrapper { - .title { - padding-top: 90px; - padding-bottom: 45px; - } - .text { - margin: 0 auto; - } - } - &.expert { - .not-scanned-wrapper { - .title { - padding-top: 36px; - padding-bottom: 37px; - } - .text { - padding: 0 40px; - } - } - } - &.expanded.expert { - .not-scanned-wrapper { - display: none; - } - } + .not-scanned-text { + color: #4a4a4a; + font-size: 14px; + margin-bottom: 10px; } - #content-detail { - #content-blocking { - .not-scanned-wrapper { - .title { - padding-top: 92px; - } - .text { - padding-top: 44px; - } - } - } - &:not(.expanded) { - #content-blocking { - .not-scanned-wrapper { - display: none; - } - } - } + &.small .not-scanned-text { + font-size: 12px; + margin-bottom: 20px; } } diff --git a/app/scss/partials/_pause_button.scss b/app/scss/partials/_pause_button.scss new file mode 100644 index 000000000..4d132d7fd --- /dev/null +++ b/app/scss/partials/_pause_button.scss @@ -0,0 +1,217 @@ +/** + * Pause Button Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +@function buildIconPause($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconPlay($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconCaretDown($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +@function buildIconCircle($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,'); +} + +.sub-component.pause-button { + .button { + color: #4a4a4a; + border-color: #cccccc; + background-color: #ffffff; + margin-bottom: 0; + + transition: background-image 0.25s ease-out, + background-color 0.25s ease-out, + border-color 0.25s ease-out, + color 0.25s ease-out; + } + .button.active { + color: #ffffff; + border-color: #1dafed; + background-color: #1dafed; + box-shadow: inset 0px 1px 7px 2px rgba(#1dafed, 0); + & + .button.active { + border-left-color: #efefea; + } + } + .button:hover { background-color: #efefef; } + .button.active:hover { + border-color: #0093bd; + background-color: #0093bd; + } + + .button-pause { + min-width: 125px; + max-width: 125px; + font-size: 11px; + line-height: 17px; + .pause-button-text { + overflow-x: hidden; + text-overflow: clip; + } + .pause-button-icon { + padding: 0 10px 0 30px; + background-repeat: no-repeat; + background-position: 0 center; + background-size: 14px 16px; + background-image: buildIconPause(#4a4a4a); + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; + } + &.active .pause-button-icon { + background-image: buildIconPlay(#ffffff); + } + &.smaller { + min-width: 100px; + max-width: 150px; + } + &.smallest { + min-width: 41px; + max-width: 41px; + padding-left: 17px; + } + } + .button-caret { + width: 25px; + padding-top: 21px; + padding-right: 0; + background-repeat: no-repeat; + background-position: center center; + background-size: 9px 5px; + background-image: buildIconCaretDown(#4a4a4a); + &.active { + background-image: buildIconCaretDown(#ffffff); + } + } + + .button-left { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + &.dropdown-open { + border-bottom-left-radius: 0; + } + } + .button-right { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + &.dropdown-open { + border-bottom-right-radius: 0; + } + } + + .dropdown-container { + position: relative; + width: 0; + height: 0; + top: 0; + + .dropdown { + text-align: center; + background-color: #ffffff; + border: 1px solid #cccccc; + border-top: 0; + margin: 0 auto; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + } + .dropdown-item { + padding: 12px 0; + background-color: #ffffff; + + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; + } + .dropdown-item:hover { + background-color: #ebebeb; + } + .dropdown-item.selected { + background-color: #ebebeb; + .pause-button-icon { + padding: 0 0 0 10px; + background-repeat: no-repeat; + background-position: 0 center; + background-size: 4px 4px; + background-image: buildIconCircle(#4a4a4a); + } + } + } + + .no-border-radius { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + } +} + +.ghostery-features-container .sub-component.pause-button { + .button-pause { + height: 35px; + line-height: 21px; + top: 0; + } + .button-caret { + height: 35px; + } + .button-pause.smaller { + top: 1px; + height: 45px; + min-width: 125px; + max-width: 125px; + line-height: 31px; + } + .button-caret.smaller { + height: 45px; + } + .button.active { + border-color: #0093bd; + background-color: #1dafed; + box-shadow: inset 0px 1px 7px 2px #0093bd; + &:hover { + background-color: #0093bd; + } + } + .button-pause.smallest { + top: 0; + padding-left: 15px; + height: 41px; + line-height: 27px; + border-top: none; + border-bottom-left-radius: 3px; + &.dropdown-open { + border-bottom-left-radius: 0; + } + } + .button-caret.smallest { + height: 41px; + border-top: none; + border-bottom-right-radius: 3px; + &.dropdown-open { + border-bottom-right-radius: 0; + } + } + .dropdown { + position: absolute; + z-index: 1; + } + .dropdown-container.centered .dropdown-item { + padding: 9px 0; + } +} diff --git a/app/scss/partials/_summary.scss b/app/scss/partials/_summary.scss index 637fdeb93..f933ce3b6 100644 --- a/app/scss/partials/_summary.scss +++ b/app/scss/partials/_summary.scss @@ -5,389 +5,185 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -@mixin controls-btns { +#content-summary { position: absolute; - background-repeat: no-repeat; - left: 13px; -} - -@function buildIconTrust($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EOval%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Card-view---list-expanded-MAX---HOVER%22%20transform%3D%22translate%28-687.000000%2C%20-498.000000%29%22%20stroke-width%3D%222%22%20stroke%3D%22%23#{$stroke-color}%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%20id%3D%22Oval%22%20cx%3D%22693.875%22%20cy%3D%22504.875%22%20r%3D%225.875%22%3E%3C/circle%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} - -@function buildIconRestrict($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3Eicon-%20restrict%20site%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Card-view---list-expanded-MAX---HOVER%22%20transform%3D%22translate%28-687.000000%2C%20-536.000000%29%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%222%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22icon--restrict-site%22%20transform%3D%22translate%28688.000000%2C%20537.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M1.95833333%2C1.95833333%20L9.79166667%2C9.79166667%22%20id%3D%22Line%22%20stroke-linecap%3D%22square%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%20id%3D%22Oval%22%20cx%3D%225.75260417%22%20cy%3D%225.75260417%22%20r%3D%225.75260417%22%3E%3C/circle%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} - -@function buildIconPause($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2210px%22%20height%3D%2213px%22%20viewBox%3D%220%200%2010%2013%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EShape%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Card-view---list-expanded-MAX---HOVER%22%20transform%3D%22translate%28-684.000000%2C%20-575.000000%29%22%20fill%3D%22%23#{$stroke-color}%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Group-2%22%20transform%3D%22translate%28684.000000%2C%20575.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22pause%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C12.173913%20L2.60869565%2C12.173913%20L2.60869565%2C0%20L0%2C0%20L0%2C12.173913%20L0%2C12.173913%20Z%20M6.95652174%2C0%20L6.95652174%2C12.173913%20L9.56521739%2C12.173913%20L9.56521739%2C0%20L6.95652174%2C0%20L6.95652174%2C0%20Z%22%20id%3D%22Shape%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + height: 479px; + width: 100%; + &.expert { width: 235px; } + &.expert.condensed { + width: 66px; + background-color: #f9f6f6; + } -@function buildIconResume($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%20100%20100%22%20enable-background%3D%22new%200%200%20100%20100%22%20xml%3Aspace%3D%22preserve%22%20fill%3D%22%23fff%22%3E%3Cpath%20d%3D%22M72%2C48.3l-42-24c-1.313-0.875-3%2C0.295-3%2C1.7v48c0%2C1.533%2C1.767%2C2.523%2C3%2C1.7l42-24C73.589%2C50.639%2C73.047%2C48.824%2C72%2C48.3z%20%20%20M31%2C70.6V29.4L67%2C50L31%2C70.6z%22%3E%3C/path%3E%3C/svg%3E%0A'); + .clickable { cursor: pointer; } + .not-clickable { cursor: not-allowed; } - // url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20100%20100%22%20fill%3D%22%23#{$stroke-color}%22%3E%3Cpath%20d%3D%22M72%2048.3l-42-24c-1.313-.875-3%20.295-3%201.7v48c0%201.533%201.767%202.523%203%201.7l42-24c1.59-1.06%201.047-2.876%200-3.4zM31%2070.6V29.4L67%2050%2031%2070.6z%22/%3E%3C/svg%3E'); -} + &.ab-pause .pause-button-container { + padding: 10px 0 0 10px; + text-align: left; + } + &.expert.ab-pause .pause-button-container { + padding: 10px 0 0 0; + text-align: center; + } + &.expert.condensed.ab-pause .pause-button-container { + padding: 0; + text-align: left; + } -// cliqz drawer buttons -@function buildAntiTrackIcon($stroke-color){ - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2222px%22%20height%3D%2222px%22%20viewBox%3D%220%200%2022%2022%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EPage%201%20Copy%202%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---hover---adblocing%22%20transform%3D%22translate%28-1082.000000%2C%20-690.000000%29%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%222%22%20fill%3D%22none%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M1093.2127%2C691.032068%20C1093.08497%2C690.989311%201092.91503%2C690.989311%201092.7873%2C691.032068%20L1083.63836%2C693.457515%20C1083.25545%2C693.542485%201083%2C693.882908%201083%2C694.265816%20C1083.04276%2C700.776614%201086.53196%2C706.81899%201092.53185%2C710.861584%20C1092.65958%2C710.946554%201092.82979%2C710.989311%201093%2C710.989311%20C1093.17021%2C710.989311%201093.34042%2C710.946554%201093.46815%2C710.861584%20C1099.46804%2C706.81899%201102.95724%2C700.776614%201103%2C694.265816%20C1103%2C693.882908%201102.74455%2C693.542485%201102.36164%2C693.457515%20L1093.2127%2C691.032068%20Z%22%20id%3D%22Page-1-Copy-2%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + .page-host { + color: #4a4a4a; + text-align: center; + font-size: 11px; + font-weight: 600; + margin-bottom: 36px; + } + &.ab-pause .page-host { + margin-bottom: 30px; + } + &.expert .page-host { + margin-top: 20px; + margin-bottom: 24px; + } + &.expert.ab-pause .page-host { + margin-top: 8px; + margin-bottom: 8px; + } -@function buildAdBlockIcon($stroke-color){ - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%220%200%2024%2024%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EFill%201%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---hover---adblocing%22%20transform%3D%22translate%28-1166.000000%2C%20-735.000000%29%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%220.5%22%20fill%3D%22%23#{$stroke-color}%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M1171.71317%2C754.301569%20C1172.4562%2C755.045891%201173.19537%2C755.790213%201173.94227%2C756.528096%20C1173.99635%2C756.582182%201174.10195%2C756.610513%201174.18565%2C756.610513%20C1176.73025%2C756.614376%201179.27356%2C756.615664%201181.81816%2C756.609225%20C1181.91088%2C756.609225%201182.02806%2C756.56029%201182.09374%2C756.495903%20C1183.89659%2C754.700773%201185.69429%2C752.901779%201187.4907%2C751.098923%20C1187.55638%2C751.03196%201187.60918%2C750.91735%201187.60918%2C750.824631%20C1187.6169%2C748.272302%201187.61561%2C745.72126%201187.61304%2C743.16893%20C1187.61175%2C743.099391%201187.5963%2C743.007961%201187.55252%2C742.961601%20C1186.80562%2C742.203114%201186.05357%2C741.451065%201185.31054%2C740.704168%20C1180.77122%2C745.242215%201176.24734%2C749.766097%201171.71317%2C754.301569%20M1170.68168%2C753.279092%20C1175.21843%2C748.74362%201179.74488%2C744.215875%201184.27648%2C739.684266%20C1183.54761%2C738.955397%201182.80844%2C738.212362%201182.06154%2C737.474479%20C1182.00617%2C737.420393%201181.90186%2C737.389487%201181.82073%2C737.389487%20C1179.27614%2C737.384336%201176.73154%2C737.384336%201174.18823%2C737.390775%20C1174.09422%2C737.390775%201173.97575%2C737.435846%201173.91007%2C737.501522%20C1172.10207%2C739.301803%201170.29664%2C741.104659%201168.49637%2C742.912667%20C1168.43971%2C742.970616%201168.39077%2C743.068485%201168.39077%2C743.147038%20C1168.38562%2C745.714821%201168.38562%2C748.281316%201168.38948%2C750.847811%20C1168.38948%2C750.91735%201168.41524%2C751.003629%201168.46289%2C751.049988%20C1169.20463%2C751.802037%201169.95281%2C752.548935%201170.68168%2C753.279092%20M1188.99608%2C747.014165%20C1188.99608%2C748.386912%201188.99093%2C749.75837%201188.99995%2C751.129829%20C1189.00252%2C751.4273%201188.90981%2C751.655233%201188.6999%2C751.865137%20C1186.75025%2C753.805783%201184.80574%2C755.75158%201182.86381%2C757.699953%20C1182.66163%2C757.903418%201182.44143%2C758%201182.1504%2C758%20C1179.38559%2C757.993561%201176.6195%2C757.993561%201173.85213%2C758%20C1173.56367%2C758%201173.34346%2C757.905994%201173.13871%2C757.702529%20C1171.19292%2C755.749005%201169.24198%2C753.798057%201167.28717%2C751.850972%20C1167.08885%2C751.653945%201167%2C751.437602%201167.00129%2C751.156872%20C1167.00644%2C748.390775%201167.00644%2C745.624678%201167%2C742.857293%20C1167%2C742.568836%201167.08757%2C742.347343%201167.29232%2C742.14259%20C1169.24713%2C740.195505%201171.19807%2C738.245844%201173.14515%2C736.291033%20C1173.34218%2C736.094006%201173.55594%2C736%201173.83667%2C736%20C1176.61049%2C736.005151%201179.38431%2C736.005151%201182.15812%2C736%20C1182.44014%2C736%201182.6552%2C736.090143%201182.85093%2C736.288457%20C1184.80445%2C738.24842%201186.76184%2C740.203231%201188.72051%2C742.156755%20C1188.91109%2C742.347343%201189.00124%2C742.558534%201188.99995%2C742.830251%20C1188.99222%2C744.224889%201188.99608%2C745.619527%201188.99608%2C747.014165%22%20id%3D%22Fill-1%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + .donut-graph-container { + margin: 26px auto; + height: 120px; + width: 120px; + } + &.ab-pause .donut-graph-container { + margin-top: 0px; + margin-bottom: 30px; + } + &.expert .donut-graph-container { + height: 94px; + width: 94px; + margin-top: 21px; + margin-bottom: 20px; + } + &.expert.ab-pause .donut-graph-container { + margin-top: 0px; + margin-bottom: 16px; + } -@function buildSmartBlockIcon($stroke-color){ - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2218px%22%20height%3D%2228px%22%20viewBox%3D%220%200%2018%2028%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EGroup%2011%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---hover---adblocing%22%20transform%3D%22translate%28-1105.000000%2C%20-711.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Group-11%22%20transform%3D%22translate%281105.000000%2C%20711.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22icon--smart-blocking-light-bulb%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M15.9766215%2C9.23905085%20C15.8801207%2C10.9165559%2015.2802076%2C12.3962344%2014.3232416%2C13.7536786%20C13.8922048%2C14.3648501%2013.456343%2C14.9711966%2013.038173%2C15.5936266%20C12.4414766%2C16.4814337%2011.9637978%2C17.4255329%2011.7804463%2C18.4918664%20C11.7498877%2C18.6671761%2011.6389118%2C18.6543094%2011.5166775%2C18.6543094%20C10.6755125%2C18.652701%209.83434744%2C18.652701%208.99157404%2C18.652701%20C8.16005907%2C18.652701%207.32854409%2C18.647876%206.49542077%2C18.6559177%20C6.31367765%2C18.6575261%206.24934381%2C18.606059%206.21235184%2C18.4178825%20C6.01452526%2C17.3869326%205.55453826%2C16.4637419%204.9707086%2C15.60006%20C4.47372963%2C14.8666541%203.95584216%2C14.146115%203.45725484%2C13.4127092%20C2.5501476%2C12.0826069%202.07568548%2C10.6109701%202.01135163%2C9.00101562%20C1.8987674%2C6.18158477%203.4974635%2C3.72242346%206.19626838%2C2.58049768%20C9.65421266%2C1.118511%2013.7426286%2C2.58532272%2015.3622332%2C5.87439065%20C15.8833374%2C6.93589913%2016.044172%2C8.0633498%2015.9766215%2C9.23905085%20L15.9766215%2C9.23905085%20Z%20M6.35227796%2C21.3000388%20L11.6566037%2C21.3000388%20L11.6566037%2C20.6695671%20L6.35227796%2C20.6695671%20L6.35227796%2C21.3000388%20Z%20M11.1113743%2C23.9811519%20L6.89589897%2C23.9811519%20C6.38766158%2C23.9811519%206.2943775%2C23.8733927%206.36031969%2C23.3281634%20L11.6405202%2C23.3281634%20C11.7145041%2C23.865351%2011.6180033%2C23.9811519%2011.1113743%2C23.9811519%20L11.1113743%2C23.9811519%20Z%20M17.3501491%2C5.40475357%20C15.9010292%2C2.2363116%2013.3839675%2C0.476780878%209.96462348%2C0.0698692952%20C7.05190855%2C-0.277533479%204.51876332%2C0.679432497%202.45364683%2C2.74294064%20C0.148886755%2C5.04930906%20-0.40438433%2C7.86713156%200.26468768%2C10.9841065%20C0.615307147%2C12.6133611%201.41304685%2C14.0303141%202.36840448%2C15.3732832%20C2.80587464%2C15.9908881%203.23691142%2C16.6165348%203.63899796%2C17.2566565%20C4.01052593%2C17.8501363%204.2742947%2C18.4982998%204.30002824%2C19.2027554%20C4.33058682%2C20.0165786%204.30806997%2C20.8304018%204.30806997%2C21.6442249%20L4.34023689%2C21.6442249%20C4.34023689%2C22.3197303%204.33862855%2C22.9952357%204.34184524%2C23.6707411%20C4.34827862%2C24.8753924%205.29398618%2C25.8918672%206.49220408%2C25.9706761%20C6.649822%2C25.9819346%206.70289743%2C26.0269683%206.74149774%2C26.1845862%20C6.99722478%2C27.242878%207.92684887%2C27.9746755%208.99157404%2C27.9762838%20C10.0772077%2C27.9778922%2011.0003984%2C27.2541364%2011.2657755%2C26.1781528%20C11.2995508%2C26.0382267%2011.3381511%2C25.9835429%2011.490944%2C25.9722845%20C12.7325872%2C25.8790004%2013.6622113%2C24.8753924%2013.665428%2C23.6353575%20C13.665428%2C22.3776308%2013.6750781%2C21.1199041%2013.6622113%2C19.860569%20C13.6509529%2C18.9196865%2013.869688%2C18.0447462%2014.3682753%2C17.2502232%20C14.7703619%2C16.6101014%2015.1997903%2C15.9828464%2015.6420855%2C15.3700665%20C16.9046372%2C13.6137525%2017.7972694%2C11.7175123%2017.9645374%2C9.52694482%20C18.0739049%2C8.10355845%2017.9468456%2C6.71073066%2017.3501491%2C5.40475357%20L17.3501491%2C5.40475357%20Z%22%20id%3D%22Page-1%22%20fill%3D%22%23#{$stroke-color}%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M9.09571339%2C7.21443826%20C9.03823634%2C7.19518725%208.96176366%2C7.19518725%208.90428661%2C7.21443826%20L4.78726273%2C8.3064732%20C4.61495411%2C8.34472999%204.5%2C8.49800235%204.5%2C8.67040311%20C4.51924072%2C11.6018291%206.08938152%2C14.3223522%208.7893325%2C16.1424922%20C8.84680955%2C16.180749%208.92340478%2C16.2%209%2C16.2%20C9.07659522%2C16.2%209.15319045%2C16.180749%209.2106675%2C16.1424922%20C11.9106185%2C14.3223522%2013.4807593%2C11.6018291%2013.5%2C8.67040311%20C13.5%2C8.49800235%2013.3850459%2C8.34472999%2013.2127373%2C8.3064732%20L9.09571339%2C7.21443826%20Z%22%20id%3D%22Page-1-Copy-2%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%221.5%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + &.expert.condensed .total-tracker-count { + text-align: center; + padding: 0; + color: #4a4a4a; + font-size: 24px; + font-weight: 600; + margin: 21px 0; + } + &.expert.condensed.ab-pause .total-tracker-count { + margin: 13px 0; + } -@mixin purple-dot { - position: absolute; - display: block; - background-color: $button-purple-f; - border-radius: 50%; - height: 4px; - width: 4px; - top: -8px; - margin-left: auto; - margin-right: auto; - left: 0; - right: 0; - content: ''; -} + .page-stats { + color: #4a4a4a; + text-align: center; + font-size: 14px; + line-height: 21px; + font-weight: 600; + margin-bottom: 44px; + .blocked-trackers .value { color: #e74055; } + .page-load .value { color: #ffc063; } + .page-load.fast .value { color: #9ecc42; } + .page-load.slow .value { color: #e74055; } -#content-summary { - position: absolute; - height: 479px; - width: 100%; - &.not-scanned { - .tracker-count-total, - .tracker-found-text, - .tracker-category-wheel, - #tracker-host { - display: none; + .blocked-trackers, + .page-load { + display: inline-block; + padding: 0 20px; } } - .tracker-category-wheel { - margin-top: 42px; - position: relative; - #categories-donut { - margin: 0 auto; - position: relative; - height: 121px; - width: 121px; - .donut-text { - font-size: 12px; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - text-align: center; - .categories-donut-count { - @extend %pointer; - font-size: 30px; - font-weight: 700; - color: #4a4a4a; - text-align: center; - } - } - } - // Wheel tooltip. Difficult to change content of :before dynamically, - // So we treat tooltip and its tip as elements (tip being a child of tooltip) - .w-tooltip { - @extend %g-tooltip-body; - position: absolute; - } - .w-tip { - @extend %g-tip-body; - border-width: 6px 6px 0 6px; - } - .tooltip { + &.expert .page-stats { + margin-bottom: 21px; + .blocked-trackers, + .page-load { + display: block; + text-overflow: ellipsis; white-space: nowrap; - pointer-events: none; - opacity: 0; - visibility: hidden; - transition: opacity .2s ease-in; - } - .tooltip.show { - visibility: visible; - opacity: 1; + overflow-x: hidden; } - .tooltip::before { - left: 50%; - margin-left: -8px; + } + &.expert.ab-pause .page-stats { + margin-bottom: 16px; + } + &.expert.condensed .page-stats { + div { + text-align: center; + padding: 0; + margin: 21px 0; } + .text { display: none; } } - .tracker-count-total-expanded-expert { - display: none; + &.expert.condensed.ab-pause .page-stats { + margin-bottom: 0; + div { margin: 13px 0; } } - #tracker-host { - color: #9b9b9b; - font-size: 11px; - margin-top: 25px; + + .not-scanned-expert-condensed-space-taker { + height: 162px; } - .info { - font-size: 14px; - color: #4a4a4a; - font-weight: 600; - margin: 30px auto; - > .row { - margin-top: 11px; - } - .block-info { - .value { - color: $red; - } - } - .alert-info { - .value { - color: #f5a623; - } - } - .load-info { - .value { - color: #f5a623; - } - padding-right: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - .load-info.fast .value { - color: $atlantis; - } - .load-info.slow .value { - color: $red; - } + &.ab-pause .not-scanned-expert-condensed-space-taker { + height: 130px; } - #controls { - bottom: 0; - left: 0; - padding-bottom: 60px; - right: 0; - #cliqz-controls { - width: 314px; - height: 59px; - border-top: 1px solid #ebebeb; - border-bottom: 1px solid #ebebeb; - margin: 0 auto; - button { - height: 35px; - width: 35px; - margin-top: 15px; - margin-bottom: 8px; - padding: 0; - background-color: transparent; - border-radius: 50%; - background-size: auto 25px; - background-position: center; - &:hover:not(.disabled) { - background-color: #EBEBEB; - } - } - } - #ghostery-controls { - margin-top: 41px; - background-color: #fff; - > .row > .columns { - padding: 0 16px; - } - .button { - height: 31px; - width: 125px; - margin-bottom: 0px; - font-size: 11px; - background-color: #fff; - border: 1px solid #ccc; - border-radius: 3px; - color: #4a4a4a; - line-height: 14px; - text-align: left; - .title, .select-title, .undo { - margin-left: 30px; - margin-right: 1em; - position: absolute; - left: 0; - right: 0; - text-align: center; - top: 50%; - transform: translateY(-50%); - } - .icon { - margin-top: 1px; - fill: #4a4a4a; - @include controls-btns; - height: 14px; - width: 14px; - position: absolute; - top: 50%; - transform: translateY(-50%); - &.pause { - left: 14px; - } - } - .undo { - display: none; - } - &.active, - &:hover:not(.disabled) { - color: #fff; - } - &.active:hover:not(.disabled) { - .title { - display: none; - } - .undo { - display: inline-block; - } - } - &.controls-trust { - &.active, - &:hover:not(.disabled) { - border-color: #9ecc42; - background-color: #9ecc42; - } - &.active .icon, - &:hover:not(.disabled) .icon { - background-image: buildIconTrust($button-white); - } - .icon { - background-image: buildIconTrust($button-dark-grey); - } - } - &.controls-restrict { - &.active, - &:hover:not(.disabled) { - border-color: #e74055; - background-color: #e74055; - } - &.active .icon, - &:hover:not(.disabled) .icon { - background-image: buildIconRestrict($button-white); - } - .icon { - background-image: buildIconRestrict($button-dark-grey); - } - } - &.controls-pause { - &.active, - &:hover:not(.disabled) { - border-color: $ghosty-blue; - background-color: $ghosty-blue; - } - &:hover:not(.disabled) .icon { - background-image: buildIconPause($button-white); - } - &.active:hover:not(.disabled) { - .title { - display: block; - } - } - .icon { - background-image: buildIconPause($button-dark-grey); - &.resume { - width: 25px; - height: 100%; - left: 8px; - } - } - &.active .icon, &.active:hover .icon { - background-image: buildIconResume($button-white); - } - } - } + .ghostery-features-container { + text-align: center; + .ghostery-features, + .pause-button { + display: inline-block; } } - .toggleExpert { - background-image: url('../images/panel/icon-list-view.svg'); - background-repeat: no-repeat; - background-size: auto; - border: none; - height: 21px; + &.ab-pause .ghostery-features-container { + margin-bottom: 22px; + .ghostery-features { display: block; } + } + &.expert.ab-pause .ghostery-features-container { + margin-bottom: 16px; + } + &.expert.condensed.ab-pause .ghostery-features-container { + margin-bottom: -8px; + } + .ghostery-features-container .button-restrict { + margin: 12px 28px; + } + &.expert.condensed .ghostery-features-container .button-restrict { margin: 0; - padding: 0px; - position: absolute; - right: 18px; - top: 22px; - width: 21px; - z-index: 2; } -} - -.anti-track-btn { - background-position: center; - height: 24px; - background-image: buildAntiTrackIcon($button-grey); - background-repeat: no-repeat; - &.active { - background-image: buildAntiTrackIcon($button-purple); - &:after { - @include purple-dot; - } + &.ab-pause .ghostery-features-container .button-restrict { + margin: 0; } -} -.ad-block-btn { - background-position: center; - height: 25px; - background-repeat: no-repeat; - background-image: buildAdBlockIcon($button-grey); - &.active { - background-image: buildAdBlockIcon($button-purple); - &:after { - @include purple-dot; - } + .cliqz-features-container { + text-align: center; } -} - -.smart-block-btn { - background-position: center; - height: 30px; - background-repeat: no-repeat; - background-image: buildSmartBlockIcon($button-grey); - &.active { - background-image: buildSmartBlockIcon($button-purple); - &:after { - @include purple-dot; - } + &.expert .cliqz-features-container { + margin-top: 10px; + margin-bottom: 6px; } -} - -// trust + restrict + pause buttons -.controls-trust, .controls-restrict, .controls-pause { - position: relative; -} - -.icon-trust { - @include controls-btns; - height: 14px; - width: 14px; - background-image: buildIconTrust($button-dark-grey); -} - -.icon-restrict { - @include controls-btns; - height: 14px; - width: 14px; - background-image: buildIconRestrict($button-dark-grey); -} - -.active { - & .icon-trust { - background-image: buildIconTrust($button-white); + &.expert.ab-pause .cliqz-features-container { + margin-top: 0; + margin-bottom: 16px; } - & .icon-restrict { - background-image: buildIconRestrict($button-white); + &.expert.condensed.ab-pause .cliqz-features-container { + margin-top: 14px; } -} -@import "./summary_expert"; -@import "./summary_expert_collapsed"; + .map-these-trackers { + text-align: center; + font-size: 10px; + color: #9b9b9b; + } +} diff --git a/app/scss/partials/_tooltip.scss b/app/scss/partials/_tooltip.scss index 7b23b36b5..be35680ee 100644 --- a/app/scss/partials/_tooltip.scss +++ b/app/scss/partials/_tooltip.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -17,12 +17,13 @@ .tooltip-content { color: #4a4a4a; font-size: 11px; + line-height: 1.5; padding: 11px 10px; width: 150px; background-color: $mystic; text-align: center; position: absolute; - z-index: 2; + z-index: 3; box-shadow: 0px 2px 2px 0 rgba(0, 0, 0, 0.2); box-sizing: border-box; &:after { @@ -92,17 +93,20 @@ } } -#cliqz-controls .tooltip-content.right { - margin-left: 28px; +.expert .sub-component.cliqz-features .g-tooltip .tooltip-content.right { + margin-left: 16px; } -.toggleExpert.g-tooltip .tooltip-content.right { - top: -10px; - margin-left: 10px; +.expert .sub-component.ghostery-features .g-tooltip .tooltip-content.right { + top: -50%; } -.expanded .toggleExpert.g-tooltip .tooltip-content.right { - top: 15px; - margin-left: 0px; +.expert .sub-component.pause-button .g-tooltip .tooltip-content.right { + margin-left: 28px; + top: -33%; } +.sub-component.pause-button .g-tooltip .tooltip-content.top { + left: 75px; +} + .expert .g-tooltip .tooltip-content.top { &.top-right { margin-left: -40px; diff --git a/app/setup/components/Views/BlockingView.jsx b/app/setup/components/Views/BlockingView.jsx index 25b6e60b4..08f42fd67 100644 --- a/app/setup/components/Views/BlockingView.jsx +++ b/app/setup/components/Views/BlockingView.jsx @@ -112,7 +112,7 @@ class BlockingView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the #blocking step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/DataCollectionView.jsx b/app/setup/components/Views/DataCollectionView.jsx index a92b36b0e..5e32f759f 100644 --- a/app/setup/components/Views/DataCollectionView.jsx +++ b/app/setup/components/Views/DataCollectionView.jsx @@ -61,7 +61,7 @@ class DataCollectionView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the data collection view + * @return {JSX} JSX for rendering the #data-collection step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/DisplayView.jsx b/app/setup/components/Views/DisplayView.jsx index f8d224d4a..cd980d750 100644 --- a/app/setup/components/Views/DisplayView.jsx +++ b/app/setup/components/Views/DisplayView.jsx @@ -66,7 +66,7 @@ class DisplayView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the display view + * @return {JSX} JSX for rendering the #display step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/DoneView.jsx b/app/setup/components/Views/DoneView.jsx index ac239fc81..c1e2b7290 100644 --- a/app/setup/components/Views/DoneView.jsx +++ b/app/setup/components/Views/DoneView.jsx @@ -45,7 +45,7 @@ class DoneView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the done view + * @return {JSX} JSX for rendering the #done step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/LogInView.jsx b/app/setup/components/Views/LogInView.jsx index c6f90fd89..8bf9cb73e 100644 --- a/app/setup/components/Views/LogInView.jsx +++ b/app/setup/components/Views/LogInView.jsx @@ -358,7 +358,7 @@ class LogInView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the #log-in step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/SetupChoiceView.jsx b/app/setup/components/Views/SetupChoiceView.jsx index 3469c0c5c..da978c04b 100644 --- a/app/setup/components/Views/SetupChoiceView.jsx +++ b/app/setup/components/Views/SetupChoiceView.jsx @@ -78,7 +78,7 @@ class SetupChoiceView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the first step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/UpgradeView.jsx b/app/setup/components/Views/UpgradeView.jsx index 820585553..904d0807b 100644 --- a/app/setup/components/Views/UpgradeView.jsx +++ b/app/setup/components/Views/UpgradeView.jsx @@ -45,7 +45,7 @@ class UpgradeView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the Upgrade page */ render() { return ( diff --git a/app/setup/reducers/display.js b/app/setup/reducers/display.js index e7b76780f..63f1f25db 100644 --- a/app/setup/reducers/display.js +++ b/app/setup/reducers/display.js @@ -11,9 +11,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { - UPDATE_DISPLAY_MODE -} from '../constants/constants'; +import { UPDATE_DISPLAY_MODE } from '../constants/constants'; import { msg } from '../utils'; const initialState = { diff --git a/jest.config.js b/jest.config.js index 1b600c2b7..68ffb653f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 diff --git a/package-lock.json b/package-lock.json index 39727e88b..09d18d89a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,40 +5,99 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz", - "integrity": "sha512-sW77BFwJ48YvQp3Gzz5xtAUiXuYOL2aMJKDwiaY3OcvdqBFurtYfOpSa4QrNyDxmOGRFSYzUpabU2m9QrlWE7w==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", "dev": true, "requires": { - "chalk": "2.3.1", + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "2.5.1", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", "esutils": "2.0.2", "js-tokens": "3.0.2" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -46,66 +105,48 @@ } } }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz", - "integrity": "sha512-/SGPOyifPf20iTrMN+WdlY2MbKa7/o4j7B/4IAsdOusASp2icT+Wcdjf4tjJHaXNX8Pe9bpgVxLNxhRvcf8E5w==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.36", - "@babel/template": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz", - "integrity": "sha512-vPPcx2vsSoDbcyWr9S3nd0FM3B4hEXnt0p1oKpwa08GwK0fSRxa98MyaRGf8suk8frdQlG1P3mDrz5p/Rr3pbA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.36" - } - }, "@babel/template": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.36.tgz", - "integrity": "sha512-mUBi90WRyZ9iVvlWLEdeo8gn/tROyJdjKNC4W5xJTSZL+9MS89rTJSqiaJKXIkxk/YRDL/g/8snrG/O0xl33uA==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", "lodash": "4.17.5" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true } } }, "@babel/traverse": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.36.tgz", - "integrity": "sha512-OTUb6iSKVR/98dGThRJ1BiyfwbuX10BVnkz89IpaerjTPRhDfMBfLsqmzxz5MiywUOW4M0Clta0o7rSxkfcuzw==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/helper-function-name": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", "debug": "3.1.0", - "globals": "11.3.0", - "invariant": "2.2.2", + "globals": "11.4.0", + "invariant": "2.2.4", "lodash": "4.17.5" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true }, "debug": { @@ -118,9 +159,9 @@ } }, "globals": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", - "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", "dev": true }, "ms": { @@ -132,9 +173,9 @@ } }, "@babel/types": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.36.tgz", - "integrity": "sha512-PyAORDO9um9tfnrddXgmWN9e6Sq9qxraQIt5ynqBOSXKA5qvK1kUr+Q3nSzKFdzorsiK+oqcUnAFvEoKxv9D+Q==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", "dev": true, "requires": { "esutils": "2.0.2", @@ -211,13 +252,19 @@ }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "dev": true, "requires": { "samsam": "1.3.0" } }, + "@types/node": { + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.2.tgz", + "integrity": "sha512-UWkRY9X7RQHp5OhhRIIka58/gVVycL1zHZu0OTsT5LI86ABaMOSbUjAl+b0FeDhQcxclrkyft3kW5QWdMRs8wQ==", + "dev": true + }, "BigInt": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/BigInt/-/BigInt-5.5.3.tgz", @@ -243,9 +290,9 @@ } }, "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "acorn-dynamic-import": { @@ -254,7 +301,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.4.1" + "acorn": "5.5.3" } }, "acorn-globals": { @@ -263,7 +310,7 @@ "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "dev": true, "requires": { - "acorn": "5.4.1" + "acorn": "5.5.3" } }, "acorn-jsx": { @@ -294,7 +341,7 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -339,7 +386,7 @@ "resolved": "https://registry.npmjs.org/animated/-/animated-0.2.2.tgz", "integrity": "sha512-7pMzS0Sk2lA6/JT6he+apuy3GnDWUWVCurHMrpsbT9ugeLe80kpDQWjZQvkFiU9o7LsPGydPnoZpJsmt1HPPMA==", "requires": { - "invariant": "2.2.2", + "invariant": "2.2.4", "normalize-css-color": "1.0.2" } }, @@ -349,9 +396,9 @@ "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "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": { @@ -371,170 +418,422 @@ "dev": true }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "2.3.11", + "micromatch": "3.1.10", "normalize-path": "2.1.1" - } - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.4" }, "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "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 + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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.1" + } + } } - } - } - }, - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" - }, - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" - } - } - }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" - }, - "aria-query": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.1.tgz", - "integrity": "sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "2.14.1" - }, - "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", - "dev": true - } - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "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-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "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.10.0" - } - }, - "array-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", - "integrity": "sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=", - "requires": { - "debug": "2.6.4", - "es6-symbol": "3.1.1" - } - }, - "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.3" - } - }, - "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 - }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.4", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.1" + } + }, + "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.1.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==", + "dev": true + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.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.1" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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 + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + } + } + }, + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + }, + "dependencies": { + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" + } + } + }, + "argsarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", + "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" + }, + "aria-query": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.1.tgz", + "integrity": "sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "2.15.1" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + } + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "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-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "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.11.0" + } + }, + "array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=", + "requires": { + "debug": "2.6.4", + "es6-symbol": "3.1.1" + } + }, + "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.3" + } + }, + "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.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -703,7 +1002,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000808", + "caniuse-db": "1.0.30000823", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -716,8 +1015,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000808", - "electron-to-chromium": "1.3.33" + "caniuse-db": "1.0.30000823", + "electron-to-chromium": "1.3.42" } } } @@ -793,23 +1092,23 @@ } }, "babel-eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.1.tgz", - "integrity": "sha512-RzdVOyWKQRUnLXhwLk+eKb4oyW+BykZSkpYwFhM4tnfzAG5OWfvG0w/uyzMp5XKEU0jN82+JefHr39bG2+KhRQ==", + "version": "8.2.2", + "resolved": "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz", + "integrity": "sha512-Qt2lz2egBxNYWqN9JIO2z4NOOf8i4b5JS6CFoYrOZZTDssueiV1jH/jsefyg+86SeNY3rB361/mi3kE1WK2WYQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/traverse": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true } } @@ -996,19 +1295,19 @@ } }, "babel-jest": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.2.2.tgz", - "integrity": "sha512-GOutNE3jhFj5WWLd09e9+kkPwzqOSWRj1J1YslVxnKkmgKaWjfvE9k3JGMf8MJYGzEZr6dVK5bg9RWRi/2tGiQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.3.tgz", + "integrity": "sha512-BgSjmtl3mW3i+VeVHEr9d2zFSAT66G++pJcHQiUjd00pkW+voYXFctIm/indcqOWWXw5a1nUpR1XWszD9fJ1qg==", "dev": true, "requires": { "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "22.2.0" + "babel-preset-jest": "22.4.3" } }, "babel-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", - "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { "find-cache-dir": "1.0.0", @@ -1045,7 +1344,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.3.0.tgz", "integrity": "sha512-cv5ZimF5X52uW7Ul83UUxtsFZE6rZYkMv6qWnAeiDLT1/KtpVrTkJpwzDlvJ/FhKJZ43ih4GbFbhuhBKKT7vIw==", "requires": { - "ember-rfc176-data": "0.3.1" + "ember-rfc176-data": "0.3.2" } }, "babel-plugin-istanbul": { @@ -1055,14 +1354,14 @@ "dev": true, "requires": { "find-up": "2.1.0", - "istanbul-lib-instrument": "1.9.2", - "test-exclude": "4.2.0" + "istanbul-lib-instrument": "1.10.1", + "test-exclude": "4.2.1" } }, "babel-plugin-jest-hoist": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz", - "integrity": "sha512-NwicD5n1YQaj6sM3PVULdPBDk1XdlWvh8xBeUJg3nqZwp79Vofb8Q7GOVeWoZZ/RMlMuJMMrEAgSQl/p392nLA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz", + "integrity": "sha512-zhvv4f6OTWy2bYevcJftwGCWXMFe7pqoz41IhMi4xna7xNsX5NygdagsrE0y6kkfuXq8UalwvPwKTyAxME2E/g==", "dev": true }, "babel-plugin-syntax-async-functions": { @@ -1534,7 +1833,7 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "requires": { "babel-runtime": "6.26.0", - "core-js": "2.5.3", + "core-js": "2.5.4", "regenerator-runtime": "0.10.5" } }, @@ -1571,7 +1870,7 @@ "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-regenerator": "6.26.0", "browserslist": "2.11.3", - "invariant": "2.2.2", + "invariant": "2.2.4", "semver": "5.3.0" } }, @@ -1617,12 +1916,12 @@ } }, "babel-preset-jest": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz", - "integrity": "sha512-p61cPMGYlSgfNScn1yQuVnLguWE4bjhB/br4KQDMbYZG+v6ryE5Ch7TKukjA6mRuIQj1zhyou7Sbpqrh4/N6Pg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz", + "integrity": "sha512-a+M3LTEXTq3gxv0uBN9Qm6ahUl7a8pj923nFbCUdqFUSsf3YrX8Uc+C3MEwji5Af3LiQjSC7w4ooYewlz8HRTA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "22.2.0", + "babel-plugin-jest-hoist": "22.4.3", "babel-plugin-syntax-object-rest-spread": "6.13.0" } }, @@ -1683,7 +1982,7 @@ "requires": { "babel-core": "6.26.0", "babel-runtime": "6.26.0", - "core-js": "2.5.3", + "core-js": "2.5.4", "home-or-tmp": "2.0.0", "lodash": "4.17.5", "mkdirp": "0.5.1", @@ -1695,7 +1994,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.3", + "core-js": "2.5.4", "regenerator-runtime": "0.11.1" }, "dependencies": { @@ -1730,7 +2029,7 @@ "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", - "invariant": "2.2.2", + "invariant": "2.2.4", "lodash": "4.17.5" }, "dependencies": { @@ -1793,12 +2092,6 @@ "requires": { "is-descriptor": "1.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -1808,9 +2101,9 @@ "integrity": "sha512-TrhBheudYaff9adiTAqjSScjvtmClQ4vF9l4cqkPNkVsA11m4/NRdH4LkZ/tAMmpzzwfI20BXnJ/PTtafECCNA==" }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==" }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -1892,6 +2185,12 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", @@ -1934,7 +2233,7 @@ "broccoli-funnel": "1.2.0", "broccoli-merge-trees": "1.2.4", "broccoli-persistent-filter": "1.4.3", - "clone": "2.1.1", + "clone": "2.1.2", "hash-for-dep": "1.2.3", "heimdalljs-logger": "0.1.9", "json-stable-stringify": "1.0.1", @@ -2276,8 +2575,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "requires": { - "caniuse-lite": "1.0.30000821", - "electron-to-chromium": "1.3.33" + "caniuse-lite": "1.0.30000823", + "electron-to-chromium": "1.3.42" } }, "bser": { @@ -2295,7 +2594,7 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", + "base64-js": "1.2.3", "ieee754": "1.1.11", "isarray": "1.0.0" } @@ -2342,7 +2641,7 @@ "chownr": "1.0.1", "glob": "7.1.2", "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "mississippi": "2.0.0", "mkdirp": "0.5.1", "move-concurrently": "1.0.1", @@ -2376,14 +2675,6 @@ "to-object-path": "0.3.0", "union-value": "1.0.0", "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "cacheable-request": { @@ -2514,7 +2805,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000808", + "caniuse-db": "1.0.30000823", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -2525,22 +2816,22 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000808", - "electron-to-chromium": "1.3.33" + "caniuse-db": "1.0.30000823", + "electron-to-chromium": "1.3.42" } } } }, "caniuse-db": { - "version": "1.0.30000808", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000808.tgz", - "integrity": "sha1-MN/YMAnVcE8C3/s3clBo7RKjZrs=", + "version": "1.0.30000823", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000823.tgz", + "integrity": "sha1-5o5fjHB4PvQFnS6g3oH1UWUdpvw=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000821", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000821.tgz", - "integrity": "sha512-qyYay02wr/5k7PO86W+LKFaEUZfWIvT65PaXuPP16jkSpgZGIsSstHKiYAPVLjTj98j2WnWwZg8CjXPx7UIPYg==" + "version": "1.0.30000823", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000823.tgz", + "integrity": "sha512-3rrhqUxwBgrwNlWVUEwIJfqdZNwLPX18eTo7MGXb3gueDpbOFW6w5OXyHscdBd6IJcu9wnKmKVd7nSl+r7fmgw==" }, "caseless": { "version": "0.12.0", @@ -2583,6 +2874,20 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.5", + "parse5": "3.0.3" + } + }, "chokidar": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", @@ -2603,22 +2908,6 @@ "upath": "1.0.4" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - } - }, - "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 - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -2635,122 +2924,32 @@ "array-unique": "0.3.2", "define-property": "1.0.0", "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "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.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.4", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "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.6" - } - }, - "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.1" - } - }, - "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.1.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==", - "dev": true - } - } - }, - "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "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.1" - } - } + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "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.2" + } + }, + "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.1" } }, "fill-range": { @@ -2763,17 +2962,6 @@ "is-number": "3.0.0", "repeat-string": "1.6.1", "to-regex-range": "2.1.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.1" - } - } } }, "glob-parent": { @@ -2797,46 +2985,6 @@ } } }, - "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.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "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.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2872,38 +3020,11 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "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 - }, - "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } } } }, @@ -2919,9 +3040,9 @@ "dev": true }, "ci-info": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", - "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", "dev": true }, "cipher-base": { @@ -3021,12 +3142,6 @@ "kind-of": "5.1.0" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", @@ -3041,18 +3156,18 @@ "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" }, "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "dev": true, "requires": { "source-map": "0.5.7" } }, "clean-webpack-plugin": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.18.tgz", - "integrity": "sha512-Kf1BxQnNy2Zq5TBIgWBTEHrhycOM1QjjBYOoTV5P7WioAPr/sh6fgPwn6xYvTIp3EP+yUqoOL4YFpLQVobeIUg==", + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", + "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", "dev": true, "requires": { "rimraf": "2.6.2" @@ -3156,9 +3271,9 @@ } }, "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, "clone-buffer": { "version": "1.0.0", @@ -3166,15 +3281,15 @@ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, "clone-deep": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", - "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { "for-own": "1.0.0", "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "shallow-clone": "0.1.2" + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" }, "dependencies": { "for-own": { @@ -3185,6 +3300,12 @@ "requires": { "for-in": "1.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -3267,15 +3388,15 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "color-convert": "1.9.1", "color-string": "0.3.0" }, "dependencies": { "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true } } @@ -3343,6 +3464,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "dev": true + }, "complex.js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.4.tgz", @@ -3360,20 +3487,27 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "typedarray": "0.0.6" }, "dependencies": { + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { "core-util-is": "1.0.2", @@ -3414,12 +3548,6 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", - "dev": true - }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", @@ -3446,9 +3574,9 @@ "dev": true }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", + "integrity": "sha1-8si/GB8qgLkvNgEhQpzmOi8K6uA=" }, "core-util-is": { "version": "1.0.2", @@ -3519,9 +3647,9 @@ } }, "cross-env": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz", - "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.4.tgz", + "integrity": "sha512-Mx8mw6JWhfpYoEk7PGvHxJMLQwQHORAs8+2bX+C1lGQ4h3GkDb1zbzC2Nw85YH9ZQMlO0BHZxMacgrfPmMFxbg==", "dev": true, "requires": { "cross-spawn": "5.1.0", @@ -3534,7 +3662,7 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -3573,17 +3701,18 @@ "dev": true }, "css-in-js-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.0.tgz", - "integrity": "sha512-yuWmPMD9FLi50Xf3k8W8oO3WM1eVnxEGCldCLyfusQ+CgivFk0s23yst4ooW6tfxMuSa03S6uUEga9UhX6GRrA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", "requires": { - "hyphenate-style-name": "1.0.2" + "hyphenate-style-name": "1.0.2", + "isobject": "3.0.1" } }, "css-loader": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.9.tgz", - "integrity": "sha512-r3dgelMm/mkPz5Y7m9SeiGE46i2VsEU/OYbez+1llfxtv8b2y5/b5StaeEvPK3S5tlNQI+tDW/xDIhKJoZgDtw==", + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", "dev": true, "requires": { "babel-code-frame": "6.26.0", @@ -3602,6 +3731,18 @@ "source-list-map": "2.0.0" } }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", @@ -3626,6 +3767,12 @@ } } }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -4007,6 +4154,17 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz", "integrity": "sha1-RuE6udqOMJdFyNAc5UchPr2y/j8=" }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "dev": true, + "requires": { + "abab": "1.0.4", + "whatwg-mimetype": "2.1.0", + "whatwg-url": "6.4.0" + } + }, "date-fns": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", @@ -4138,14 +4296,6 @@ "requires": { "is-descriptor": "1.0.2", "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "defined": { @@ -4162,7 +4312,7 @@ "requires": { "globby": "5.0.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", @@ -4233,9 +4383,9 @@ } }, "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diffie-hellman": { @@ -4249,6 +4399,12 @@ "randombytes": "2.0.6" } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -4258,6 +4414,24 @@ "esutils": "2.0.2" } }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, "dom-walk": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", @@ -4269,6 +4443,12 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -4278,6 +4458,25 @@ "webidl-conversions": "4.0.2" } }, + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, "double-ended-queue": { "version": "2.1.0-0", "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", @@ -4370,9 +4569,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.33", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz", - "integrity": "sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU=" + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", + "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=" }, "elegant-spinner": { "version": "1.0.1", @@ -4410,7 +4609,7 @@ "broccoli-debug": "0.6.4", "broccoli-funnel": "1.2.0", "broccoli-source": "1.1.0", - "clone": "2.1.1", + "clone": "2.1.2", "ember-cli-version-checker": "2.1.0", "semver": "5.5.0" }, @@ -4427,7 +4626,7 @@ "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.1.0.tgz", "integrity": "sha512-ssiNyVTp+PphroFum8guHX9py4xU1PCxkRYgb25NxumgjpKTPjhkgTfpRRKXlIQe+/wVMmhf+Uv6w9vSLZKWKQ==", "requires": { - "resolve": "1.5.0", + "resolve": "1.6.0", "semver": "5.3.0" } }, @@ -4440,9 +4639,9 @@ } }, "ember-rfc176-data": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.1.tgz", - "integrity": "sha512-u+W5rUvYO7xyKJjiPuCM7bIAvFyPwPTJ66fOZz1xuCv3AyReI9Oev5oOADOO6YJZk+vEn0xWiZ9N6zSf8WU7Fg==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.2.tgz", + "integrity": "sha512-NKpr+dkKFoszdq2Sf5bE7xCsTayJN5CoDhi8wjjqD29Umk4DeRjgYtyhQa0wZ6rj9n97ZCp1BqnBAHOlXeDuGw==" }, "emoji-regex": { "version": "6.5.1", @@ -4496,10 +4695,92 @@ "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz", "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=" }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "enzyme": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", + "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", + "dev": true, + "requires": { + "cheerio": "1.0.0-rc.2", + "function.prototype.name": "1.1.0", + "has": "1.0.1", + "is-boolean-object": "1.0.0", + "is-callable": "1.1.3", + "is-number-object": "1.0.3", + "is-string": "1.0.4", + "is-subset": "0.1.1", + "lodash": "4.17.5", + "object-inspect": "1.5.0", + "object-is": "1.0.1", + "object.assign": "4.1.0", + "object.entries": "1.0.4", + "object.values": "1.0.4", + "raf": "3.4.0", + "rst-selector-parser": "2.2.3" + } + }, + "enzyme-adapter-react-16": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz", + "integrity": "sha512-kC8pAtU2Jk3OJ0EG8Y2813dg9Ol0TXi7UNxHzHiWs30Jo/hj7alc//G1YpKUsPP1oKl9X+Lkx+WlGJpPYA+nvw==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "1.3.0", + "lodash": "4.17.5", + "object.assign": "4.1.0", + "object.values": "1.0.4", + "prop-types": "15.6.1", + "react-reconciler": "0.7.0", + "react-test-renderer": "16.3.1" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } + } + }, + "enzyme-adapter-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz", + "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==", + "dev": true, + "requires": { + "lodash": "4.17.5", + "object.assign": "4.1.0", + "prop-types": "15.6.1" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } + } + }, "errno": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", - "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { "prr": "1.0.1" } @@ -4524,9 +4805,9 @@ } }, "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", "dev": true, "requires": { "es-to-primitive": "1.1.1", @@ -4612,16 +4893,16 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, "requires": { "esprima": "3.1.3", "estraverse": "4.2.0", "esutils": "2.0.2", "optionator": "0.8.2", - "source-map": "0.5.7" + "source-map": "0.6.1" }, "dependencies": { "esprima": { @@ -4629,36 +4910,43 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true } } }, "eslint": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", - "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { "ajv": "5.5.2", "babel-code-frame": "6.26.0", - "chalk": "2.3.1", - "concat-stream": "1.6.0", + "chalk": "2.3.2", + "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", "doctrine": "2.1.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0", - "espree": "3.5.3", - "esquery": "1.0.0", + "espree": "3.5.4", + "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.3.0", + "globals": "11.4.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", + "js-yaml": "3.11.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.5", @@ -4669,6 +4957,7 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", + "regexpp": "1.1.0", "require-uncached": "1.0.3", "semver": "5.3.0", "strip-ansi": "4.0.0", @@ -4684,32 +4973,32 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "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.3" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "debug": { @@ -4728,18 +5017,18 @@ "dev": true }, "globals": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", - "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "4.0.0" } }, @@ -4765,9 +5054,9 @@ } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -4800,7 +5089,7 @@ "dev": true, "requires": { "debug": "2.6.9", - "resolve": "1.5.0" + "resolve": "1.6.0" }, "dependencies": { "debug": { @@ -4821,9 +5110,9 @@ } }, "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "dev": true, "requires": { "debug": "2.6.9", @@ -4876,9 +5165,9 @@ } }, "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.10.0.tgz", + "integrity": "sha1-+gkIPVp1KI35xsfQn+EiVZhWVec=", "dev": true, "requires": { "builtin-modules": "1.1.1", @@ -4886,9 +5175,9 @@ "debug": "2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.1.1", + "eslint-module-utils": "2.2.0", "has": "1.0.1", - "lodash.cond": "4.5.2", + "lodash": "4.17.5", "minimatch": "3.0.4", "read-pkg-up": "2.0.0" }, @@ -4936,21 +5225,21 @@ } }, "eslint-plugin-react": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.6.1.tgz", - "integrity": "sha512-30aMOHWX/DOaaLJVBHz6RMvYM2qy5GH63+y2PLFdIrYe4YLtODFmT3N1YA7ZqUnaBweVbedr4K4cqxOlWAPjIw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", + "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", "dev": true, "requires": { "doctrine": "2.1.0", "has": "1.0.1", "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.0" + "prop-types": "15.6.1" }, "dependencies": { "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "dev": true, "requires": { "fbjs": "0.8.16", @@ -4972,7 +5261,7 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, @@ -4992,12 +5281,12 @@ } }, "espree": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz", - "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "acorn-jsx": "3.0.1" } }, @@ -5008,22 +5297,21 @@ "dev": true }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "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.2.0" } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -5140,23 +5428,23 @@ } }, "expect": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-22.3.0.tgz", - "integrity": "sha512-woguB2yTY69vxUZoclqjPccHzUOd1s/mLx81kSSDg+7u6+2wfd5qh166DRoCq1KfaH/YXCTe+ogHgxj0i4LFPw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "jest-diff": "22.1.0", - "jest-get-type": "22.1.0", - "jest-matcher-utils": "22.2.0", - "jest-message-util": "22.2.0", - "jest-regex-util": "22.1.0" + "ansi-styles": "3.2.1", + "jest-diff": "22.4.3", + "jest-get-type": "22.4.3", + "jest-matcher-utils": "22.4.3", + "jest-message-util": "22.4.3", + "jest-regex-util": "22.4.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" @@ -5191,9 +5479,9 @@ } }, "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "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.2", @@ -5227,9 +5515,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-future": { "version": "1.0.2", @@ -5319,13 +5607,43 @@ } }, "file-loader": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz", - "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "schema-utils": "0.4.5" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" + } + } } }, "filename-regex": { @@ -5355,6 +5673,17 @@ "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" + }, + "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" + } + } } }, "find-cache-dir": { @@ -5364,7 +5693,7 @@ "dev": true, "requires": { "commondir": "1.0.1", - "make-dir": "1.1.0", + "make-dir": "1.2.0", "pkg-dir": "2.0.0" } }, @@ -5422,9 +5751,9 @@ "dev": true }, "flow-parser": { - "version": "0.68.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.68.0.tgz", - "integrity": "sha1-nMlmIKEC4xajFLa81WIFzqzoYtg=", + "version": "0.69.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.69.0.tgz", + "integrity": "sha1-N4tRKNbQtVSosvFqTKPhq5ZJ8A4=", "dev": true }, "flush-write-stream": { @@ -5486,16 +5815,7 @@ "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.17" - } - }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.3.0" + "mime-types": "2.1.18" } }, "foundation-sites": { @@ -6515,6 +6835,17 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "function.prototype.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "is-callable": "1.1.3" + } + }, "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", @@ -6844,7 +7175,7 @@ "isurl": "1.0.0", "lowercase-keys": "1.0.1", "mimic-response": "1.0.0", - "p-cancelable": "0.4.0", + "p-cancelable": "0.4.1", "p-timeout": "2.0.1", "pify": "3.0.0", "safe-buffer": "5.1.1", @@ -6973,6 +7304,12 @@ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, + "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-to-string-tag-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", @@ -6995,14 +7332,6 @@ "get-value": "2.0.6", "has-values": "1.0.0", "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "has-values": { @@ -7063,7 +7392,7 @@ "broccoli-kitchen-sink-helpers": "0.3.1", "heimdalljs": "0.2.5", "heimdalljs-logger": "0.1.9", - "resolve": "1.5.0" + "resolve": "1.6.0" } }, "hash.js": { @@ -7122,7 +7451,7 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", "requires": { - "invariant": "2.2.2", + "invariant": "2.2.4", "loose-envify": "1.3.1", "resolve-pathname": "2.2.0", "value-equal": "0.4.0", @@ -7146,9 +7475,9 @@ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "hoist-non-react-statics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", + "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" }, "home-or-tmp": { "version": "2.0.0", @@ -7169,9 +7498,9 @@ } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "html-comment-regex": { @@ -7202,31 +7531,30 @@ "requires": { "es6-templates": "0.2.3", "fastparse": "1.1.1", - "html-minifier": "3.5.9", + "html-minifier": "3.5.13", "loader-utils": "1.1.0", "object-assign": "4.1.1" } }, "html-minifier": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.9.tgz", - "integrity": "sha512-EZqO91XJwkj8BeLx9C12sKB/AHoTANaZax39vEOP9f/X/9jgJ3r1O2+neabuHqpz5kJO71TapP9JrtCY39su1A==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.13.tgz", + "integrity": "sha512-B7P99uf0LPQ5lslyhrAZAXE7Lk1tpiv52KVapKbeFhgqNMUI7JBd/fYLX55imu3Rz7sCTzZM6r/IBe4oT7qCjg==", "dev": true, "requires": { "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.14.1", + "clean-css": "4.1.11", + "commander": "2.15.1", "he": "1.1.1", - "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.3.10" + "uglify-js": "3.3.18" }, "dependencies": { "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, "source-map": { @@ -7236,17 +7564,48 @@ "dev": true }, "uglify-js": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.10.tgz", - "integrity": "sha512-dNib7aUDNZFJNTXFyq0CDmLRVOsnY1F+IQgt2FAOdZFx2+LvKVLbbIb/fL+BYKCv3YH3bPCE/6M/JaxChtQLHQ==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.18.tgz", + "integrity": "sha512-VhjIFv93KnTx/ntNi9yTBbfrsWnQnqUy02MT32uqU/5i2oEJ8GAEJ0AwYV206JeOmIzSjm41Ba0iXVKv6j7y9g==", "dev": true, "requires": { - "commander": "2.14.1", + "commander": "2.15.1", "source-map": "0.6.1" } } } }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + } + } + }, "http-cache-semantics": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", @@ -7266,7 +7625,7 @@ "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "https-browserify": { @@ -7318,38 +7677,38 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.17" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { - "chalk": "2.3.1", + "chalk": "2.3.2", "source-map": "0.6.1", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "source-map": { @@ -7359,9 +7718,9 @@ "dev": true }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -7465,7 +7824,7 @@ "integrity": "sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=", "requires": { "bowser": "1.9.3", - "css-in-js-utils": "2.0.0" + "css-in-js-utils": "2.0.1" } }, "inquirer": { @@ -7474,11 +7833,11 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.1", + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.1.0", + "external-editor": "2.2.0", "figures": "2.0.0", "lodash": "4.17.5", "mute-stream": "0.0.7", @@ -7497,23 +7856,23 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "strip-ansi": { @@ -7526,9 +7885,9 @@ } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -7553,9 +7912,9 @@ } }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { "loose-envify": "1.3.1" } @@ -7616,6 +7975,12 @@ "binary-extensions": "1.11.0" } }, + "is-boolean-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "dev": true + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -7642,7 +8007,7 @@ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "ci-info": "1.1.2" + "ci-info": "1.1.3" } }, "is-data-descriptor": { @@ -7699,6 +8064,14 @@ "dev": true, "requires": { "is-primitive": "2.0.0" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + } } }, "is-extendable": { @@ -7757,6 +8130,13 @@ "replace-comments-x": "2.0.0", "to-boolean-x": "1.0.3", "to-string-tag-x": "1.4.3" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + } } }, "is-generator-fn": { @@ -7836,6 +8216,12 @@ "kind-of": "3.2.2" } }, + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "dev": true + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -7854,13 +8240,6 @@ "requires": { "is-function-x": "3.3.0", "is-primitive": "3.0.0" - }, - "dependencies": { - "is-primitive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.0.tgz", - "integrity": "sha512-Qch+MMfMdu7DMY6XElM7LUJKPmkbXdTqNhqyehVflzis2a8Zd9V6U8qZybb32uUSmlO/dNmg3fsA5t0Q9TC0mA==" - } } }, "is-observable": { @@ -7904,9 +8283,9 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "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.1" @@ -7934,14 +8313,6 @@ "dev": true, "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "is-posix-bracket": { @@ -7951,9 +8322,9 @@ "dev": true }, "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.0.tgz", + "integrity": "sha512-Qch+MMfMdu7DMY6XElM7LUJKPmkbXdTqNhqyehVflzis2a8Zd9V6U8qZybb32uUSmlO/dNmg3fsA5t0Q9TC0mA==" }, "is-promise": { "version": "2.1.0", @@ -8007,6 +8378,12 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", @@ -8049,13 +8426,9 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "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" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isomorphic-fetch": { "version": "2.2.1", @@ -8063,7 +8436,7 @@ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { "node-fetch": "1.7.1", - "whatwg-fetch": "2.0.3" + "whatwg-fetch": "2.0.4" } }, "isstream": { @@ -8072,19 +8445,20 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.2.tgz", - "integrity": "sha512-kH5YRdqdbs5hiH4/Rr1Q0cSAGgjh3jTtg8vu9NLebBAoK3adVO4jk81J+TYOkTr2+Q4NLeb1ACvmEt65iG/Vbw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", "dev": true, "requires": { "async": "2.6.0", + "compare-versions": "3.1.0", "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.2", - "istanbul-lib-report": "1.1.3", - "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.1.4", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.4", + "istanbul-reports": "1.3.0", "js-yaml": "3.7.0", "mkdirp": "0.5.1", "once": "1.4.0" @@ -8098,28 +8472,56 @@ "requires": { "lodash": "4.17.5" } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", + "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "istanbul-lib-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz", - "integrity": "sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "dev": true }, "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", + "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", "dev": true, "requires": { "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz", - "integrity": "sha512-nz8t4HQ2206a/3AXi+NHFWEa844DMpPsgbcUteJbt1j8LX1xg56H9rOMnhvcvVvPbW60qAIyrSk44H8ZDqaSSA==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { "babel-generator": "6.26.1", @@ -8127,17 +8529,17 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.2.0", "semver": "5.3.0" } }, "istanbul-lib-report": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", - "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" @@ -8167,7 +8569,7 @@ "dev": true, "requires": { "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "rimraf": "2.6.2", "source-map": "0.5.7" @@ -8191,9 +8593,9 @@ } }, "istanbul-reports": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.4.tgz", - "integrity": "sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { "handlebars": "4.0.11" @@ -8225,13 +8627,13 @@ "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" }, "jest": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-22.3.0.tgz", - "integrity": "sha512-LT4VWb2N5ZjLs6+UaI+6k0lyH8jlI+Mhb7nfWG6dLgUDhD4rFXQjMRL8owehZz46ODTWZ4eVe3fEMrKRp4Fing==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-22.4.3.tgz", + "integrity": "sha512-FFCdU/pXOEASfHxFDOWUysI/+FFoqiXJADEIXgDKuZyqSmBD3tZ4BEGH7+M79v7czj7bbkhwtd2LaEDcJiM/GQ==", "dev": true, "requires": { "import-local": "1.0.0", - "jest-cli": "22.3.0" + "jest-cli": "22.4.3" }, "dependencies": { "ansi-regex": { @@ -8241,23 +8643,23 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "cliui": { @@ -8272,35 +8674,36 @@ } }, "jest-cli": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.3.0.tgz", - "integrity": "sha512-CiUADkEcYuRdy3A3AXPpyK4hKq8UfM6M5vKmPSQSMLa7TWUDcB+NmIz5UAFYXnNdw4osNnEzTpsGBYeZLq3UZA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.3.tgz", + "integrity": "sha512-IiHybF0DJNqZPsbjn4Cy4vcqcmImpoFwNFnkehzVw8lTUSl4axZh5DHewu5bdpZF2Y5gUqFKYzH0FH4Qx2k+UA==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.1", + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", "exit": "0.1.2", "glob": "7.1.2", "graceful-fs": "4.1.11", "import-local": "1.0.0", "is-ci": "1.1.0", - "istanbul-api": "1.2.2", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-instrument": "1.9.2", + "istanbul-api": "1.3.1", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-instrument": "1.10.1", "istanbul-lib-source-maps": "1.2.3", - "jest-changed-files": "22.2.0", - "jest-config": "22.3.0", - "jest-environment-jsdom": "22.3.0", - "jest-get-type": "22.1.0", - "jest-haste-map": "22.3.0", - "jest-message-util": "22.2.0", - "jest-regex-util": "22.1.0", - "jest-resolve-dependencies": "22.1.0", - "jest-runner": "22.3.0", - "jest-runtime": "22.3.0", - "jest-snapshot": "22.2.0", - "jest-util": "22.3.0", - "jest-worker": "22.2.2", + "jest-changed-files": "22.4.3", + "jest-config": "22.4.3", + "jest-environment-jsdom": "22.4.3", + "jest-get-type": "22.4.3", + "jest-haste-map": "22.4.3", + "jest-message-util": "22.4.3", + "jest-regex-util": "22.4.3", + "jest-resolve-dependencies": "22.4.3", + "jest-runner": "22.4.3", + "jest-runtime": "22.4.3", + "jest-snapshot": "22.4.3", + "jest-util": "22.4.3", + "jest-validate": "22.4.3", + "jest-worker": "22.4.3", "micromatch": "2.3.11", "node-notifier": "5.2.1", "realpath-native": "1.0.0", @@ -8322,9 +8725,9 @@ } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8353,57 +8756,57 @@ } }, "jest-changed-files": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.2.0.tgz", - "integrity": "sha512-SzqOvoPMrXB0NPvDrSPeKETpoUNCtNDOsFbCzAGWxqWVvNyrIMLpUjVExT3u3LfdVrENlrNGCfh5YoFd8+ZeXg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", + "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", "dev": true, "requires": { "throat": "4.1.0" } }, "jest-config": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.3.0.tgz", - "integrity": "sha512-/T3AyDY4FsRaqIsKk+oIItb5mePgIiyh12++fKt8ueISu7jwWf6Y9saodynQaZKtbWcJMDwgTfKz44DylDb1zA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", + "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", "dev": true, "requires": { - "chalk": "2.3.1", + "chalk": "2.3.2", "glob": "7.1.2", - "jest-environment-jsdom": "22.3.0", - "jest-environment-node": "22.3.0", - "jest-get-type": "22.1.0", - "jest-jasmine2": "22.3.0", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.3.0", - "jest-util": "22.3.0", - "jest-validate": "22.2.2", - "pretty-format": "22.1.0" + "jest-environment-jsdom": "22.4.3", + "jest-environment-node": "22.4.3", + "jest-get-type": "22.4.3", + "jest-jasmine2": "22.4.3", + "jest-regex-util": "22.4.3", + "jest-resolve": "22.4.3", + "jest-util": "22.4.3", + "jest-validate": "22.4.3", + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8412,41 +8815,41 @@ } }, "jest-diff": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.1.0.tgz", - "integrity": "sha512-lowdbU/dzXh+2/MR5QcvU5KPNkO4JdAEYw0PkQCbIQIuy5+g3QZBuVhWh8179Fmpg4CQrz1WgoK/yQHDCHbqqw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "dev": true, "requires": { - "chalk": "2.3.1", - "diff": "3.4.0", - "jest-get-type": "22.1.0", - "pretty-format": "22.1.0" + "chalk": "2.3.2", + "diff": "3.5.0", + "jest-get-type": "22.4.3", + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8455,98 +8858,93 @@ } }, "jest-docblock": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.2.2.tgz", - "integrity": "sha512-ymqH4vzNMA0BrRfbDfQ6+b/AI0FLwuEAjBa87HUcuIz0UN76zH+Qw7lpDvhELzNmxu1EfxP9cxMRnVgkHZ7vyA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", + "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", "dev": true, "requires": { "detect-newline": "2.1.0" } }, "jest-environment-jsdom": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.3.0.tgz", - "integrity": "sha512-3AwJ1qECmaiq52sn1ZEGJR0O8ZXfE3jWLYcUW+PcGMPcc+k3jFhCHYeUp7VK3njpFB6lmOIbsZs40S0kyMPDyA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", "dev": true, "requires": { - "jest-mock": "22.2.0", - "jest-util": "22.3.0", - "jsdom": "11.6.2" + "jest-mock": "22.4.3", + "jest-util": "22.4.3", + "jsdom": "11.7.0" } }, "jest-environment-node": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.3.0.tgz", - "integrity": "sha512-Pmpcm5n2YFzruhbAdV5RmEO0xoSnZVw326RLHoCIYhxcm7Vxacb8YKvRv9CbFbXgyQdwuamtaKENQz6yj35b9Q==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", "dev": true, "requires": { - "jest-mock": "22.2.0", - "jest-util": "22.3.0" + "jest-mock": "22.4.3", + "jest-util": "22.4.3" } }, "jest-get-type": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.1.0.tgz", - "integrity": "sha512-nD97IVOlNP6fjIN5i7j5XRH+hFsHL7VlauBbzRvueaaUe70uohrkz7pL/N8lx/IAwZRTJ//wOdVgh85OgM7g3w==", + "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-haste-map": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.3.0.tgz", - "integrity": "sha512-eCU0/07j5lDnk6NldfZVv0ul1PqkOFjKwcLpzcj1BBEDYmWoXi8z+3Qoikl0/UM3pjbaVfQOgLZEgCzmzHfwdQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", + "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", "dev": true, "requires": { "fb-watchman": "2.0.0", "graceful-fs": "4.1.11", - "jest-docblock": "22.2.2", - "jest-worker": "22.2.2", + "jest-docblock": "22.4.3", + "jest-serializer": "22.4.3", + "jest-worker": "22.4.3", "micromatch": "2.3.11", - "sane": "2.4.1" + "sane": "2.5.0" } }, "jest-jasmine2": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.3.0.tgz", - "integrity": "sha512-m88tD8usgYJJErO7KEr0FqDDyiYCElaWbKqKLstsm/0mFANslhHYFFgIBM3uY+OT9v90mS40DBNMVwWRTpAxJA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", + "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", "dev": true, "requires": { - "callsites": "2.0.0", - "chalk": "2.3.1", + "chalk": "2.3.2", "co": "4.6.0", - "expect": "22.3.0", + "expect": "22.4.3", "graceful-fs": "4.1.11", "is-generator-fn": "1.0.0", - "jest-diff": "22.1.0", - "jest-matcher-utils": "22.2.0", - "jest-message-util": "22.2.0", - "jest-snapshot": "22.2.0", - "source-map-support": "0.5.3" + "jest-diff": "22.4.3", + "jest-matcher-utils": "22.4.3", + "jest-message-util": "22.4.3", + "jest-snapshot": "22.4.3", + "jest-util": "22.4.3", + "source-map-support": "0.5.4" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "source-map": { @@ -8556,18 +8954,18 @@ "dev": true }, "source-map-support": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", - "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", "dev": true, "requires": { "source-map": "0.6.1" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8576,49 +8974,49 @@ } }, "jest-leak-detector": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz", - "integrity": "sha512-8QsCWkncWAqdvrXN4yXQp9vgWF6CT3RkRey+d06SIHX913uXzAJhJdZyo6eE+uHVYMxUbxqW93npbUFhAR0YxA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz", + "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==", "dev": true, "requires": { - "pretty-format": "22.1.0" + "pretty-format": "22.4.3" } }, "jest-matcher-utils": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz", - "integrity": "sha512-jO0cnQ93mR4on+nbmEeK4bChCvLeMFN1bP2qjRjwFv5KzQt34y5SmUq9FgzKjZQZG8zUmaQN+/pHJMUQ0xAcgQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", "dev": true, "requires": { - "chalk": "2.3.1", - "jest-get-type": "22.1.0", - "pretty-format": "22.1.0" + "chalk": "2.3.2", + "jest-get-type": "22.4.3", + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8627,42 +9025,42 @@ } }, "jest-message-util": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.2.0.tgz", - "integrity": "sha512-LHPYu5kyA07FZK2CpvJ0xBE+gqy+dW30sFU3oep78lmscyc27mVOWDVwzmROhUeY8LlYpW3mcpRB/w5ibD6ZkA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "chalk": "2.3.1", + "@babel/code-frame": "7.0.0-beta.44", + "chalk": "2.3.2", "micromatch": "2.3.11", "slash": "1.0.0", "stack-utils": "1.0.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8671,51 +9069,51 @@ } }, "jest-mock": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.2.0.tgz", - "integrity": "sha512-eOfoUYLOB/JlxChOFkh/bzpWGqUXb9I+oOpkprHHs9L7nUNfL8Rk28h1ycWrqzWCEQ/jZBg/xIv7VdQkfAkOhw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", "dev": true }, "jest-regex-util": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.1.0.tgz", - "integrity": "sha512-on0LqVS6Xeh69sw3d1RukVnur+lVOl3zkmb0Q54FHj9wHoq6dbtWqb3TSlnVUyx36hqjJhjgs/QLqs07Bzu72Q==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", "dev": true }, "jest-resolve": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.3.0.tgz", - "integrity": "sha512-OQzPRNCBw3KRPzDTJhuW9eXLrlsnv6tY5ArmKSKsDMA5t6EcYv1W/6DrNYqiIVi7Zcx4P+1hssFeWVZWp9TnDg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", "dev": true, "requires": { "browser-resolve": "1.11.2", - "chalk": "2.3.1" + "chalk": "2.3.2" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8724,51 +9122,52 @@ } }, "jest-resolve-dependencies": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz", - "integrity": "sha512-76Ll61bD/Sus8wK8d+lw891EtiBJGJkWG8OuVDTEX0z3z2+jPujvQqSB2eQ+kCHyCsRwJ2PSjhn3UHqae/oEtA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", + "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", "dev": true, "requires": { - "jest-regex-util": "22.1.0" + "jest-regex-util": "22.4.3" } }, "jest-runner": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.3.0.tgz", - "integrity": "sha512-ch48IjHcOj+mIV9iMJsK4c0OcVd6OOKX6ggwttYJorypu+rEpgmpPXfucAh8q8F9SFt8nKByfjD6iHOWtd27sA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.3.tgz", + "integrity": "sha512-U7PLlQPRlWNbvOHWOrrVay9sqhBJmiKeAdKIkvX4n1G2tsvzLlf77nBD28GL1N6tGv4RmuTfI8R8JrkvCa+IBg==", "dev": true, "requires": { "exit": "0.1.2", - "jest-config": "22.3.0", - "jest-docblock": "22.2.2", - "jest-haste-map": "22.3.0", - "jest-jasmine2": "22.3.0", - "jest-leak-detector": "22.1.0", - "jest-message-util": "22.2.0", - "jest-runtime": "22.3.0", - "jest-util": "22.3.0", - "jest-worker": "22.2.2", + "jest-config": "22.4.3", + "jest-docblock": "22.4.3", + "jest-haste-map": "22.4.3", + "jest-jasmine2": "22.4.3", + "jest-leak-detector": "22.4.3", + "jest-message-util": "22.4.3", + "jest-runtime": "22.4.3", + "jest-util": "22.4.3", + "jest-worker": "22.4.3", "throat": "4.1.0" } }, "jest-runtime": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.3.0.tgz", - "integrity": "sha512-e0BO1/by3bi0d7vMN7afVVD9kD9NEzmHrZgpJtTyxTN4qyL94iJyiPEd7WZxDySSNvA6Fd43LS7AbkMGhOaVJg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.3.tgz", + "integrity": "sha512-Eat/esQjevhx9BgJEC8udye+FfoJ2qvxAZfOAWshYGS22HydHn5BgsvPdTtt9cp0fSl5LxYOFA1Pja9Iz2Zt8g==", "dev": true, "requires": { "babel-core": "6.26.0", - "babel-jest": "22.2.2", + "babel-jest": "22.4.3", "babel-plugin-istanbul": "4.1.5", - "chalk": "2.3.1", + "chalk": "2.3.2", "convert-source-map": "1.5.1", "exit": "0.1.2", "graceful-fs": "4.1.11", - "jest-config": "22.3.0", - "jest-haste-map": "22.3.0", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.3.0", - "jest-util": "22.3.0", + "jest-config": "22.4.3", + "jest-haste-map": "22.4.3", + "jest-regex-util": "22.4.3", + "jest-resolve": "22.4.3", + "jest-util": "22.4.3", + "jest-validate": "22.4.3", "json-stable-stringify": "1.0.1", "micromatch": "2.3.11", "realpath-native": "1.0.0", @@ -8785,23 +9184,23 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "cliui": { @@ -8825,9 +9224,9 @@ } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8855,44 +9254,50 @@ } } }, + "jest-serializer": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", + "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==", + "dev": true + }, "jest-snapshot": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.2.0.tgz", - "integrity": "sha512-nc4hOfENTO/09NWJDz6ojf5zdAGPutQ4ZKmidWuEirTyBwhndxBlckO8ZaiQk9NDfDUeoVNptd6zJW84GWPRKw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", "dev": true, "requires": { - "chalk": "2.3.1", - "jest-diff": "22.1.0", - "jest-matcher-utils": "22.2.0", + "chalk": "2.3.2", + "jest-diff": "22.4.3", + "jest-matcher-utils": "22.4.3", "mkdirp": "0.5.1", "natural-compare": "1.4.0", - "pretty-format": "22.1.0" + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8901,24 +9306,24 @@ } }, "jest-util": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.3.0.tgz", - "integrity": "sha512-c/YVsxOI2tSwXqb19/3gnzBDVsrTG4D3dAJzHpdROxZdJ2dpI/zYKEdLDS2CSKDTbjftoeiW9PrOYiDGF2UKfw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", "dev": true, "requires": { "callsites": "2.0.0", - "chalk": "2.3.1", + "chalk": "2.3.2", "graceful-fs": "4.1.11", "is-ci": "1.1.0", - "jest-message-util": "22.2.0", - "jest-validate": "22.2.2", - "mkdirp": "0.5.1" + "jest-message-util": "22.4.3", + "mkdirp": "0.5.1", + "source-map": "0.6.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" @@ -8931,20 +9336,26 @@ "dev": true }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8953,41 +9364,42 @@ } }, "jest-validate": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.2.2.tgz", - "integrity": "sha512-YcZlnHYqQqLqSTj/E+mDkriqVmGOATTzseV+JFWa0XJ4Tpxji6+M66TcTl1PlbvQTMo+iVvvRixnPkF1mqNFjg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", + "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", "dev": true, "requires": { - "chalk": "2.3.1", - "jest-get-type": "22.1.0", + "chalk": "2.3.2", + "jest-config": "22.4.3", + "jest-get-type": "22.4.3", "leven": "2.1.0", - "pretty-format": "22.1.0" + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -8996,9 +9408,9 @@ } }, "jest-worker": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.2.2.tgz", - "integrity": "sha512-ZylDXjrFNt/OP6cUxwJFWwDgazP7hRjtCQbocFHyiwov+04Wm1x5PYzMGNJT53s4nwr0oo9ocYTImS09xOlUnw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", + "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", "dev": true, "requires": { "merge-stream": "1.0.1" @@ -9031,14 +9443,14 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "2.7.3" }, "dependencies": { "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "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.3" @@ -9077,9 +9489,9 @@ "babel-preset-es2015": "6.24.1", "babel-preset-stage-1": "6.24.1", "babel-register": "6.26.0", - "babylon": "7.0.0-beta.42", + "babylon": "7.0.0-beta.44", "colors": "1.1.2", - "flow-parser": "0.68.0", + "flow-parser": "0.69.0", "lodash": "4.17.5", "micromatch": "2.3.11", "neo-async": "2.5.0", @@ -9090,6 +9502,12 @@ "write-file-atomic": "1.3.4" }, "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, "ast-types": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", @@ -9097,17 +9515,38 @@ "dev": true }, "babylon": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", - "integrity": "sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + } + }, "recast": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", @@ -9126,6 +9565,18 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, "write-file-atomic": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", @@ -9151,7 +9602,7 @@ "escape-string-regexp": "1.0.5", "js2xmlparser": "3.0.0", "klaw": "2.0.0", - "marked": "0.3.12", + "marked": "0.3.19", "mkdirp": "0.5.1", "requizzle": "0.2.1", "strip-json-comments": "2.0.1", @@ -9164,49 +9615,40 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", "dev": true - }, - "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } } } }, "jsdom": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", - "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.7.0.tgz", + "integrity": "sha512-9NzSc4Iz4gN9p4uoPbBUzro21QdgL32swaWIaWS8eEVQ2I69fRJAy/MKyvlEIk0V7HtKgfMbbOKyTZUrzR2Hsw==", "dev": true, "requires": { "abab": "1.0.4", - "acorn": "5.4.1", + "acorn": "5.5.3", "acorn-globals": "4.1.0", "array-equal": "1.0.0", - "browser-process-hrtime": "0.1.2", - "content-type-parser": "1.0.2", "cssom": "0.3.2", "cssstyle": "0.2.37", + "data-urls": "1.0.0", "domexception": "1.0.1", - "escodegen": "1.9.0", + "escodegen": "1.9.1", "html-encoding-sniffer": "1.0.2", "left-pad": "1.2.0", - "nwmatcher": "1.4.3", + "nwmatcher": "1.4.4", "parse5": "4.0.0", "pn": "1.1.0", - "request": "2.83.0", + "request": "2.85.0", "request-promise-native": "1.0.5", "sax": "1.2.4", "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", + "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.0", - "ws": "4.0.0", + "ws": "4.1.0", "xml-name-validator": "3.0.0" }, "dependencies": { @@ -9228,7 +9670,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "cryptiles": { @@ -9246,7 +9688,7 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } } } @@ -9259,7 +9701,7 @@ "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.17" + "mime-types": "2.1.18" } }, "har-schema": { @@ -9286,14 +9728,14 @@ "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", - "hoek": "4.2.0", + "hoek": "4.2.1", "sntp": "2.1.0" } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "dev": true }, "http-signature": { @@ -9304,9 +9746,15 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -9320,9 +9768,9 @@ "dev": true }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { "aws-sign2": "0.7.0", @@ -9338,13 +9786,13 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -9355,7 +9803,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "tunnel-agent": { @@ -9386,9 +9834,9 @@ "dev": true }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "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": { @@ -9506,6 +9954,15 @@ "is-buffer": "1.1.6" } }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -9536,7 +9993,7 @@ "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", "requires": { - "errno": "0.1.6" + "errno": "0.1.7" } }, "level-iterator-stream": { @@ -9627,7 +10084,7 @@ "spdx": "0.5.1", "spdx-correct": "2.0.4", "spdx-satisfies": "0.1.3", - "treeify": "1.0.1" + "treeify": "1.1.0" }, "dependencies": { "ansi-regex": { @@ -9689,12 +10146,6 @@ "spdx-license-ids": "2.0.1" } }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, "spdx-expression-parse": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-2.0.2.tgz", @@ -9933,9 +10384,9 @@ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" }, "lodash-es": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.5.tgz", - "integrity": "sha512-Ez3ONp3TK9gX1HYKp6IhetcVybD+2F+Yp6GS9dfH8ue6EOCEzQtQEh4K0FYWBP9qLv+lzeQAYXw+3ySfxyZqkw==" + "version": "4.17.8", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.8.tgz", + "integrity": "sha512-I9mjAxengFAleSThFhhAhvba6fsO0hunb9/0sQ6qQihSZsJRBofv2rYH58WXaOb/O++eUmYpCLywSQ22GfU+sA==" }, "lodash.assign": { "version": "4.2.0", @@ -9955,10 +10406,10 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "lodash.get": { @@ -10141,9 +10592,9 @@ "dev": true }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -10170,9 +10621,9 @@ "dev": true }, "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", "dev": true, "requires": { "pify": "3.0.0" @@ -10215,14 +10666,14 @@ "dev": true, "requires": { "byline": "4.2.2", - "marked": "0.3.12", + "marked": "0.3.19", "underscore": "1.8.3" } }, "marked": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz", - "integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", "dev": true }, "matcher-collection": { @@ -10372,7 +10823,7 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", "cloneable-readable": "1.1.2", @@ -10388,7 +10839,7 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.6", + "errno": "0.1.7", "readable-stream": "2.3.5" }, "dependencies": { @@ -10520,13 +10971,13 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" }, "dependencies": { "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { "core-util-is": "1.0.2", @@ -10578,16 +11029,16 @@ "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "mimic-fn": { @@ -10656,7 +11107,7 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.0", + "concat-stream": "1.6.2", "duplexify": "3.5.4", "end-of-stream": "1.4.1", "flush-write-stream": "1.0.3", @@ -10740,16 +11191,16 @@ "integrity": "sha1-bQUVYRyKjITkhKogABKbmOmB/ws=" }, "moment": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", - "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.0.tgz", + "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" }, "moment-timezone": { "version": "0.5.14", "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz", "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", "requires": { - "moment": "2.20.1" + "moment": "2.22.0" } }, "move-concurrently": { @@ -10839,33 +11290,38 @@ } } }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", - "dev": true - }, "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 }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } - }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true }, + "nearley": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", + "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", + "dev": true, + "requires": { + "nomnom": "1.6.2", + "railroad-diagrams": "1.0.0", + "randexp": "0.4.6", + "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==", + "dev": true + } + } + }, "neo-async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", @@ -10884,9 +11340,9 @@ "dev": true }, "nise": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.5.tgz", - "integrity": "sha512-Es4hGuq3lpip5PckrB+Qpuma282M0UJANJ+jxAgI+0wWTL9X6MtNv+M385JgqsAE8hv6NvD3lv8CQtXgEnvlpQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.2.tgz", + "integrity": "sha512-KPKb+wvETBiwb4eTwtR/OsA2+iijXP+VnlSFYJo3EHjm2yjek1NWxHOUQat3i7xNLm1Bm18UA5j5Wor0yO2GtA==", "dev": true, "requires": { "@sinonjs/formatio": "2.0.0", @@ -10935,7 +11391,7 @@ "mkdirp": "0.5.1", "nopt": "3.0.6", "npmlog": "2.0.4", - "osenv": "0.1.4", + "osenv": "0.1.5", "request": "2.80.0", "rimraf": "2.6.2", "semver": "5.3.0", @@ -11015,7 +11471,7 @@ "mkdirp": "0.5.1", "nopt": "3.0.6", "npmlog": "2.0.4", - "osenv": "0.1.4", + "osenv": "0.1.5", "path-array": "1.0.1", "request": "2.80.0", "rimraf": "2.6.2", @@ -11054,9 +11510,9 @@ } }, "node-sass": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.8.3.tgz", + "integrity": "sha512-tfFWhUsCk/Y19zarDcPo5xpj+IW3qCfOjVdHtYeG6S1CKbQOh1zqylnQK6cV3z9k80yxAnFX9Y+a9+XysDhhfg==", "dev": true, "requires": { "async-foreach": "0.1.3", @@ -11071,7 +11527,7 @@ "lodash.mergewith": "4.6.1", "meow": "3.7.0", "mkdirp": "0.5.1", - "nan": "2.4.0", + "nan": "2.10.0", "node-gyp": "3.6.2", "npmlog": "4.1.2", "request": "2.79.0", @@ -11092,7 +11548,7 @@ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "which": "1.3.0" } }, @@ -11133,6 +11589,12 @@ "number-is-nan": "1.0.1" } }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -11164,11 +11626,11 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "qs": "6.3.2", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3", "uuid": "3.2.1" } @@ -11187,42 +11649,25 @@ } }, "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", "dev": true, "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" + "colors": "0.5.1", + "underscore": "1.4.4" }, "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", "dev": true }, "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", "dev": true } } @@ -11256,10 +11701,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -11318,6 +11763,15 @@ "gauge": "1.2.7" } }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -11330,9 +11784,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", "dev": true }, "oauth-sign": { @@ -11419,8 +11873,27 @@ "property-is-enumerable-x": "1.1.0", "to-object-x": "1.5.0", "to-property-key-x": "2.0.2" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + } } }, + "object-inspect": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", + "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", @@ -11433,14 +11906,30 @@ "dev": true, "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" + } + }, + "object.entries": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", + "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1", + "has": "1.0.1" } }, "object.getownpropertydescriptors": { @@ -11450,7 +11939,7 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "es-abstract": "1.11.0" } }, "object.omit": { @@ -11470,14 +11959,18 @@ "dev": true, "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1", + "has": "1.0.1" } }, "oboe": { @@ -11611,18 +12104,18 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { "os-homedir": "1.0.2", "os-tmpdir": "1.0.2" } }, "p-cancelable": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.0.tgz", - "integrity": "sha512-/AodqPe1y/GYbhSlnMjxukLGQfQIgsmjSy2CXCNB96kg4ozKvmlovuHEKICToOO/yS3LLWgrWI1dFtFfrePS1g==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true }, "p-each-series": { @@ -11791,10 +12284,13 @@ "dev": true }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "9.6.2" + } }, "pascalcase": { "version": "0.1.1", @@ -12127,8 +12623,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000808", - "electron-to-chromium": "1.3.33" + "caniuse-db": "1.0.30000823", + "electron-to-chromium": "1.3.42" } } } @@ -12190,38 +12686,38 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.17" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { - "chalk": "2.3.1", + "chalk": "2.3.2", "source-map": "0.6.1", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "source-map": { @@ -12231,9 +12727,9 @@ "dev": true }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -12248,38 +12744,38 @@ "dev": true, "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.17" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { - "chalk": "2.3.1", + "chalk": "2.3.2", "source-map": "0.6.1", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "source-map": { @@ -12289,9 +12785,9 @@ "dev": true }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -12306,38 +12802,38 @@ "dev": true, "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.17" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { - "chalk": "2.3.1", + "chalk": "2.3.2", "source-map": "0.6.1", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "source-map": { @@ -12347,9 +12843,9 @@ "dev": true }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -12364,38 +12860,38 @@ "dev": true, "requires": { "icss-replace-symbols": "1.1.0", - "postcss": "6.0.17" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { - "chalk": "2.3.1", + "chalk": "2.3.2", "source-map": "0.6.1", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "source-map": { @@ -12405,9 +12901,9 @@ "dev": true }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -12588,13 +13084,13 @@ "dev": true }, "pretty-format": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.1.0.tgz", - "integrity": "sha512-0HHR5hCmjDGU4sez3w5zRDAAwn7V0vT4SgPiYPZ1XDm5sT3Icb+Bh+fsOP3+Y3UwPjMr7TbRj+L7eQyMkPAxAw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", "dev": true, "requires": { "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" + "ansi-styles": "3.2.1" }, "dependencies": { "ansi-regex": { @@ -12604,9 +13100,9 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" @@ -12783,6 +13279,39 @@ "underscore.string": "3.3.4" } }, + "raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "dev": true, + "requires": { + "performance-now": "2.1.0" + }, + "dependencies": { + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + } + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "0.1.15" + } + }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", @@ -12855,20 +13384,20 @@ } }, "react": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz", - "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.1.tgz", + "integrity": "sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", "object-assign": "4.1.1", - "prop-types": "15.6.0" + "prop-types": "15.6.1" }, "dependencies": { "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", @@ -12878,20 +13407,20 @@ } }, "react-dom": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.2.0.tgz", - "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.1.tgz", + "integrity": "sha512-2Infg89vzahq8nfVi1GkjPqq0vrBvf0f3T0+dTtyjq4f6HKOqKixAK25Vr593O3QTx4kw/vmUtAJwerlevNWOA==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", "object-assign": "4.1.1", - "prop-types": "15.6.0" + "prop-types": "15.6.1" }, "dependencies": { "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "requires": { "fbjs": "0.8.16", "loose-envify": "1.3.1", @@ -12900,6 +13429,12 @@ } } }, + "react-is": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.3.1.tgz", + "integrity": "sha512-3XpazGqS5DEOLiuR6JQ2Sg6URq/33d1BHJVaUvtMz579KRhd2D0pqabNEe5czv785yzKBPZimOf0UNIXa3jw1A==", + "dev": true + }, "react-native-web": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.1.11.tgz", @@ -12931,17 +13466,54 @@ } } }, + "react-reconciler": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz", + "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.1" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } + } + }, "react-redux": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", - "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", + "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", "requires": { - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", + "hoist-non-react-statics": "2.5.0", + "invariant": "2.2.4", "lodash": "4.17.5", - "lodash-es": "4.17.5", + "lodash-es": "4.17.8", "loose-envify": "1.3.1", - "prop-types": "15.5.10" + "prop-types": "15.6.1" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } } }, "react-remarkable": { @@ -12958,8 +13530,8 @@ "integrity": "sha512-DY6pjwRhdARE4TDw7XjxjZsbx9lKmIcyZoZ+SDO7SBJ1KUeWNxT22Kara2AC7u6/c2SYEHlEDLnzBCcNhLE8Vg==", "requires": { "history": "4.7.2", - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", + "hoist-non-react-statics": "2.5.0", + "invariant": "2.2.4", "loose-envify": "1.3.1", "path-to-regexp": "1.7.0", "prop-types": "15.5.10", @@ -12972,13 +13544,38 @@ "integrity": "sha512-cHMFC1ZoLDfEaMFoKTjN7fry/oczMgRt5BKfMAkTu5zEuJvUiPp1J8d0eXSVTnBh6pxlbdqDhozunOOLtmKfPA==", "requires": { "history": "4.7.2", - "invariant": "2.2.2", + "invariant": "2.2.4", "loose-envify": "1.3.1", "prop-types": "15.5.10", "react-router": "4.2.0", "warning": "3.0.0" } }, + "react-test-renderer": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.3.1.tgz", + "integrity": "sha512-emEcIPUowMjT5EQ+rrb0FAwVCzuJ+LKDweoYDh073v2/jHxrBDPUk8nzI5dofG3R+140+Bb9TMcT2Ez5OP6pQw==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "object-assign": "4.1.1", + "prop-types": "15.6.1", + "react-is": "16.3.1" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } + } + }, "react-timer-mixin": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz", @@ -13025,7 +13622,7 @@ "requires": { "debuglog": "1.0.1", "graceful-fs": "4.1.11", - "read-package-json": "2.0.12", + "read-package-json": "2.0.13", "readdir-scoped-modules": "1.0.2", "semver": "5.3.0", "slide": "1.1.6", @@ -13033,14 +13630,14 @@ } }, "read-package-json": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.12.tgz", - "integrity": "sha512-m7/I0+tP6D34EVvSlzCtuVA4D/dHL6OpLcn2e4XVP5X57pCKGUy1JjRSBVKHWpB+vUU91sL85h84qX0MdXzBSw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", + "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", "dev": true, "requires": { "glob": "7.1.2", "graceful-fs": "4.1.11", - "json-parse-better-errors": "1.0.1", + "json-parse-better-errors": "1.0.2", "normalize-package-data": "2.4.0", "slash": "1.0.0" } @@ -13170,7 +13767,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "1.6.0" } }, "redent": { @@ -13225,7 +13822,7 @@ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", "requires": { "lodash": "4.17.5", - "lodash-es": "4.17.5", + "lodash-es": "4.17.8", "loose-envify": "1.3.1", "symbol-observable": "1.2.0" }, @@ -13281,6 +13878,12 @@ "safe-regex": "1.1.0" } }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -13377,12 +13980,12 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "0.2.0", "qs": "6.3.2", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3", "uuid": "3.2.1" } @@ -13404,7 +14007,7 @@ "requires": { "request-promise-core": "1.1.1", "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" + "tough-cookie": "2.3.4" } }, "require-coercible-to-string-x": { @@ -13464,9 +14067,9 @@ } }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", + "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", "requires": { "path-parse": "1.0.5" } @@ -13574,6 +14177,16 @@ "source-map-support": "0.4.18" } }, + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "4.4.0", + "nearley": "2.13.0" + } + }, "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", @@ -13646,19 +14259,271 @@ "dev": true }, "sane": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sane/-/sane-2.4.1.tgz", - "integrity": "sha512-fW9svvNd81XzHDZyis9/tEY1bZikDGryy8Hi1BErPyNPYv47CdLseUN+tI5FBHWXEENRtj1SWtX/jBnggLaP0w==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.0.tgz", + "integrity": "sha512-glfKd7YH4UCrh/7dD+UESsr8ylKWRE7UQPoXuz28FgmcF0ViJQhCTCCZHICRKxf8G8O1KdLEn20dcICK54c7ew==", "dev": true, "requires": { - "anymatch": "1.3.2", + "anymatch": "2.0.0", "exec-sh": "0.2.1", "fb-watchman": "2.0.0", "fsevents": "1.1.3", - "minimatch": "3.0.4", + "micromatch": "3.1.10", "minimist": "1.2.0", "walker": "1.0.7", "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=", + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.4", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.1" + } + }, + "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.1.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==", + "dev": true + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.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.1" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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 + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } } }, "sanitize-filename": { @@ -13845,27 +14710,16 @@ } }, "sass-loader": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", - "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", + "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", "dev": true, "requires": { - "async": "2.6.0", - "clone-deep": "0.3.0", + "clone-deep": "2.0.2", "loader-utils": "1.1.0", "lodash.tail": "4.1.1", + "neo-async": "2.5.0", "pify": "3.0.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.5" - } - } } }, "sax": { @@ -13976,30 +14830,20 @@ } }, "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", + "kind-of": "5.1.0", "mixin-object": "2.0.1" }, "dependencies": { "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "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 } } @@ -14063,24 +14907,24 @@ "integrity": "sha512-3GoUxxnGznTByzfHWroolVvRQ9/OXISUKjJYcBioLRDnGX7oJSkepxmvUyBIBDZaU1WoWMEIa9WxCo/tz96bEQ==" }, "sinon": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.3.0.tgz", - "integrity": "sha512-pmf05hFgEZUS52AGJcsVjOjqAyJW2yo14cOwVYvzCyw7+inv06YXkLyW75WG6X6p951lzkoKh51L2sNbR9CDvw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", + "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", "dev": true, "requires": { "@sinonjs/formatio": "2.0.0", - "diff": "3.4.0", + "diff": "3.5.0", "lodash.get": "4.4.2", "lolex": "2.3.2", - "nise": "1.2.5", - "supports-color": "5.2.0", + "nise": "1.3.2", + "supports-color": "5.3.0", "type-detect": "4.0.8" }, "dependencies": { "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -14089,38 +14933,14 @@ } }, "sinon-chrome": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sinon-chrome/-/sinon-chrome-2.2.4.tgz", - "integrity": "sha1-0e6weYECML2oNg/69kWAI8Jl0JY=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sinon-chrome/-/sinon-chrome-2.3.1.tgz", + "integrity": "sha1-QBOPS21aEPIR9frwhs2eiHkzhCY=", "dev": true, "requires": { "lodash": "4.17.5", - "sinon": "2.4.1", + "sinon": "4.5.0", "urijs": "1.19.1" - }, - "dependencies": { - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - }, - "sinon": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", - "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", - "dev": true, - "requires": { - "diff": "3.4.0", - "formatio": "1.2.0", - "lolex": "1.6.0", - "native-promise-only": "0.8.1", - "path-to-regexp": "1.7.0", - "samsam": "1.3.0", - "text-encoding": "0.6.4", - "type-detect": "4.0.8" - } - } } }, "slash": { @@ -14255,12 +15075,6 @@ "requires": { "is-descriptor": "1.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -14346,6 +15160,20 @@ "requires": { "spdx-exceptions": "1.0.5", "spdx-license-ids": "1.2.2" + }, + "dependencies": { + "spdx-exceptions": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", + "integrity": "sha1-nSGsTaS9tx0GD7dOWmdTHQMsu6Y=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + } } }, "spdx-compare": { @@ -14356,33 +15184,46 @@ "requires": { "spdx-expression-parse": "1.0.4", "spdx-ranges": "1.0.1" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + } } }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, "spdx-exceptions": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", - "integrity": "sha1-nSGsTaS9tx0GD7dOWmdTHQMsu6Y=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "spdx-ranges": { @@ -14399,6 +15240,14 @@ "requires": { "spdx-compare": "0.1.2", "spdx-expression-parse": "1.0.4" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + } } }, "split-string": { @@ -15133,9 +15982,9 @@ } }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -15253,13 +16102,13 @@ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", "dev": true, "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" }, "dependencies": { "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { "core-util-is": "1.0.2", @@ -15511,12 +16360,12 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "svg-url-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svg-url-loader/-/svg-url-loader-2.3.1.tgz", - "integrity": "sha1-KH7TEf/+SbhTzTuur8pWP6gDu/c=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/svg-url-loader/-/svg-url-loader-2.3.2.tgz", + "integrity": "sha1-3YaybBn+O5FPBOoQ7zlZTq3gRGQ=", "dev": true, "requires": { - "file-loader": "1.1.6", + "file-loader": "1.1.11", "loader-utils": "1.1.0" } }, @@ -15594,36 +16443,36 @@ "requires": { "ajv": "5.5.2", "ajv-keywords": "2.1.1", - "chalk": "2.3.1", + "chalk": "2.3.2", "lodash": "4.17.5", "slice-ansi": "1.0.0", "string-width": "2.1.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -15688,48 +16537,211 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + } + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "test-exclude": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "3.1.10", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.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=", + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.4", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "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.6" + } + }, + "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.1" + } + }, + "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.1.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==", + "dev": true + } + } + }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.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.1" + } + } } - } - } - }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "test-exclude": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.0.tgz", - "integrity": "sha512-8hMFzjxbPv6xSlwGhXSvOMJ/vTy3bkng+2pxmf6E1z6VF7I9nIyNfvHtaw+NBPgvz647gADBbMSbwLfZYppT/w==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" - }, - "dependencies": { + }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -15740,6 +16752,72 @@ "pinkie-promise": "2.0.1" } }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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 + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -15753,6 +16831,27 @@ "strip-bom": "2.0.0" } }, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -15980,6 +17079,13 @@ "is-symbol": "1.0.1", "require-object-coercible-x": "1.4.3", "validate.io-undefined": "1.0.3" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + } } }, "to-property-key-x": { @@ -16054,9 +17160,9 @@ } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" } @@ -16147,9 +17253,9 @@ } }, "treeify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.0.1.tgz", - "integrity": "sha1-abPNAiAioWhCTnz6HO1EyTnT6y8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "dev": true }, "trim-left-x": { @@ -16326,7 +17432,7 @@ "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1", "uri-js": "3.0.2" @@ -16372,12 +17478,6 @@ } } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "underscore": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", @@ -16530,12 +17630,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -16738,13 +17832,13 @@ "dev": true }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "validate.io-undefined": { @@ -16916,12 +18010,12 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.4.1.tgz", - "integrity": "sha512-iLUJcsEAjaPKWbB32ADr29Pg9fPUVfFEMPK4VXyZGftzhSEFg2BLjHLoBYZ14wdTEA8xqG/hjpuX8qOmabRYvw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.5.0.tgz", + "integrity": "sha512-6GrZsvQJnG7o7mjbfjp6s5CyMfdopjt1A/X8LcYwceis9ySjqBX6Lusso2wNZ06utHj2ZvfL6L3f7hfgVeJP6g==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "acorn-dynamic-import": "3.0.0", "ajv": "6.4.0", "ajv-keywords": "3.1.0", @@ -16948,7 +18042,7 @@ "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1", "uri-js": "3.0.2" @@ -17183,12 +18277,6 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -17237,12 +18325,29 @@ "jscodeshift": "0.4.1" }, "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, "ast-types": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", "dev": true }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", @@ -17262,7 +18367,7 @@ "babel-register": "6.26.0", "babylon": "6.18.0", "colors": "1.1.2", - "flow-parser": "0.68.0", + "flow-parser": "0.69.0", "lodash": "4.17.5", "micromatch": "2.3.11", "node-dir": "0.1.8", @@ -17272,6 +18377,16 @@ "write-file-atomic": "1.3.4" } }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + } + }, "recast": { "version": "0.12.9", "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", @@ -17279,7 +18394,7 @@ "dev": true, "requires": { "ast-types": "0.10.1", - "core-js": "2.5.3", + "core-js": "2.5.4", "esprima": "4.0.0", "private": "0.1.8", "source-map": "0.6.1" @@ -17291,6 +18406,18 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, "write-file-atomic": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", @@ -17333,7 +18460,7 @@ "v8-compile-cache": "1.1.2", "webpack-addons": "1.1.5", "yargs": "11.0.0", - "yeoman-environment": "2.0.5", + "yeoman-environment": "2.0.6", "yeoman-generator": "2.0.3" }, "dependencies": { @@ -17393,23 +18520,17 @@ "which": "1.3.0" } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, "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", + "ansi-escapes": "3.1.0", "chalk": "2.3.2", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.1.0", + "external-editor": "2.2.0", "figures": "2.0.0", "lodash": "4.17.5", "mute-stream": "0.0.7", @@ -17532,9 +18653,15 @@ } }, "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "dev": true }, "whatwg-url": { "version": "6.4.0", @@ -17624,17 +18751,6 @@ "dev": true, "requires": { "errno": "0.1.7" - }, - "dependencies": { - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "1.0.1" - } - } } }, "workerpool": { @@ -17718,14 +18834,13 @@ } }, "ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", - "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "dev": true, "requires": { "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "safe-buffer": "5.1.1" } }, "xhr2": { @@ -17733,12 +18848,6 @@ "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -17802,14 +18911,14 @@ } }, "yeoman-environment": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.5.tgz", - "integrity": "sha512-6/W7/B54OPHJXob0n0+pmkwFsirC8cokuQkPSmT/D0lCcSxkKtg/BA6ZnjUBIwjuGqmw3DTrT4en++htaUju5g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", + "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", "dev": true, "requires": { "chalk": "2.3.2", "debug": "3.1.0", - "diff": "3.4.0", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", "globby": "6.1.0", "grouped-queue": "0.3.3", @@ -17906,7 +19015,7 @@ "github-username": "4.1.0", "istextorbinary": "2.1.0", "lodash": "4.17.5", - "make-dir": "1.1.0", + "make-dir": "1.2.0", "mem-fs-editor": "3.0.2", "minimist": "1.2.0", "pretty-bytes": "4.0.2", @@ -17917,7 +19026,7 @@ "shelljs": "0.8.1", "text-table": "0.2.0", "through2": "2.0.3", - "yeoman-environment": "2.0.5" + "yeoman-environment": "2.0.6" }, "dependencies": { "ansi-styles": { @@ -17983,7 +19092,7 @@ "dev": true, "requires": { "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "json-parse-better-errors": "1.0.2" } }, "path-type": { diff --git a/package.json b/package.json index f8bac5481..fc3d3d8ff 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,8 @@ "clean-webpack-plugin": "^0.1.16", "cross-env": "^5.1.3", "css-loader": "^0.28.7", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", "eslint": "^4.17.0", "eslint-config-airbnb": "^16.1.0", "eslint-plugin-import": "^2.8.0", @@ -88,6 +90,7 @@ "node-sass": "^4.5.3", "oboe": "^2.1.3", "path": "^0.12.7", + "react-test-renderer": "^16.2.0", "read-file": "^0.2.0", "sass-loader": "^6.0.6", "sinon": "^4.2.2", diff --git a/src/classes/Policy.js b/src/classes/Policy.js index d5213e830..4dfd344e0 100644 --- a/src/classes/Policy.js +++ b/src/classes/Policy.js @@ -22,8 +22,8 @@ import globals from './Globals'; /** * Enum for reasons returned by shouldBlock - * @type {string} * TBD: See if we can do with integer values for performance. + * @type {string} */ export const BLOCK_REASON_BLOCK_PAUSED = 'BLOCK_REASON_BLOCK_PAUSED'; export const BLOCK_REASON_GLOBAL_BLOCKED = 'BLOCK_REASON_GLOBAL_BLOCKED'; @@ -36,7 +36,7 @@ export const BLOCK_REASON_C2P_ALLOWED_THROUGH = 'BLOCK_REASON_C2P_ALLOWED_THROUG /** * Class for handling site policy. - * @memberOf BackgroundClasses + * @memberof BackgroundClasses * @todo make it a Singelton ??? */ class Policy { @@ -155,4 +155,3 @@ class Policy { } export default Policy; - diff --git a/test/setup.js b/test/setup.js index 81935f914..fb3a6f56d 100644 --- a/test/setup.js +++ b/test/setup.js @@ -11,9 +11,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -//Set stubs for all chrome.* methods and properties +// Set stubs for all chrome.* methods and properties import chrome from 'sinon-chrome'; +// Set up Enzyme for React Snapshot testing +import Enzyme from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; +Enzyme.configure({ adapter: new Adapter() }); + // Create global stubs global.chrome = chrome; chrome.runtime.getManifest.returns({