From b914102c37fa8deba7ed5bb8b08185c536e82d48 Mon Sep 17 00:00:00 2001 From: Snuupy Date: Thu, 9 Aug 2018 22:08:09 -0700 Subject: [PATCH] add cosmetic filter feature --- app/actions/cosmeticFilterActions.ts | 27 + app/actions/webNavigationActions.ts | 9 + .../actions/cosmeticFilterActions.ts | 8 + app/background/api/cosmeticFilterAPI.ts | 36 + app/background/events.ts | 1 + app/background/events/cosmeticFilterEvents.ts | 70 + app/background/events/webNavigationEvents.ts | 5 + app/background/reducers.ts | 4 +- .../reducers/cosmeticFilterReducer.ts | 153 ++ app/constants/cosmeticFilterTypes.ts | 8 + app/constants/webNavigationTypes.ts | 1 + app/content.ts | 15 + app/manifest.dev.json | 15 +- app/manifest.prod.json | 15 +- app/types/actions/cosmeticFilterActions.ts | 37 + app/types/actions/index.ts | 4 +- app/types/actions/webNavigationActions.ts | 14 +- app/types/adblock/adblockTypes.ts | 8 + app/types/constants/cosmeticFilterTypes.ts | 10 + app/types/constants/webNavigationTypes.ts | 1 + app/types/global/chrome.d.ts | 7 +- package-lock.json | 1602 +++++++++-------- package.json | 5 +- test/app/actions/cosmeticFilterActionsTest.ts | 34 + test/app/actions/webNavigationActionsTest.ts | 12 + .../background/api/cosmeticFilterAPITest.ts | 223 +++ test/app/background/api/shieldsAPITest.ts | 12 +- test/app/background/api/tabsAPITest.ts | 4 +- .../reducers/cosmeticFilterReducerTest.ts | 473 +++++ .../reducers/shieldsPanelReducerTest.ts | 20 +- test/app/background/reducersTest.ts | 8 +- test/app/background/storeTest.ts | 2 +- test/app/state/shieldsPanelStateTest.ts | 2 +- test/testData.ts | 25 +- webpack/dev.config.js | 4 +- webpack/prod.config.js | 7 +- 36 files changed, 2137 insertions(+), 744 deletions(-) create mode 100644 app/actions/cosmeticFilterActions.ts create mode 100644 app/background/actions/cosmeticFilterActions.ts create mode 100644 app/background/api/cosmeticFilterAPI.ts create mode 100644 app/background/events/cosmeticFilterEvents.ts create mode 100644 app/background/reducers/cosmeticFilterReducer.ts create mode 100644 app/constants/cosmeticFilterTypes.ts create mode 100644 app/content.ts create mode 100644 app/types/actions/cosmeticFilterActions.ts create mode 100644 app/types/adblock/adblockTypes.ts create mode 100644 app/types/constants/cosmeticFilterTypes.ts create mode 100644 test/app/actions/cosmeticFilterActionsTest.ts create mode 100644 test/app/background/api/cosmeticFilterAPITest.ts create mode 100644 test/app/background/reducers/cosmeticFilterReducerTest.ts diff --git a/app/actions/cosmeticFilterActions.ts b/app/actions/cosmeticFilterActions.ts new file mode 100644 index 000000000000..0fcc614174fd --- /dev/null +++ b/app/actions/cosmeticFilterActions.ts @@ -0,0 +1,27 @@ +/* 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 * as types from '../constants/cosmeticFilterTypes' +import * as actions from '../types/actions/cosmeticFilterActions' + +export const siteCosmeticFilterAdded: actions.SiteCosmeticFilterAdded = (origin: string, cssfilter: string) => { + return { + type: types.SITE_COSMETIC_FILTER_ADDED, + origin, + cssfilter + } +} + +export const siteCosmeticFilterRemoved: actions.SiteCosmeticFilterRemoved = (origin: string) => { + return { + type: types.SITE_COSMETIC_FILTER_REMOVED, + origin + } +} + +export const allCosmeticFiltersRemoved: actions.AllCosmeticFiltersRemoved = () => { + return { + type: types.ALL_COSMETIC_FILTERS_REMOVED + } +} diff --git a/app/actions/webNavigationActions.ts b/app/actions/webNavigationActions.ts index 33d8596d37a4..9a9c2f5c6083 100644 --- a/app/actions/webNavigationActions.ts +++ b/app/actions/webNavigationActions.ts @@ -13,3 +13,12 @@ export const onBeforeNavigate: actions.OnBeforeNavigate = (tabId, url, isMainFra isMainFrame } } + +export const onCommitted: actions.OnCommitted = (tabId, url, isMainFrame) => { + return { + type: types.ON_COMMITTED, + tabId, + url, + isMainFrame + } +} diff --git a/app/background/actions/cosmeticFilterActions.ts b/app/background/actions/cosmeticFilterActions.ts new file mode 100644 index 000000000000..fdc3931c7ad5 --- /dev/null +++ b/app/background/actions/cosmeticFilterActions.ts @@ -0,0 +1,8 @@ +/* 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 { bindActionCreators } from 'redux' +import store from '../store' +import * as cosmeticFilterActions from '../../actions/cosmeticFilterActions' +export default bindActionCreators(cosmeticFilterActions, store.dispatch) diff --git a/app/background/api/cosmeticFilterAPI.ts b/app/background/api/cosmeticFilterAPI.ts new file mode 100644 index 000000000000..3ba7d2cc3ec5 --- /dev/null +++ b/app/background/api/cosmeticFilterAPI.ts @@ -0,0 +1,36 @@ +export const addSiteCosmeticFilter = async (origin: string, cssfilter: string) => { + chrome.storage.local.get('cosmeticFilterList', (storeData = {}) => { + let storeList = Object.assign({}, storeData.cosmeticFilterList) + if (storeList[origin] === undefined || storeList[origin].length === 0) { // nothing in filter list for origin + storeList[origin] = [cssfilter] + } else { // add entry + storeList[origin].push(cssfilter) + } + chrome.storage.local.set({ 'cosmeticFilterList': storeList }) + }) +} + +export const removeSiteFilter = (origin: string) => { + chrome.storage.local.get('cosmeticFilterList', (storeData = {}) => { + let storeList = Object.assign({}, storeData.cosmeticFilterList) + delete storeList[origin] + chrome.storage.local.set({ 'cosmeticFilterList': storeList }) + }) +} + +export const applySiteFilters = (hostname: string) => { + chrome.storage.local.get('cosmeticFilterList', (storeData = {}) => { + if (storeData.cosmeticFilterList[hostname] !== undefined) { + storeData.cosmeticFilterList[hostname].map((rule: string) => { + console.log('applying rule', rule) + chrome.tabs.insertCSS({ + code: `${rule} {display: none;}` + }) + }) + } + }) +} + +export const removeAllFilters = () => { + chrome.storage.local.set({ 'cosmeticFilterList': {} }) +} diff --git a/app/background/events.ts b/app/background/events.ts index e70d5379f971..8eecb4b6cd73 100644 --- a/app/background/events.ts +++ b/app/background/events.ts @@ -7,3 +7,4 @@ require('./events/tabsEvents') require('./events/shieldsEvents') require('./events/runtimeEvents') require('./events/webNavigationEvents') +require('./events/cosmeticFilterEvents') diff --git a/app/background/events/cosmeticFilterEvents.ts b/app/background/events/cosmeticFilterEvents.ts new file mode 100644 index 000000000000..f8bd21340923 --- /dev/null +++ b/app/background/events/cosmeticFilterEvents.ts @@ -0,0 +1,70 @@ +import cosmeticFilterActions from '../actions/cosmeticFilterActions' + +let rule = { + host: '', + selector: '' +} + +// add context menu +chrome.runtime.onInstalled.addListener(function () { + // parent menu + chrome.contextMenus.create({ + title: 'Brave', + id: 'brave', + contexts: ['all'] + }) + // block ad child menu + chrome.contextMenus.create({ + title: 'Block element via selector', + id: 'addBlockElement', + parentId: 'brave', + contexts: ['all'] + }) + chrome.contextMenus.create({ + title: 'Clear CSS rules for this site', + id: 'resetSiteFilterSettings', + parentId: 'brave', + contexts: ['all'] + }) + chrome.contextMenus.create({ + title: 'Clear CSS rules for all sites', + id: 'resetAllFilterSettings', + parentId: 'brave', + contexts: ['all'] + }) +}) + +// contextMenu listener - when triggered, grab latest selector +chrome.contextMenus.onClicked.addListener(function (info, tab) { + switch (info.menuItemId) { + case 'addBlockElement': + { + rule.selector = window.prompt('CSS selector to block: ', `${rule.selector}`) || '' + chrome.tabs.insertCSS({ + code: `${rule.selector} {display: none;}` + }) + cosmeticFilterActions.siteCosmeticFilterAdded(rule.host, rule.selector) + break + } + case 'resetSiteFilterSettings': + { + cosmeticFilterActions.siteCosmeticFilterRemoved(rule.host) + break + } + case 'resetAllFilterSettings': + { + cosmeticFilterActions.allCosmeticFiltersRemoved() + break + } + default: { + console.warn('[cosmeticFilterEvents] invalid context menu option: ${info.menuItemId}') + } + } +}) + +// content script listener for right click DOM selection event +chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { + rule.host = msg.baseURI + rule.selector = msg.selector + sendResponse(rule) +}) diff --git a/app/background/events/webNavigationEvents.ts b/app/background/events/webNavigationEvents.ts index f7f64b6e7e1d..1ad613276789 100644 --- a/app/background/events/webNavigationEvents.ts +++ b/app/background/events/webNavigationEvents.ts @@ -8,3 +8,8 @@ chrome.webNavigation.onBeforeNavigate.addListener(function ({ tabId, url, frameI const isMainFrame: boolean = frameId === 0 actions.onBeforeNavigate(tabId, url, isMainFrame) }) + +chrome.webNavigation.onCommitted.addListener(function ({ tabId, url, frameId }: chrome.webNavigation.WebNavigationTransitionCallbackDetails) { + const isMainFrame: boolean = frameId === 0 + actions.onCommitted(tabId, url, isMainFrame) +}) diff --git a/app/background/reducers.ts b/app/background/reducers.ts index b175318dc903..26afa3387a85 100644 --- a/app/background/reducers.ts +++ b/app/background/reducers.ts @@ -5,7 +5,9 @@ import { combineReducers } from 'redux' import shieldsPanelReducer from './reducers/shieldsPanelReducer' +import cosmeticFilterReducer from './reducers/cosmeticFilterReducer' export default combineReducers({ - shieldsPanel: shieldsPanelReducer + shieldsPanel: shieldsPanelReducer, + cosmeticFilter: cosmeticFilterReducer }) diff --git a/app/background/reducers/cosmeticFilterReducer.ts b/app/background/reducers/cosmeticFilterReducer.ts new file mode 100644 index 000000000000..8bfd66e6f6a0 --- /dev/null +++ b/app/background/reducers/cosmeticFilterReducer.ts @@ -0,0 +1,153 @@ +// /* 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 * as shieldsPanelTypes from '../../constants/shieldsPanelTypes' +import * as windowTypes from '../../constants/windowTypes' +import * as tabTypes from '../../constants/tabTypes' +import * as webNavigationTypes from '../../constants/webNavigationTypes' +import { + setAllowBraveShields, + requestShieldPanelData +} from '../api/shieldsAPI' +import { reloadTab } from '../api/tabsAPI' +import * as shieldsPanelState from '../../state/shieldsPanelState' +import { State, Tab } from '../../types/state/shieldsPannelState' +import { Actions } from '../../types/actions/index' +import * as cosmeticFilterTypes from '../../constants/cosmeticFilterTypes' +import { + removeSiteFilter, + addSiteCosmeticFilter, + applySiteFilters, + removeAllFilters +} from '../api/cosmeticFilterAPI' + +const focusedWindowChanged = (state: State, windowId: number): State => { + if (windowId !== -1) { + state = shieldsPanelState.updateFocusedWindow(state, windowId) + if (shieldsPanelState.getActiveTabId(state)) { + requestShieldPanelData(shieldsPanelState.getActiveTabId(state)) + } else { + console.warn('no tab id so cannot request shield data from window focus change!') + } + } + return state +} + +const updateActiveTab = (state: State, windowId: number, tabId: number): State => { + requestShieldPanelData(tabId) + return shieldsPanelState.updateActiveTab(state, windowId, tabId) +} + +export default function cosmeticFilterReducer (state: State = { + tabs: {}, + windows: {}, + currentWindowId: -1 }, + action: Actions) { + switch (action.type) { + case webNavigationTypes.ON_BEFORE_NAVIGATION: + { + if (action.isMainFrame) { + state = shieldsPanelState.resetBlockingStats(state, action.tabId) + state = shieldsPanelState.resetNoScriptInfo(state, action.tabId, new window.URL(action.url).origin) + } + break + } + case webNavigationTypes.ON_COMMITTED: + { + const tabData: Tab = shieldsPanelState.getActiveTabData(state) + applySiteFilters(tabData.hostname) + break + } + case windowTypes.WINDOW_REMOVED: + { + state = shieldsPanelState.removeWindowInfo(state, action.windowId) + break + } + case windowTypes.WINDOW_CREATED: + { + if (action.window.focused || Object.keys(state.windows).length === 0) { + state = focusedWindowChanged(state, action.window.id) + } + break + } + case windowTypes.WINDOW_FOCUS_CHANGED: + { + state = focusedWindowChanged(state, action.windowId) + break + } + case tabTypes.ACTIVE_TAB_CHANGED: + { + const windowId: number = action.windowId + const tabId: number = action.tabId + state = updateActiveTab(state, windowId, tabId) + break + } + case tabTypes.TAB_DATA_CHANGED: + { + const tab: chrome.tabs.Tab = action.tab + if (tab.active && tab.id) { + state = updateActiveTab(state, tab.windowId, tab.id) + } + break + } + case tabTypes.TAB_CREATED: + { + const tab: chrome.tabs.Tab = action.tab + if (!tab) { + break + } + + if (tab.active && tab.id) { + state = updateActiveTab(state, tab.windowId, tab.id) + } + break + } + case shieldsPanelTypes.SHIELDS_PANEL_DATA_UPDATED: + { + state = shieldsPanelState.updateTabShieldsData(state, action.details.id, action.details) + break + } + case shieldsPanelTypes.SHIELDS_TOGGLED: + { + const tabId: number = shieldsPanelState.getActiveTabId(state) + const tabData: Tab = shieldsPanelState.getActiveTabData(state) + if (!tabData) { + break + } + setAllowBraveShields(tabData.origin, action.setting) + .then(() => { + reloadTab(tabId, true).catch((e) => { + console.error('Tab reload was not successful', e) + }) + requestShieldPanelData(shieldsPanelState.getActiveTabId(state)) + }) + .catch((e: any) => { + console.error('Could not set shields', e) + }) + state = shieldsPanelState + .updateTabShieldsData(state, tabId, { braveShields: action.setting }) + break + } + case cosmeticFilterTypes.SITE_COSMETIC_FILTER_REMOVED: + { + let url = action.origin + removeSiteFilter(url) + break + } + case cosmeticFilterTypes.ALL_COSMETIC_FILTERS_REMOVED: + { + removeAllFilters() + break + } + case cosmeticFilterTypes.SITE_COSMETIC_FILTER_ADDED: + { + addSiteCosmeticFilter(action.origin, action.cssfilter) + .catch((e) => { + console.error('Could not add filter:', e) + }) + break + } + } + return state +} diff --git a/app/constants/cosmeticFilterTypes.ts b/app/constants/cosmeticFilterTypes.ts new file mode 100644 index 000000000000..8c59659f341f --- /dev/null +++ b/app/constants/cosmeticFilterTypes.ts @@ -0,0 +1,8 @@ +/* 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/. */ + +export const SITE_COSMETIC_FILTER_REMOVED = 'SITE_COSMETIC_FILTER_REMOVED' +export const SITE_COSMETIC_FILTER_ADDED = 'SITE_COSMETIC_FILTER_ADDED' +export const LOGGED_STORAGE = 'LOGGED_STORAGE' +export const ALL_COSMETIC_FILTERS_REMOVED = 'ALL_COSMETIC_FILTERS_REMOVED' diff --git a/app/constants/webNavigationTypes.ts b/app/constants/webNavigationTypes.ts index b39875b9eece..17945a84b03f 100644 --- a/app/constants/webNavigationTypes.ts +++ b/app/constants/webNavigationTypes.ts @@ -3,3 +3,4 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */ export const ON_BEFORE_NAVIGATION = 'ON_BEFORE_NAVIGATION' +export const ON_COMMITTED = 'ON_COMMITTED' diff --git a/app/content.ts b/app/content.ts new file mode 100644 index 000000000000..c5d095b66c4e --- /dev/null +++ b/app/content.ts @@ -0,0 +1,15 @@ +const unique = require('unique-selector').default + +function getCurrentURL () { + return window.location.hostname +} + +document.addEventListener('contextmenu', (event) => { + let selector = unique(event.target) // this has to be done here, events can't be passed through the messaging API + let baseURI = getCurrentURL() + console.log(selector, baseURI) + chrome.runtime.sendMessage({ + selector: selector, + baseURI: baseURI + }) +}, true) diff --git a/app/manifest.dev.json b/app/manifest.dev.json index 96ce3e255a1a..e336bc814c54 100644 --- a/app/manifest.dev.json +++ b/app/manifest.dev.json @@ -18,7 +18,20 @@ "background": { "page": "background.html" }, - "permissions": [ "contentSettings", "management", "tabs", "storage", "webNavigation" ], + "content_scripts": [ + { + "matches": [ + "http://*/*", + "https://*/*" + ], + "js": [ + "js/content.bundle.js" + ], + "run_at": "document_start", + "all_frames": true + } + ], + "permissions": [ "contentSettings", "management", "tabs", "storage", "webNavigation", "contextMenus", "*://*/*" ], "content_security_policy": "default-src 'self'; script-src 'self' http://localhost:3000 https://localhost:3000 'unsafe-eval'; connect-src http://localhost:3000 https://localhost:3000; style-src * 'unsafe-inline' 'self' blob:; img-src 'self' data:;", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAupOLMy5Fd4dCSOtjcApsAQOnuBdTs+OvBVt/3P93noIrf068x0xXkvxbn+fpigcqfNamiJ5CjGyfx9zAIs7zcHwbxjOw0Uih4SllfgtK+svNTeE0r5atMWE0xR489BvsqNuPSxYJUmW28JqhaSZ4SabYrRx114KcU6ko7hkjyPkjQa3P+chStJjIKYgu5tWBiMJp5QVLelKoM+xkY6S7efvJ8AfajxCViLGyDQPDviGr2D0VvIBob0D1ZmAoTvYOWafcNCaqaejPDybFtuLFX3pZBqfyOCyyzGhucyCmfBXJALKbhjRAqN5glNsUmGhhPK87TuGATQfVuZtenMvXMQIDAQAB" } diff --git a/app/manifest.prod.json b/app/manifest.prod.json index 2fc22aa00ce8..7b543aa7f629 100644 --- a/app/manifest.prod.json +++ b/app/manifest.prod.json @@ -18,7 +18,20 @@ "background": { "page": "background.html" }, - "permissions": [ "contentSettings", "tabs", "storage", "webNavigation" ], + "content_scripts": [ + { + "matches": [ + "http://*/*", + "https://*/*" + ], + "js": [ + "js/content.bundle.js" + ], + "run_at": "document_start", + "all_frames": true + } + ], + "permissions": [ "contentSettings", "management", "tabs", "storage", "webNavigation", "contextMenus", "*://*/*" ], "content_security_policy": "default-src 'self'; script-src 'self'; style-src * 'unsafe-inline'; img-src 'self' data:;", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAupOLMy5Fd4dCSOtjcApsAQOnuBdTs+OvBVt/3P93noIrf068x0xXkvxbn+fpigcqfNamiJ5CjGyfx9zAIs7zcHwbxjOw0Uih4SllfgtK+svNTeE0r5atMWE0xR489BvsqNuPSxYJUmW28JqhaSZ4SabYrRx114KcU6ko7hkjyPkjQa3P+chStJjIKYgu5tWBiMJp5QVLelKoM+xkY6S7efvJ8AfajxCViLGyDQPDviGr2D0VvIBob0D1ZmAoTvYOWafcNCaqaejPDybFtuLFX3pZBqfyOCyyzGhucyCmfBXJALKbhjRAqN5glNsUmGhhPK87TuGATQfVuZtenMvXMQIDAQAB" } diff --git a/app/types/actions/cosmeticFilterActions.ts b/app/types/actions/cosmeticFilterActions.ts new file mode 100644 index 000000000000..69371fe5f5ae --- /dev/null +++ b/app/types/actions/cosmeticFilterActions.ts @@ -0,0 +1,37 @@ +/* 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 * as types from '../constants/cosmeticFilterTypes' + +interface SiteCosmeticFilterAddedReturn { + type: types.SITE_COSMETIC_FILTER_ADDED, + origin: string, + cssfilter: string +} + +export interface SiteCosmeticFilterAdded { + (origin: string, cssfilter: string): SiteCosmeticFilterAddedReturn +} + +interface SiteCosmeticFilterRemovedReturn { + type: types.SITE_COSMETIC_FILTER_REMOVED, + origin: string +} + +export interface SiteCosmeticFilterRemoved { + (origin: string): SiteCosmeticFilterRemovedReturn +} + +interface AllCosmeticFiltersRemovedReturn { + type: types.ALL_COSMETIC_FILTERS_REMOVED +} + +export interface AllCosmeticFiltersRemoved { + (): AllCosmeticFiltersRemovedReturn +} + +export type cosmeticFilterActions = + SiteCosmeticFilterRemovedReturn | + SiteCosmeticFilterAddedReturn | + AllCosmeticFiltersRemovedReturn diff --git a/app/types/actions/index.ts b/app/types/actions/index.ts index e34c62217a2b..62d952ea99a5 100644 --- a/app/types/actions/index.ts +++ b/app/types/actions/index.ts @@ -2,9 +2,11 @@ import { shieldPanelActions } from './shieldsPanelActions' import { tabActions } from './tabActions' import { webNavigationActions } from './webNavigationActions' import { windowActions } from './windowActions' +import { cosmeticFilterActions } from './cosmeticFilterActions' export type Actions = shieldPanelActions | tabActions | webNavigationActions | - windowActions + windowActions | + cosmeticFilterActions diff --git a/app/types/actions/webNavigationActions.ts b/app/types/actions/webNavigationActions.ts index f2e3c12efd74..1e9739b36885 100644 --- a/app/types/actions/webNavigationActions.ts +++ b/app/types/actions/webNavigationActions.ts @@ -15,5 +15,17 @@ export interface OnBeforeNavigate { (tabId: number, url: string, isMainFrame: boolean): OnBeforeNavigateReturn } +interface OnCommittedReturn { + type: types.ON_COMMITTED, + tabId: number, + url: string, + isMainFrame: boolean +} + +export interface OnCommitted { + (tabId: number, url: string, isMainFrame: boolean): OnCommittedReturn +} + export type webNavigationActions = - OnBeforeNavigateReturn + OnBeforeNavigateReturn | + OnCommittedReturn diff --git a/app/types/adblock/adblockTypes.ts b/app/types/adblock/adblockTypes.ts new file mode 100644 index 000000000000..3503d66c956e --- /dev/null +++ b/app/types/adblock/adblockTypes.ts @@ -0,0 +1,8 @@ +/* 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/. */ + +export type BlockTypes = 'ads' | 'trackers' | 'httpUpgradableResources' | 'javascript' | 'fingerprinting' +export type BlockOptions = 'allow' | 'block' +export type BlockFPOptions = 'allow' | 'block' | 'block_third_party' +export type BlockCookiesOptions = 'allow' | 'block' | 'block_third_party' diff --git a/app/types/constants/cosmeticFilterTypes.ts b/app/types/constants/cosmeticFilterTypes.ts new file mode 100644 index 000000000000..74dd6f2fe164 --- /dev/null +++ b/app/types/constants/cosmeticFilterTypes.ts @@ -0,0 +1,10 @@ +/* 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 * as types from '../../constants/cosmeticFilterTypes' + +export type SITE_COSMETIC_FILTER_REMOVED = typeof types.SITE_COSMETIC_FILTER_REMOVED +export type SITE_COSMETIC_FILTER_ADDED = typeof types.SITE_COSMETIC_FILTER_ADDED +export type LOGGED_STORAGE = typeof types.LOGGED_STORAGE +export type ALL_COSMETIC_FILTERS_REMOVED = typeof types.ALL_COSMETIC_FILTERS_REMOVED diff --git a/app/types/constants/webNavigationTypes.ts b/app/types/constants/webNavigationTypes.ts index 2f39a78ccc59..ab08eccb274a 100644 --- a/app/types/constants/webNavigationTypes.ts +++ b/app/types/constants/webNavigationTypes.ts @@ -5,3 +5,4 @@ import * as types from '../../constants/webNavigationTypes' export type ON_BEFORE_NAVIGATION = typeof types.ON_BEFORE_NAVIGATION +export type ON_COMMITTED = typeof types.ON_COMMITTED diff --git a/app/types/global/chrome.d.ts b/app/types/global/chrome.d.ts index acdffe4dcf17..ecafec09943f 100644 --- a/app/types/global/chrome.d.ts +++ b/app/types/global/chrome.d.ts @@ -4,7 +4,7 @@ /// -type BlockTypes = 'ads' | 'trackers' | 'httpUpgradableResources' | 'javascript' +type BlockTypes = 'ads' | 'trackers' | 'httpUpgradableResources' | 'javascript' | 'fingerprinting' interface BlockDetails { blockType: BlockTypes @@ -12,6 +12,11 @@ interface BlockDetails { subresource: string } +interface BlockDetails { + blockType: BlockTypes + tabId: number + subresource: string +} declare namespace chrome.tabs { const setAsync: any const getAsync: any diff --git a/package-lock.json b/package-lock.json index d68d21a408fa..6808a295bea4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,21 +14,6 @@ "glob-to-regexp": "^0.3.0" } }, - "@nodelib/fs.stat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz", - "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==", - "dev": true - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", @@ -51,30 +36,30 @@ "dev": true }, "@types/babel-types": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", - "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.2.tgz", + "integrity": "sha512-ylggu8DwwxT6mk3jVoJeohWAePWMNWEYm06MSoJ19kwp3hT9eY2Z4NNZn3oevzgFmClgNQ2GQF500hPDvNsGHg==", "dev": true }, "@types/babylon": { - "version": "6.16.3", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.3.tgz", - "integrity": "sha512-lyJ8sW1PbY3uwuvpOBZ9zMYKshMnQpXmeDHh8dj9j2nJm/xrW0FgB5gLSYOArj5X0IfaXnmhFoJnhS4KbqIMug==", + "version": "6.16.2", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz", + "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==", "dev": true, "requires": { "@types/babel-types": "*" } }, "@types/bluebird": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.21.tgz", - "integrity": "sha512-6UNEwyw+6SGMC/WMI0ld0PS4st7Qq51qgguFrFizOSpGvZiqe9iswztFSdZvwJBEhLOy2JaxNE6VC7yMAlbfyQ==", + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.20.tgz", + "integrity": "sha512-Wk41MVdF+cHBfVXj/ufUHJeO3BlIQr1McbHZANErMykaCWeDSZbH5erGjNBw2/3UlRdSxZbLfSuQTzFmPOYFsA==", "dev": true }, "@types/chai": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.4.tgz", - "integrity": "sha512-h6+VEw2Vr3ORiFCyyJmcho2zALnUq9cvdB/IO8Xs9itrJVCenC7o26A6+m7D0ihTTr65eS259H5/Ghl/VjYs6g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", + "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==", "dev": true }, "@types/cheerio": { @@ -93,9 +78,9 @@ } }, "@types/enzyme": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.1.11.tgz", - "integrity": "sha512-abPTpLuveNVd2ibafCjwoZT9MerzgnBKd6ijNKdtlfJREGKXk5dxzKAXGoY9IuiYarH2YXTc197WeyIVQUFjQg==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.1.13.tgz", + "integrity": "sha512-TwzKKiX5sGh/WweucxPXb8zjMLlLekGtBQw0ihk1HSj14zZuioG3Gql3jbxxb1YDRLbT4WQyzWG/h4Y7eCdw1g==", "dev": true, "requires": { "@types/cheerio": "*", @@ -103,9 +88,9 @@ } }, "@types/enzyme-adapter-react-16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.2.tgz", - "integrity": "sha512-/oEtlwJyFIT9metXC2A90XnjfHwBDYxhFoJwqNjNDG5K2CCqp7xneQbAp4u5j280bOmalFYUDjfmmxNQG3S4Og==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.3.tgz", + "integrity": "sha512-9eRLBsC/Djkys05BdTWgav8v6fSCjyzjNuLwG2sfa2b2g/VAN10luP0zB0VwtOWFQ0LGjIboJJvIsVdU5gqRmg==", "dev": true, "requires": { "@types/enzyme": "*" @@ -138,16 +123,15 @@ } }, "@types/mocha": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.3.tgz", - "integrity": "sha512-C1wVVr7xhKu6c3Mb27dFzNYR05qvHwgtpN+JOYTGc1pKA7dCEDDYpscn7kul+bCUwa3NoGDbzI1pdznSOa397w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==", "dev": true }, "@types/node": { - "version": "8.10.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.20.tgz", - "integrity": "sha512-M7x8+5D1k/CuA6jhiwuSCmE8sbUWJF0wYsjcig9WrXvwUI5ArEoUBdOXpV4JcEMrLp02/QbDjw+kI+vQeKyQgg==", - "dev": true + "version": "8.10.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.13.tgz", + "integrity": "sha512-AorNXRHoPVxIUIVmr6uJXRnvlPOSNKAJF5jZ1JOj1/IxYMocZzvQooNeLU02Db6kpy1IVIySTOvuIxmUF1HrOg==" }, "@types/react": { "version": "16.4.2", @@ -159,9 +143,9 @@ } }, "@types/react-dom": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.6.tgz", - "integrity": "sha512-M+1zmwa5KxUpkCuxA4whlDJKYTGNvNQW4pIoCLH16xGbClicD9CzPry4y94kTjCCk/bJZCZ/GVqUsP7eKcO/mQ==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.5.tgz", + "integrity": "sha512-ony2hEYlGXCLWNAWWgbsHR7qVvDbeMRFc5b43+7dhj3n+zXzxz81HV9Yjpc3JD8vLCiwYoSLqFCI6bD0+0zG2Q==", "dev": true, "requires": { "@types/node": "*", @@ -188,14 +172,14 @@ } }, "@types/selenium-webdriver": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.10.tgz", - "integrity": "sha512-ikB0JHv6vCR1KYUQAzTO4gi/lXLElT4Tx+6De2pc/OZwizE9LRNiTa+U8TBFKBD/nntPnr/MPSHSnOTybjhqNA==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.8.tgz", + "integrity": "sha512-yrqQvb1EZhH+ONMzUmsEnBjzitortVv0lynRe5US2+FofdoMWUE4wf7v4peCd62fqXq8COCVTbpS1/jIg5EbuQ==" }, "@types/sinon": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.3.tgz", - "integrity": "sha512-Tt7w/ylBS/OEAlSCwzB0Db1KbxnkycP/1UkQpbvKFYoUuRn4uYsC3xh5TRPrOjTy0i8TIkSz1JdNL4GPVdf3KQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.2.tgz", + "integrity": "sha512-6Mv0+JLFJ+5IyURIF27rI9YQ4aMK74Uuv95RjKDXfar5h0VLTVDJO5h50rdyq3VqFaDRL3xTYjkmh5Q4LUJyfA==", "dev": true }, "@types/tough-cookie": { @@ -480,9 +464,9 @@ } }, "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "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": { @@ -504,13 +488,13 @@ } }, "ajv": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.1.tgz", - "integrity": "sha512-pgZos1vgOHDiC7gKNbZW8eKvCnNXARv2oqrGQT7Hzbq5Azp7aZG6DJzADnkuSq7RH6qkXp4J/m68yPX/2uBHyQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^0.3.0", "uri-js": "^4.2.1" } }, @@ -575,9 +559,9 @@ } }, "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", "dev": true }, "anymatch": { @@ -698,6 +682,16 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -765,18 +759,18 @@ "dev": true }, "ast-types": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", - "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", "dev": true }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.14.0" } }, "async-each": { @@ -818,19 +812,18 @@ } }, "awesome-typescript-loader": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.2.0.tgz", - "integrity": "sha512-3v5MEUgRz1n90u61UGYbhFxiFq1tK/HBdoY/ScBX1srOiZVo4iF9b6hyP2ZsRp1ewHKYwlEo0OaHUXJVQHv6dw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.0.0.tgz", + "integrity": "sha512-/80vlBnWp5IlERQ0sxRDQfz5voqht02MRNgUdbn90rKHrope6eh0PYr0qepD2TpYYnCSvq0DzdWc8udHM0KefA==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.3.1", "enhanced-resolve": "^4.0.0", "loader-utils": "^1.1.0", "lodash": "^4.17.5", "micromatch": "^3.1.9", "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", - "webpack-log": "^1.2.0" + "source-map-support": "^0.5.3" } }, "aws-sign2": { @@ -1306,9 +1299,9 @@ } }, "babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz", + "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=", "dev": true, "requires": { "babel-plugin-syntax-decorators": "^6.1.18", @@ -1854,9 +1847,9 @@ }, "dependencies": { "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", "dev": true }, "source-map": { @@ -1887,9 +1880,9 @@ }, "dependencies": { "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", "dev": true } } @@ -2093,6 +2086,15 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.x.x" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2240,28 +2242,28 @@ } }, "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", + "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", "dev": true, "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "buffer-alloc-unsafe": "^0.1.0", + "buffer-fill": "^0.1.0" } }, "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=", "dev": true }, "buffer-crc32": { @@ -2271,15 +2273,15 @@ "dev": true }, "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==", "dev": true }, "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" }, "buffer-xor": { "version": "1.0.3", @@ -2427,9 +2429,9 @@ } }, "caniuse-db": { - "version": "1.0.30000859", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000859.tgz", - "integrity": "sha1-boE6F1fxmpPLNnX2tQN6yoC+oGI=", + "version": "1.0.30000836", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000836.tgz", + "integrity": "sha1-eItsj28CmRdDsYzbvVT5bQW0uVo=", "dev": true }, "caseless": { @@ -2548,16 +2550,16 @@ } }, "chromedriver": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.40.0.tgz", - "integrity": "sha512-ewvRQ1HMk0vpFSWYCk5hKDoEz5QMPplx5w3C6/Me+03y1imr67l3Hxl9U0jn3mu2N7+c7BoC7JtNW6HzbRAwDQ==", + "version": "2.38.3", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.38.3.tgz", + "integrity": "sha512-tczy6RHl0LOVA4p+xezcu3NRjr9A1iLyyfjP9yPIUynvV28YSKH/Ll1iw0jMCjN9jwtaB2HB4aPjv0Uuw2VARw==", "dev": true, "requires": { "del": "^3.0.0", - "extract-zip": "^1.6.7", + "extract-zip": "^1.6.6", "kew": "^0.7.0", "mkdirp": "^0.5.1", - "request": "^2.87.0" + "request": "^2.85.0" } }, "cipher-base": { @@ -2630,9 +2632,9 @@ } }, "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" }, "clean-css": { "version": "4.1.11", @@ -2821,18 +2823,18 @@ } }, "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "^1.1.1" } }, "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "color-string": { @@ -2856,9 +2858,10 @@ } }, "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true }, "combined-stream": { "version": "1.0.6", @@ -3068,24 +3071,22 @@ } }, "cross-env": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.5.tgz", + "integrity": "sha512-GSiNTbvTU3pXzewRKGP0Y+rVP2CzifY2pqSEdtHzLLj41pRdkrgY7e4uSnBoR/pmYaqZr/lwwjg/Q4kNX30hWQ==", "dev": true, "requires": { - "cross-spawn": "^6.0.5", + "cross-spawn": "^5.1.0", "is-windows": "^1.0.0" } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", + "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -3102,6 +3103,26 @@ "node-rsa": "^0.2.10" } }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.x.x" + } + } + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -3181,9 +3202,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -3323,18 +3344,18 @@ "dev": true }, "cssstyle": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", - "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "dev": true, "requires": { "cssom": "0.3.x" } }, "csstype": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.5.tgz", - "integrity": "sha512-EGMjeoiN3aqEX5u/cyH5mSdGBDGdLcCQvcEcBWNGFSPXKd9uOTIeVG91YQ22OxI44DKpvI+4C7VUSmEpsHWJaA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.6.tgz", + "integrity": "sha512-tKPyhy0FmfYD2KQYXD5GzkvAYLYj96cMLXr648CKGd3wBe0QqoPipImjGiLze9c8leJK8J3n7ap90tpk3E6HGQ==", "dev": true }, "currently-unhandled": { @@ -3736,9 +3757,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.50", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.50.tgz", - "integrity": "sha1-dDi3b5K0G5GfP73TUPvQdX2s3fc=", + "version": "1.3.45", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", + "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=", "dev": true }, "elegant-spinner": { @@ -3748,9 +3769,9 @@ "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -3812,56 +3833,90 @@ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" }, "envinfo": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-5.10.0.tgz", - "integrity": "sha512-rXbzXWvnQxy+TcqZlARbWVQwgGVVouVJgFZhLVN5htjLxl1thstrP2ZGi0pXC309AbK7gVOPU+ulz/tmpCI7iw==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", + "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", "dev": true }, "enzyme": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", - "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.4.1.tgz", + "integrity": "sha512-XBZbyUy36WipNSBVZKIR1sg9iF6zXfkfDEzwTc10T9zhB61UPnMo+c3WE17T/jyhfmPJOz6X073NXXsR7G/1rA==", "requires": { + "array.prototype.flat": "^1.2.1", "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.0.3", - "has": "^1.0.1", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.3", + "is-callable": "^1.1.4", "is-number-object": "^1.0.3", "is-string": "^1.0.4", "is-subset": "^0.1.1", "lodash": "^4.17.4", - "object-inspect": "^1.5.0", + "object-inspect": "^1.6.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" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + } } }, "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.2.0.tgz", + "integrity": "sha512-UgBra+xZFVFbU5Tw7Inw0bPrNJhM2ru4vCoO7preX6sOicXuDbOH927QJx4pk6m6vatd8jnPXTF6/GCjzytJTg==", "requires": { - "enzyme-adapter-utils": "^1.3.0", - "lodash": "^4.17.4", - "object.assign": "^4.0.4", + "enzyme-adapter-utils": "^1.5.0", + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", "object.values": "^1.0.4", - "prop-types": "^15.6.0", + "prop-types": "^15.6.2", + "react-is": "^16.4.2", "react-reconciler": "^0.7.0", "react-test-renderer": "^16.0.0-0" + }, + "dependencies": { + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "requires": { + "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==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.5.0.tgz", + "integrity": "sha512-cLUaPYU8GEzAHi/1hiO+ylz4QiQWI8eb9SysAk8Tbul2O918dRf4cfD4s2BjijtwSvhapkOsPW9XRix1EXlJ1Q==", "requires": { - "lodash": "^4.17.4", - "object.assign": "^4.0.4", - "prop-types": "^15.6.0" + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", + "prop-types": "^15.6.2" + }, + "dependencies": { + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + } } }, "errno": { @@ -3883,9 +3938,9 @@ } }, "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -3973,9 +4028,9 @@ "dev": true }, "escodegen": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", - "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", + "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", @@ -4065,19 +4120,6 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } } }, "exit-hook": { @@ -4383,12 +4425,6 @@ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, "schema-utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", @@ -4401,15 +4437,43 @@ } }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", "dev": true, "requires": { - "concat-stream": "1.6.2", + "concat-stream": "1.6.0", "debug": "2.6.9", - "mkdirp": "0.5.1", + "mkdirp": "0.5.0", "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } } }, "extsprintf": { @@ -4424,13 +4488,12 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", - "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.1.tgz", + "integrity": "sha512-wSyW1TBK3ia5V+te0rGPXudeMHoUQW6O5Y9oATiaGhpENmEifPDlOdhpsnlj5HoG6ttIvGiY1DdCmI9X2xGMhg==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.0.1", "glob-parent": "^3.1.0", "is-glob": "^4.0.0", "merge2": "^1.2.1", @@ -4455,9 +4518,9 @@ "dev": true }, "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "requires": { "core-js": "^1.0.0", "isomorphic-fetch": "^2.1.1", @@ -4465,7 +4528,7 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "ua-parser-js": "^0.7.9" } }, "fd-slicer": { @@ -4564,9 +4627,9 @@ "dev": true }, "flow-parser": { - "version": "0.75.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.75.0.tgz", - "integrity": "sha512-QEyV/t9TERBOSI/zSx0zhKH6924135WPI7pMmug2n/n/4puFm4mdAq1QaKPA3IPhXDRtManbySkKhRqws5UUGA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.72.0.tgz", + "integrity": "sha512-kFaDtviKlD/rHi6NRp42KTbnPgz/nKcWUJQhqDnLDeKA8uGcRVSy0YlQjaf9M3pFo5PgC3SNFnCPpQGLtHjH2w==", "dev": true }, "flush-write-stream": { @@ -4680,24 +4743,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { @@ -4707,12 +4774,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": false, + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -4721,34 +4790,40 @@ }, "chownr": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": false, + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { @@ -4757,25 +4832,29 @@ }, "deep-extend": { "version": "0.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { @@ -4784,13 +4863,15 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { @@ -4806,7 +4887,8 @@ }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "requires": { @@ -4820,13 +4902,15 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.21", - "bundled": true, + "resolved": false, + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, "optional": true, "requires": { @@ -4835,7 +4919,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { @@ -4844,7 +4929,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, "requires": { @@ -4854,18 +4940,21 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" @@ -4873,13 +4962,15 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -4887,12 +4978,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": false, + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "minipass": { "version": "2.2.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, "requires": { "safe-buffer": "^5.1.1", @@ -4901,7 +4994,8 @@ }, "minizlib": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, "optional": true, "requires": { @@ -4910,7 +5004,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -4918,13 +5013,15 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, "needle": { "version": "2.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "dev": true, "optional": true, "requires": { @@ -4935,7 +5032,8 @@ }, "node-pre-gyp": { "version": "0.10.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", "dev": true, "optional": true, "requires": { @@ -4953,7 +5051,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "requires": { @@ -4963,13 +5062,15 @@ }, "npm-bundled": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.1.10", - "bundled": true, + "resolved": false, + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, "optional": true, "requires": { @@ -4979,7 +5080,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { @@ -4991,18 +5093,21 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" @@ -5010,19 +5115,22 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { @@ -5032,19 +5140,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.7", - "bundled": true, + "resolved": false, + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "dev": true, "optional": true, "requires": { @@ -5056,7 +5167,8 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } @@ -5064,7 +5176,8 @@ }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { @@ -5079,7 +5192,8 @@ }, "rimraf": { "version": "2.6.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "optional": true, "requires": { @@ -5088,42 +5202,49 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.5.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", @@ -5133,7 +5254,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { @@ -5142,7 +5264,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -5150,13 +5273,15 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { "version": "4.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, "optional": true, "requires": { @@ -5171,13 +5296,15 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { @@ -5186,12 +5313,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "yallist": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } @@ -5532,9 +5661,9 @@ } }, "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "dev": true }, "har-schema": { @@ -5570,21 +5699,15 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true } } }, "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "requires": { - "function-bind": "^1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -5679,6 +5802,18 @@ "minimalistic-assert": "^1.0.1" } }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -5696,10 +5831,16 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", + "dev": true + }, "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + "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", @@ -5721,9 +5862,9 @@ } }, "hosted-git-info": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.1.tgz", - "integrity": "sha512-Ba4+0M4YvIDUUsprMjhVTU1yN9F2/LJSAl69ZpzaLT4l4j5mwTS6jqqW9Ojvj6lKz/veqPzpJBqGbXspOb533A==", + "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": { @@ -5831,9 +5972,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -5863,9 +6004,9 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, "ignore-styles": { @@ -6005,9 +6146,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", "dev": true }, "is-absolute-url": { @@ -6072,9 +6213,9 @@ } }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-data-descriptor": { "version": "0.1.4", @@ -6227,12 +6368,37 @@ "dev": true }, "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "^0.2.2" + }, + "dependencies": { + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + } + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "symbol-observable": "^1.1.0" + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } } }, "is-path-cwd": { @@ -6269,6 +6435,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -6381,7 +6548,8 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isomorphic-fetch": { "version": "2.2.1", @@ -6420,9 +6588,9 @@ } }, "js-base64": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", - "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", "dev": true }, "js-stringify": { @@ -6454,16 +6622,16 @@ "optional": true }, "jscodeshift": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.1.tgz", - "integrity": "sha512-sRMollbhbmSDrR79JMAnhEjyZJlQQVozeeY9A6/KNuV26DNcuB3mGSCWXp0hks9dcwRNOELbNOiwraZaXXRk5Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", + "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", "dev": true, "requires": { "babel-plugin-transform-flow-strip-types": "^6.8.0", "babel-preset-es2015": "^6.9.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.9.0", - "babylon": "^7.0.0-beta.47", + "babylon": "^7.0.0-beta.30", "colors": "^1.1.2", "flow-parser": "^0.*", "lodash": "^4.13.1", @@ -6471,17 +6639,11 @@ "neo-async": "^2.5.0", "node-dir": "0.1.8", "nomnom": "^1.8.1", - "recast": "^0.15.0", + "recast": "^0.14.1", "temp": "^0.8.1", "write-file-atomic": "^1.2.0" }, "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 - }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -6498,9 +6660,9 @@ "dev": true }, "babylon": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", - "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==", + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.46.tgz", + "integrity": "sha512-WFJlg2WatdkXRFMpk7BN/Uzzkjkcjk+WaqnrSCpay+RYl4ypW9ZetZyT9kNt22IH/BQNst3M6PaaBn9IXsUNrg==", "dev": true }, "braces": { @@ -6514,23 +6676,6 @@ "repeat-element": "^1.1.2" } }, - "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.0", - "strip-ansi": "~0.1.0" - } - }, - "colors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", - "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", - "dev": true - }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -6593,35 +6738,13 @@ "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" } - }, - "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" - } - }, - "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 } } }, "jsdom": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", - "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", + "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", "dev": true, "requires": { "abab": "^1.0.4", @@ -6629,13 +6752,13 @@ "acorn-globals": "^4.1.0", "array-equal": "^1.0.0", "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.3.1 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", "data-urls": "^1.0.0", "domexception": "^1.0.0", "escodegen": "^1.9.0", "html-encoding-sniffer": "^1.0.2", "left-pad": "^1.2.0", - "nwsapi": "^2.0.0", + "nwmatcher": "^1.4.3", "parse5": "4.0.0", "pn": "^1.1.0", "request": "^2.83.0", @@ -6647,7 +6770,7 @@ "webidl-conversions": "^4.0.2", "whatwg-encoding": "^1.0.3", "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", + "whatwg-url": "^6.4.0", "ws": "^4.0.0", "xml-name-validator": "^3.0.0" }, @@ -6685,9 +6808,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, "json-stringify-safe": { "version": "5.0.1", @@ -6853,16 +6976,16 @@ } }, "listr": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.1.tgz", - "integrity": "sha512-MSMUUVN1f8aRnPi4034RkOqdiUlpYW+FqwFE3aL0uYNPRavkt2S2SsSpDDofn8BDpqv2RNnsdOcCHWsChcq77A==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", "dev": true, "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", + "chalk": "^1.1.3", "cli-truncate": "^0.2.1", "figures": "^1.7.0", "indent-string": "^2.1.0", - "is-observable": "^1.1.0", + "is-observable": "^0.2.0", "is-promise": "^2.1.0", "is-stream": "^1.1.0", "listr-silent-renderer": "^1.1.1", @@ -6872,7 +6995,8 @@ "log-update": "^1.0.2", "ora": "^0.2.3", "p-map": "^1.1.1", - "rxjs": "^6.1.0", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", "strip-ansi": "^3.0.1" }, "dependencies": { @@ -6914,15 +7038,6 @@ "chalk": "^1.0.0" } }, - "rxjs": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", - "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -7262,9 +7377,9 @@ } }, "lolex": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz", - "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.4.1.tgz", + "integrity": "sha512-8QdNQMqlAE2kkc2YWR3Ld0evgE452mmyYZR4HTh54PeH8UAjDipHYh/FHq6y9cAvM68nxGxj5jAz97+WQ2AQEQ==", "dev": true }, "long": { @@ -7312,10 +7427,16 @@ "yallist": "^2.1.2" } }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "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==", "requires": { "pify": "^3.0.0" } @@ -7448,9 +7569,9 @@ "dev": true }, "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { "clone": "^2.1.1", @@ -7644,28 +7765,28 @@ } }, "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", + "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", "dev": true, "requires": { "browser-stdout": "1.3.1", - "commander": "2.15.1", + "commander": "2.11.0", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.5", + "growl": "1.10.3", "he": "1.1.1", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "supports-color": "4.4.0" }, "dependencies": { "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, "debug": { @@ -7678,22 +7799,27 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^2.0.0" } } } }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -7739,9 +7865,9 @@ "optional": true }, "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -7749,6 +7875,7 @@ "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", @@ -7758,14 +7885,36 @@ } }, "nearley": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", - "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", + "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", "requires": { + "moo": "^0.4.3", "nomnom": "~1.6.2", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6", "semver": "^5.4.1" + }, + "dependencies": { + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" + }, + "nomnom": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "requires": { + "colors": "0.5.x", + "underscore": "~1.4.4" + } + }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" + } } }, "negotiator": { @@ -7793,9 +7942,9 @@ "dev": true }, "nise": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", - "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", + "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", @@ -7895,12 +8044,38 @@ } }, "nomnom": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", - "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, "requires": { - "colors": "0.5.x", - "underscore": "~1.4.4" + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "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.0", + "strip-ansi": "~0.1.0" + } + }, + "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 + } } }, "normalize-package-data": { @@ -7971,10 +8146,10 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "nwsapi": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.4.tgz", - "integrity": "sha512-Zt6HRR6RcJkuj5/N9zeE7FN6YitRW//hK2wTOwX274IBphbY3Zf5+yn5mZ9v/SzAOTMjQNxZf9KkmPLWn0cV4g==", + "nwmatcher": { + "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": { @@ -8030,9 +8205,9 @@ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" }, "object-visit": { "version": "1.0.1", @@ -8262,9 +8437,9 @@ "dev": true }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "requires": { "p-try": "^1.0.0" } @@ -8382,13 +8557,6 @@ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "requires": { "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.0.tgz", - "integrity": "sha512-baXPuqA7EVcBUpA5so2K26DTzk7NCWBc9xrPMu9PbUMwgusJRm9zJBPhiDmJVEcnTQ3aOxUZeuFHpd9qMYDNRg==" - } } }, "parseurl": { @@ -8659,12 +8827,13 @@ } }, "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "^5.0.4", + "uniqid": "^4.0.0" } }, "postcss-load-config": { @@ -8718,9 +8887,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -8839,9 +9008,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -8877,9 +9046,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -8925,9 +9094,9 @@ } }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -8963,9 +9132,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -9001,9 +9170,9 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -9169,9 +9338,9 @@ "dev": true }, "prettier": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.6.tgz", - "integrity": "sha512-p5eqCNiohWZN++7aJXUVj0JgLqHCPLf9GLIcLBHGNWs4Y9FJOPs6+KNO2WT0udJIQJTbeZFrJkjzjcb8fkAYYQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", + "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", "dev": true }, "pretty-bytes": { @@ -9211,22 +9380,23 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "version": "15.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" } }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "ipaddr.js": "1.8.0" } }, "prr": { @@ -9446,9 +9616,9 @@ } }, "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.0.tgz", + "integrity": "sha512-UWi0klDoq8xtVzlMRgENV9F7iCTZExaJQSQL187UXsxpk9NnrKGqTqqUNYAKGOzucSOxs2+jUnRNI+rLviPhJg==", "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -9456,9 +9626,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" }, "q": { "version": "1.5.1", @@ -9605,9 +9775,9 @@ } }, "react": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", - "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.2.tgz", + "integrity": "sha512-o5GPdkhciQ3cEph6qgvYB7LTOHw/GB0qRI6ZFNugj49qJCFfgHwVNjZ5u+b7nif4vOeMIOuYj3CeYe2IBD74lg==", "requires": { "fbjs": "^0.8.16", "loose-envify": "^1.1.0", @@ -9646,9 +9816,9 @@ } }, "react-dom": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", - "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.2.tgz", + "integrity": "sha512-MMPko3zYncNrz/7gG17wJWUREZDvskZHXOwbttzl0F0L3wDmToyuETuo/r8Y5yvDejwYcRyWI1lvVBjLJWFwKA==", "requires": { "fbjs": "^0.8.16", "loose-envify": "^1.1.0", @@ -9657,9 +9827,9 @@ } }, "react-is": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.4.1.tgz", - "integrity": "sha512-xpb0PpALlFWNw/q13A+1aHeyJyLYCg0/cCHPUA43zYluZuIPHaHL3k8OBsTgQtxqW0FhyDEMvi8fZ/+7+r4OSQ==" + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.4.2.tgz", + "integrity": "sha512-rI3cGFj/obHbBz156PvErrS5xc6f1eWyTwyV4mo0vF2lGgXgS+mm7EKD5buLJq6jNgIagQescGSVG2YzgXt8Yg==" }, "react-proxy": { "version": "1.1.8", @@ -9696,14 +9866,14 @@ } }, "react-test-renderer": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.4.1.tgz", - "integrity": "sha512-wyyiPxRZOTpKnNIgUBOB6xPLTpIzwcQMIURhZvzUqZzezvHjaGNsDPBhMac5fIY3Jf5NuKxoGvV64zDSOECPPQ==", + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.4.2.tgz", + "integrity": "sha512-vdTPnRMDbxfv4wL4lzN4EkVGXyYs7LE2uImOsqh1FKiP6L5o1oJl8nore5sFi9vxrP9PK3l4rgb/fZ4PVUaWSA==", "requires": { "fbjs": "^0.8.16", "object-assign": "^4.1.1", "prop-types": "^15.6.0", - "react-is": "^16.4.1" + "react-is": "^16.4.2" } }, "react-transform-catch-errors": { @@ -9780,12 +9950,12 @@ } }, "recast": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.15.0.tgz", - "integrity": "sha512-47C2mIxQYvFICrTNuV4+xGgBa1nAoq42ANN5oDTSBIJ50NX7jcki7gAC6HWYptnQgHmqIRTHJq8OKdi3fwgyNQ==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", + "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", "dev": true, "requires": { - "ast-types": "0.11.5", + "ast-types": "0.11.3", "esprima": "~4.0.0", "private": "~0.1.5", "source-map": "~0.6.1" @@ -9881,9 +10051,9 @@ "integrity": "sha1-5hWhbha0ehmlFXZhM9Hj6Zt4UuU=" }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", "dev": true }, "regenerator-runtime": { @@ -9990,9 +10160,9 @@ "dev": true }, "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "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", @@ -10003,6 +10173,7 @@ "forever-agent": "~0.6.1", "form-data": "~2.3.1", "har-validator": "~5.0.3", + "hawk": "~6.0.2", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -10012,6 +10183,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.1", "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", "tough-cookie": "~2.3.3", "tunnel-agent": "^0.6.0", "uuid": "^3.1.0" @@ -10056,9 +10228,9 @@ "dev": true }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { "path-parse": "^1.0.5" @@ -10172,10 +10344,25 @@ "aproba": "^1.1.1" } }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, "rxjs": { - "version": "5.5.11", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", - "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", + "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", "dev": true, "requires": { "symbol-observable": "1.0.1" @@ -10547,6 +10734,15 @@ } } }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.x.x" + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -10567,12 +10763,12 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.0.0", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -10580,9 +10776,9 @@ } }, "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", + "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -10660,9 +10856,9 @@ "dev": true }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { "asn1": "~0.2.3", @@ -10672,7 +10868,6 @@ "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, @@ -10760,6 +10955,15 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "^0.2.0" + } + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -10807,6 +11011,12 @@ "safe-buffer": "~5.1.0" } }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -10852,15 +11062,14 @@ } }, "styled-components": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.3.3.tgz", - "integrity": "sha1-CecCBVqxH3qOq4IpscDQuFUJVoY=", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.4.2.tgz", + "integrity": "sha512-eTmIiWstyDLccHZAyp+aCPirlkTvYiHlYGgWQxOYDv8Ko0o6mfnDo0+DnUnKinO8NzAfQXEDP7Bh0qlazwJgrw==", "requires": { "buffer": "^5.0.3", "css-to-react-native": "^2.0.3", "fbjs": "^0.8.16", "hoist-non-react-statics": "^2.5.0", - "is-plain-object": "^2.0.1", "prop-types": "^15.5.4", "react-is": "^16.3.1", "stylis": "^3.5.0", @@ -10869,9 +11078,9 @@ } }, "stylis": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.1.tgz", - "integrity": "sha512-yM4PyeHuwhIOUHNJxi1/Mbq8kVLv4AkyE7IYLP/LK0lIFcr3tRa2H1iZlBYKIxOlf+/jruBTe8DdKSyQX9w4OA==" + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.3.tgz", + "integrity": "sha512-TxU0aAscJghF9I3V9q601xcK3Uw1JbXvpsBGj/HULqexKOKlOEzzlIpLFRbKkCK990ccuxfXUqmPbIIo7Fq/cQ==" }, "stylis-rule-sheet": { "version": "0.0.10", @@ -10899,14 +11108,6 @@ "mkdirp": "~0.5.1", "sax": "~1.2.1", "whet.extend": "~0.9.9" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } } }, "symbol-observable": { @@ -10927,16 +11128,16 @@ "dev": true }, "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.0.tgz", + "integrity": "sha512-lh2iAPG/BHNmN6WB9Ybdynk9rEJ5GD/dy4zscHmVlwa1dq2tpE+BH78i5vjYwYVWEaOXGBjzxr89aVACF17Cpw==", "dev": true, "requires": { "bl": "^1.0.0", "buffer-alloc": "^1.1.0", "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", + "readable-stream": "^2.0.0", "to-buffer": "^1.1.0", "xtend": "^4.0.0" } @@ -11115,25 +11316,25 @@ "dev": true }, "ts-node": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.2.0.tgz", - "integrity": "sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.0.3.tgz", + "integrity": "sha512-ARaOMNFEPKg2ZuC1qJddFvHxHNFVckR0g9xLxMIoMqSSIkDc8iS4/LoV53EdDWWNq2FGwqcEf0bVVGJIWpsznw==", "dev": true, "requires": { "arrify": "^1.0.0", - "buffer-from": "^1.1.0", + "chalk": "^2.3.0", "diff": "^3.1.0", "make-error": "^1.1.1", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", + "source-map-support": "^0.5.3", "yn": "^2.0.0" } }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", "dev": true }, "tslint": { @@ -11157,39 +11358,30 @@ } }, "tslint-config-standard": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/tslint-config-standard/-/tslint-config-standard-7.1.0.tgz", - "integrity": "sha512-cETzxZcEQ1RKjwtEScGryAtqwiRFc55xBxhZP6bePyOfXmo6i1/QKQrTgFKBiM4FjCvcqTjJq20/KGrh+TzTfQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tslint-config-standard/-/tslint-config-standard-7.0.0.tgz", + "integrity": "sha512-QCrLt8WwiRgZpRSgRsk6cExy8/Vipa/5fHespm4Q1ly90EB6Lni04Ub8dkEW10bV3fPN3SkxEwj41ZOe/knCZA==", "dev": true, "requires": { - "tslint-eslint-rules": "^5.3.1" + "tslint-eslint-rules": "^4.1.1" } }, "tslint-eslint-rules": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.3.1.tgz", - "integrity": "sha512-qq2H/AU/FlFbQJKXuxhtIk+ni/nQu9jHHhsFKa6hnA0/n3zl1/RWRc3TVFlL8HfWFMzkST350VeTrFpy1u4OUg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz", + "integrity": "sha1-fDDniC8mvCdr/5HSOEl1xp2viLo=", "dev": true, "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "2.8.0" + "doctrine": "^0.7.2", + "tslib": "^1.0.0", + "tsutils": "^1.4.0" }, "dependencies": { - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", - "dev": true - }, "tsutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.8.0.tgz", - "integrity": "sha1-AWAXNymzvxOGKN0UoVN+AIUdgUo=", - "dev": true, - "requires": { - "tslib": "^1.7.1" - } + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz", + "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=", + "dev": true } } }, @@ -11203,9 +11395,9 @@ } }, "tsutils": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz", - "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.2.tgz", + "integrity": "sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -11264,9 +11456,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", + "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", "dev": true }, "ua-parser-js": { @@ -11291,9 +11483,9 @@ "optional": true }, "uglifyjs-webpack-plugin": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz", - "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", "requires": { "cacache": "^10.0.4", "find-cache-dir": "^1.0.0", @@ -11306,9 +11498,10 @@ } }, "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true }, "union-value": { "version": "1.0.0", @@ -11351,6 +11544,15 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "^0.2.8" + } + }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -11365,6 +11567,11 @@ "unique-slug": "^2.0.0" } }, + "unique-selector": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/unique-selector/-/unique-selector-0.3.6.tgz", + "integrity": "sha1-IeDJgqvNeUan7EN4+RzOrHRWVl4=" + }, "unique-slug": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", @@ -11420,9 +11627,9 @@ } }, "untildify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", + "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", "dev": true }, "upath": { @@ -11432,9 +11639,9 @@ "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", + "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", "requires": { "punycode": "^2.1.0" } @@ -11464,9 +11671,9 @@ } }, "url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", "dev": true }, "url-parse-lax": { @@ -11522,15 +11729,15 @@ "dev": true }, "uuid": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.0.tgz", - "integrity": "sha512-ijO9N2xY/YaOqQ5yz5c4sy2ZjWmA6AR6zASb/gdpeKZ8+948CxwfMW9RrKVk5may6ev8c0/Xguu32e2Llelpqw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, "v8-compile-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz", - "integrity": "sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", "dev": true }, "validate-npm-package-license": { @@ -11647,9 +11854,9 @@ "dev": true }, "webpack": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.1.tgz", - "integrity": "sha512-6jpzObU18y7lXDJz7XCLvzgrqcJ0rZ2jhKvnTivza9gM2GvPW93xxtmEll2GgmdC0zVQAtbHrH/9BtyMjSDZfA==", + "version": "4.16.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.5.tgz", + "integrity": "sha512-i5cHYHonzSc1zBuwB5MSzW4v9cScZFbprkHK8ZgzPDCRkQXGGpYzPmJhbus5bOrZ0tXTcQp+xyImRSvKb0b+Kw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.5.13", @@ -11679,6 +11886,12 @@ "webpack-sources": "^1.0.1" }, "dependencies": { + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, "enhanced-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", @@ -11701,12 +11914,6 @@ "jscodeshift": "^0.4.0" }, "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 - }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -11745,27 +11952,10 @@ "repeat-element": "^1.1.2" } }, - "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.0", - "strip-ansi": "~0.1.0" - } - }, - "colors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", - "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", - "dev": true - }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", "dev": true }, "esprima": { @@ -11860,16 +12050,6 @@ "regex-cache": "^0.4.2" } }, - "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", @@ -11882,53 +12062,41 @@ "private": "~0.1.5", "source-map": "~0.6.1" } - }, - "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 } } }, "webpack-cli": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.5.tgz", - "integrity": "sha512-CiWQR+1JS77rmyiO6y1q8Kt/O+e8nUUC9YfJ25JtSmzDwbqJV7vIsh3+QKRHVTbTCa0DaVh8iY1LBiagUIDB3g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.3.tgz", + "integrity": "sha512-5AsKoL/Ccn8iTrwk3uErdyhetGH+c7VRQ7Itim2GL0IhBRq5rtojVDk00buMRmFmBpw1RvHXq97Gup965LbozA==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.3.2", "cross-spawn": "^6.0.5", "diff": "^3.5.0", "enhanced-resolve": "^4.0.0", - "envinfo": "^5.7.0", + "envinfo": "^4.4.2", "glob-all": "^3.1.0", "global-modules": "^1.0.0", - "got": "^8.3.1", + "got": "^8.2.0", "import-local": "^1.0.0", - "inquirer": "^5.2.0", - "interpret": "^1.1.0", + "inquirer": "^5.1.0", + "interpret": "^1.0.4", "jscodeshift": "^0.5.0", - "listr": "^0.14.1", + "listr": "^0.13.0", "loader-utils": "^1.1.0", - "lodash": "^4.17.10", + "lodash": "^4.17.5", "log-symbols": "^2.2.0", "mkdirp": "^0.5.1", "p-each-series": "^1.0.0", "p-lazy": "^1.0.0", - "prettier": "^1.12.1", - "supports-color": "^5.4.0", - "v8-compile-cache": "^2.0.0", + "prettier": "^1.5.3", + "supports-color": "^5.3.0", + "v8-compile-cache": "^1.1.2", "webpack-addons": "^1.1.5", "yargs": "^11.1.0", - "yeoman-environment": "^2.1.1", - "yeoman-generator": "^2.0.5" + "yeoman-environment": "^2.0.0", + "yeoman-generator": "^2.0.4" }, "dependencies": { "ansi-regex": { @@ -11948,6 +12116,19 @@ "wrap-ansi": "^2.0.0" } }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -12001,9 +12182,9 @@ } }, "webpack-dev-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", - "integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz", + "integrity": "sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==", "dev": true, "requires": { "loud-rejection": "^1.6.0", @@ -12011,7 +12192,7 @@ "mime": "^2.1.0", "path-is-absolute": "^1.0.0", "range-parser": "^1.0.3", - "url-join": "^2.0.2", + "url-join": "^4.0.0", "webpack-log": "^1.0.1" }, "dependencies": { @@ -12036,15 +12217,14 @@ } }, "webpack-httpolyglot-server": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/webpack-httpolyglot-server/-/webpack-httpolyglot-server-0.3.0.tgz", - "integrity": "sha512-Ab0iYT8f9Ni7PgjI/YY8cJRYmtLrdKxZV7L+nXsD7x5khB4XVwg4aAtSmx3EitvAZZIr8TTzmFl3VfbLrpkKvw==", + "version": "github:brave/webpack-httpolyglot-server#d9aab3c052bd1dd6b4770d331511220c456303e9", + "from": "github:brave/webpack-httpolyglot-server", "dev": true, "requires": { "express": "^4.14.0", "httpolyglot": "^0.1.1", "lodash.omit": "^4.5.0", - "webpack-dev-middleware": "^2.0.4", + "webpack-dev-middleware": "^3.1.3", "webpack-hot-middleware": "^2.12.2" } }, @@ -12098,9 +12278,9 @@ "dev": true }, "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", + "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -12115,9 +12295,9 @@ "dev": true }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -12318,24 +12498,22 @@ } }, "yeoman-environment": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.0.tgz", - "integrity": "sha512-PHSAkVOqYdcR+C+Uht1SGC4eVD/9OhygYFkYaI66xF8vKIeS1RNYay+umj2ZrQeJ50tF5Q/RSO6qGDz9y3Ifug==", + "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.1.0", - "cross-spawn": "^6.0.5", "debug": "^3.1.0", "diff": "^3.3.1", "escape-string-regexp": "^1.0.2", - "globby": "^8.0.1", + "globby": "^6.1.0", "grouped-queue": "^0.3.3", - "inquirer": "^5.2.0", + "inquirer": "^3.3.0", "is-scoped": "^1.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.4", "log-symbols": "^2.1.0", "mem-fs": "^1.1.0", - "strip-ansi": "^4.0.0", "text-table": "^0.2.0", "untildify": "^3.0.2" }, @@ -12355,19 +12533,26 @@ "ms": "2.0.0" } }, - "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" } }, "strip-ansi": { @@ -12414,6 +12599,19 @@ "yeoman-environment": "^2.0.5" }, "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", diff --git a/package.json b/package.json index 3513dc05dd11..91db4d841b94 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "webpack": "^4.16.1", "webpack-cli": "^2.0.15", "webpack-hot-middleware": "^2.22.3", - "webpack-httpolyglot-server": "^0.3.0" + "webpack-httpolyglot-server": "github:brave/webpack-httpolyglot-server" }, "dependencies": { "@types/selenium-webdriver": "^3.0.8", @@ -104,7 +104,8 @@ "redux": "^3.7.2", "redux-logger": "^3.0.6", "redux-thunk": "2.2.0", - "uglifyjs-webpack-plugin": "^1.2.5" + "uglifyjs-webpack-plugin": "^1.2.5", + "unique-selector": "^0.3.6" }, "optionalDependencies": { "pre-push": "^0.1.1" diff --git a/test/app/actions/cosmeticFilterActionsTest.ts b/test/app/actions/cosmeticFilterActionsTest.ts new file mode 100644 index 000000000000..bb310334c232 --- /dev/null +++ b/test/app/actions/cosmeticFilterActionsTest.ts @@ -0,0 +1,34 @@ +/* global describe, it */ +/* 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 'mocha' +import * as assert from 'assert' +import * as types from '../../../app/constants/cosmeticFilterTypes' +import * as actions from '../../../app/actions/cosmeticFilterActions' +import {} from '../../../app/types/actions/cosmeticFilterActions' + +describe('cosmeticFilterActions', () => { + it('siteCosmeticFilterAdded action', () => { + const origin = 'https://a.com' + const cssfilter = '#filter' + assert.deepEqual(actions.siteCosmeticFilterAdded(origin, cssfilter), { + type: types.SITE_COSMETIC_FILTER_ADDED, + origin, + cssfilter + }) + }) + it('siteCosmeticFilterRemoved action', () => { + const origin = 'https://a.com' + assert.deepEqual(actions.siteCosmeticFilterRemoved(origin), { + type: types.SITE_COSMETIC_FILTER_REMOVED, + origin + }) + }) + it('allCosmeticFiltersRemoved action', () => { + assert.deepEqual(actions.allCosmeticFiltersRemoved(), { + type: types.ALL_COSMETIC_FILTERS_REMOVED + }) + }) +}) diff --git a/test/app/actions/webNavigationActionsTest.ts b/test/app/actions/webNavigationActionsTest.ts index 26d8d56e3c75..266e1fd4eb3c 100644 --- a/test/app/actions/webNavigationActionsTest.ts +++ b/test/app/actions/webNavigationActionsTest.ts @@ -20,4 +20,16 @@ describe('webNavigationActions', () => { isMainFrame }) }) + it('onCommitted', () => { + const tabId = 1 + const url = 'https://www.brave.com' + const isMainFrame = true + assert.deepEqual(actions.onCommitted(tabId, url, isMainFrame), { + type: types.ON_COMMITTED, + url, + tabId, + isMainFrame + }) + }) + }) diff --git a/test/app/background/api/cosmeticFilterAPITest.ts b/test/app/background/api/cosmeticFilterAPITest.ts new file mode 100644 index 000000000000..eaeee24750dc --- /dev/null +++ b/test/app/background/api/cosmeticFilterAPITest.ts @@ -0,0 +1,223 @@ + +import 'mocha' +import * as sinon from 'sinon' +import * as assert from 'assert' + +import * as cosmeticFilterAPI from '../../../../app/background/api/cosmeticFilterAPI' + +describe('cosmeticFilterTestSuite', () => { + describe('addSiteCosmeticFilter', function () { + const url = 'https://www.brave.com' + const filter = '#cssFilter' + + before(function () { + this.getStorageStub = sinon.stub(chrome.storage.local, 'get') + this.setStorageStub = sinon.stub(chrome.storage.local, 'set') + }) + after(function () { + this.getStorageStub.restore() + this.setStorageStub.restore() + }) + beforeEach(function () { + this.getStorageStub.reset() + this.setStorageStub.reset() + }) + + it('passes only 1 arg to chrome.storage.local.set', function () { + this.getStorageStub.yields({ + 'list': { + 'hostname': ['samplefilter'] + } + }) + cosmeticFilterAPI.addSiteCosmeticFilter(url, filter) + assert.equal(this.setStorageStub.getCall(0).args.length, 1) + }) + it('passes the correct arguments to chrome.storage.local.set when storage is empty', function () { + this.getStorageStub.yields({}) + cosmeticFilterAPI.addSiteCosmeticFilter(url, filter) + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: { + 'https://www.brave.com': ['#cssFilter'] + } + }) + }) + it('passes the correct arguments to chrome.storage.local.set when storage is undefined', function () { + this.getStorageStub.yields(undefined) + cosmeticFilterAPI.addSiteCosmeticFilter(url, filter) + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: { + 'https://www.brave.com': ['#cssFilter'] + } + }) + }) + it('can add more than 1 filter', function () { + this.getStorageStub.yields({ + 'cosmeticFilterList': { + 'hostname': ['samplefilter'] + } + }) + cosmeticFilterAPI.addSiteCosmeticFilter('hostname', 'samplefilter2') + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + 'cosmeticFilterList': { + 'hostname': ['samplefilter', 'samplefilter2'] + } + }) + }) + }) + describe('removeSiteFilter', function () { + const url = 'https://www.brave.com' + const filter = '#cssFilter' + + before(function () { + this.getStorageStub = sinon.stub(chrome.storage.local, 'get') + this.setStorageStub = sinon.stub(chrome.storage.local, 'set') + }) + after(function () { + this.getStorageStub.restore() + this.setStorageStub.restore() + }) + beforeEach(function () { + this.getStorageStub.reset() + this.setStorageStub.reset() + }) + it('passes only 1 arg to chrome.storage.local.set', function () { + this.getStorageStub.yields({ + 'cosmeticFilterList': { + url: filter + } + }) + cosmeticFilterAPI.removeSiteFilter(url) + assert.equal(this.setStorageStub.getCall(0).args.length, 1) + }) + it('removes the correct filter', function () { + this.getStorageStub.yields({ + cosmeticFilterList: { + 'https://www.brave.com': ['#cssFilter'], + 'https://notbrave.com': ['notACSSFilter'] + } + }) + cosmeticFilterAPI.removeSiteFilter(url) + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: { + 'https://notbrave.com': ['notACSSFilter'] + } + }) + }) + it('handles empty storage', function () { + this.getStorageStub.yields({}) + cosmeticFilterAPI.removeSiteFilter(url) + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: {} + }) + }) + it('handles undefined storage', function () { + this.getStorageStub.yields(undefined) + cosmeticFilterAPI.removeSiteFilter(url) + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: {} + }) + }) + it('handles url not in storage', function () { + this.getStorageStub.yields({ + cosmeticFilterList: { + url: filter + } + }) + cosmeticFilterAPI.removeSiteFilter('urlNotInStorage') + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: { + url: filter + } + }) + }) + }) + describe('removeAllFilters', function () { + before(function () { + this.getStorageStub = sinon.stub(chrome.storage.local, 'get') + this.setStorageStub = sinon.stub(chrome.storage.local, 'set') + }) + after(function () { + this.getStorageStub.restore() + this.setStorageStub.restore() + }) + beforeEach(function () { + this.getStorageStub.reset() + this.setStorageStub.reset() + }) + + it('sets empty list object', function () { + this.getStorageStub.yields({ + cosmeticFilterList: { + 'hostname': 'isNotEmpty' + } + }) + cosmeticFilterAPI.removeAllFilters() + assert.deepEqual(this.setStorageStub.getCall(0).args[0], { + cosmeticFilterList: {} + }) + }) + }) + describe('applySiteFilters', function () { + const filter = '#cssFilter' + const filter2 = '#cssFilter2' + + before(function () { + this.getStorageStub = sinon.stub(chrome.storage.local, 'get') + this.setStorageStub = sinon.stub(chrome.storage.local, 'set') + this.insertCSSStub = sinon.stub(chrome.tabs, 'insertCSS') + }) + after(function () { + this.getStorageStub.restore() + this.setStorageStub.restore() + this.insertCSSStub.restore() + }) + beforeEach(function () { + this.getStorageStub.reset() + this.setStorageStub.reset() + this.insertCSSStub.reset() + }) + it('applies the correct filter', function () { + this.getStorageStub.yields({ + cosmeticFilterList: { + 'brave.com': [filter] + } + }) + cosmeticFilterAPI.applySiteFilters('brave.com') + assert.deepEqual(this.insertCSSStub.getCall(0).args[0], { + code: `${filter} {display: none;}` + }) + }) + it('applies multiple filters correctly', function () { + this.getStorageStub.yields({ + cosmeticFilterList: { + 'brave.com': [filter, filter2] + } + }) + cosmeticFilterAPI.applySiteFilters('brave.com') + assert.deepEqual(this.insertCSSStub.getCall(0).args[0], { + code: `${filter} {display: none;}` + }) + assert.deepEqual(this.insertCSSStub.getCall(1).args[0], { + code: `${filter2} {display: none;}` + }) + + }) + // chrome.local.storage.get() always returns an empty object if nothing exists + it('doesn\'t apply filters if storage for host is implicitly undefined', function () { + this.getStorageStub.yields({ + cosmeticFilterList: {} + }) + cosmeticFilterAPI.applySiteFilters('brave.com') + assert.equal(this.insertCSSStub.called, false) + }) + it('doesn\'t apply filters if storage is explicitly undefined', function () { + this.getStorageStub.yields({ + cosmeticFilterList: { + 'brave.com': undefined + } + }) + cosmeticFilterAPI.applySiteFilters('brave.com') + assert.equal(this.insertCSSStub.called, false) + }) + }) +}) diff --git a/test/app/background/api/shieldsAPITest.ts b/test/app/background/api/shieldsAPITest.ts index c7afca6f7fdf..867426392dff 100644 --- a/test/app/background/api/shieldsAPITest.ts +++ b/test/app/background/api/shieldsAPITest.ts @@ -11,7 +11,7 @@ import * as shieldsAPI from '../../../../app/background/api/shieldsAPI' import { activeTabData } from '../../../testData' import { Tab as TabType } from '../../../../app/types/state/shieldsPannelState' import * as resourceIdentifiers from '../../../../app/constants/resourceIdentifiers' - + describe('Shields API', () => { describe('getShieldSettingsForTabData', function () { it('returns a rejected promise when no tab data is specified', function (cb) { @@ -136,7 +136,7 @@ describe('Shields API', () => { this.spy.restore() }) - it('calls chrome.tabs.getAsync for the ative tab', function () { + it('calls chrome.tabs.getAsync for the active tab', function () { assert(this.spy.withArgs(this.tabId).calledOnce) }) @@ -374,8 +374,8 @@ describe('Shields API', () => { it('resolves the returned promise', function (cb) { this.p .then(function () { - cb() - }) + cb() + }) .catch((e: Error) => { console.error(e.toString()) }) @@ -391,7 +391,7 @@ describe('Shields API', () => { }) }) - describe('setAllowScriptOriginsOnce', function() { + describe('setAllowScriptOriginsOnce', function () { before(function () { this.spy = sinon.spy(chrome.braveShields, 'allowScriptsOnce') this.p = shieldsAPI.setAllowScriptOriginsOnce( @@ -411,7 +411,7 @@ describe('Shields API', () => { }) it('resolves the returned promise', function (cb) { this.p - .then(function() { + .then(function () { cb() }) .catch((e: Error) => { diff --git a/test/app/background/api/tabsAPITest.ts b/test/app/background/api/tabsAPITest.ts index b5eceb778075..23a761ba8e39 100644 --- a/test/app/background/api/tabsAPITest.ts +++ b/test/app/background/api/tabsAPITest.ts @@ -43,7 +43,7 @@ describe('tabs API', () => { p.then(() => { assert(this.spy.calledOnce) assert.equal(this.spy.getCall(0).args[0], tabId) - assert.deepEqual(this.spy.getCall(0).args[1], {bypassCache}) + assert.deepEqual(this.spy.getCall(0).args[1], { bypassCache }) cb() }) }) @@ -54,7 +54,7 @@ describe('tabs API', () => { p.then(() => { assert(this.spy.calledOnce) assert.equal(this.spy.getCall(0).args[0], tabId) - assert.deepEqual(this.spy.getCall(0).args[1], {bypassCache}) + assert.deepEqual(this.spy.getCall(0).args[1], { bypassCache }) cb() }) }) diff --git a/test/app/background/reducers/cosmeticFilterReducerTest.ts b/test/app/background/reducers/cosmeticFilterReducerTest.ts new file mode 100644 index 000000000000..5cfa4d687bd5 --- /dev/null +++ b/test/app/background/reducers/cosmeticFilterReducerTest.ts @@ -0,0 +1,473 @@ +/* global describe, it, before, after, afterEach */ +/* 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 'mocha' +import * as sinon from 'sinon' +import * as assert from 'assert' +import * as shieldPanelTypes from '../../../../app/constants/shieldsPanelTypes' +import * as cosmeticFilterTypes from '../../../../app/constants/cosmeticFilterTypes' +import * as windowTypes from '../../../../app/constants/windowTypes' +import * as tabTypes from '../../../../app/constants/tabTypes' +import * as webNavigationTypes from '../../../../app/constants/webNavigationTypes' +import shieldsPanelReducer from '../../../../app/background/reducers/shieldsPanelReducer' +import * as shieldsAPI from '../../../../app/background/api/shieldsAPI' +import cosmeticFilterReducer from '../../../../app/background/reducers/cosmeticFilterReducer' +import * as cosmeticFilterAPI from '../../../../app/background/api/cosmeticFilterAPI' +import * as tabsAPI from '../../../../app/background/api/tabsAPI' +import * as shieldsPanelState from '../../../../app/state/shieldsPanelState' +import { initialState } from '../../../testData' +import * as deepFreeze from 'deep-freeze-node' +import { ShieldDetails } from '../../../../app/types/actions/shieldsPanelActions' +import * as actions from '../../../../app/actions/shieldsPanelActions' +import { State } from '../../../../app/types/state/shieldsPannelState' + +describe('cosmeticFilterReducer', () => { + it('should handle initial state', () => { + assert.deepEqual( + shieldsPanelReducer(undefined, actions.blockAdsTrackers('allow')), initialState.cosmeticFilter) + }) + describe('ON_BEFORE_NAVIGATION', function () { + before(function () { + this.spy = sinon.spy(shieldsPanelState, 'resetBlockingStats') + this.resetNoScriptInfoSpy = sinon.spy(shieldsPanelState, 'resetNoScriptInfo') + this.resetBlockingResourcesSpy = sinon.spy(shieldsPanelState, 'resetBlockingResources') + this.tabId = 1 + }) + after(function () { + this.spy.restore() + this.resetNoScriptInfoSpy.restore() + this.resetBlockingResourcesSpy.restore() + }) + afterEach(function () { + this.spy.reset() + this.resetNoScriptInfoSpy.reset() + }) + it('calls resetBlockingStats when isMainFrame is true', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: true + }) + assert.equal(this.spy.calledOnce, true) + assert.equal(this.spy.getCall(0).args[1], this.tabId) + }) + it('does not call resetBlockingStats when isMainFrame is false', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: false + }) + assert.equal(this.spy.notCalled, true) + }) + it('calls resetNoScriptInfo when isMainFrame is true', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: true + }) + assert.equal(this.resetNoScriptInfoSpy.calledOnce, true) + assert.equal(this.resetNoScriptInfoSpy.getCall(0).args[1], this.tabId) + assert.equal(this.resetNoScriptInfoSpy.getCall(0).args[2], 'https://www.brave.com') + }) + it('does not call resetNoScriptInfo when isMainFrame is false', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: false + }) + assert.equal(this.resetNoScriptInfoSpy.notCalled, true) + }) + it('calls resetBlockingResources when isMainFrame is true', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: true + }) + assert.equal(this.spy.calledOnce, true) + assert.equal(this.spy.getCall(0).args[1], this.tabId) + }) + it('does not call resetBlockingResources when isMainFrame is false', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: false + }) + assert.equal(this.spy.notCalled, true) + }) + }) + describe('ON_COMMITTED', function () { + before(function () { + this.spy = sinon.spy(shieldsPanelState, 'resetBlockingStats') + this.resetNoScriptInfoSpy = sinon.spy(shieldsPanelState, 'resetNoScriptInfo') + this.resetBlockingResourcesSpy = sinon.spy(shieldsPanelState, 'resetBlockingResources') + this.tabId = 1 + }) + after(function () { + this.spy.restore() + this.resetNoScriptInfoSpy.restore() + this.resetBlockingResourcesSpy.restore() + }) + afterEach(function () { + this.spy.reset() + this.resetNoScriptInfoSpy.reset() + }) + it('does not call resetBlockingStats when isMainFrame is false', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: false + }) + assert.equal(this.spy.notCalled, true) + }) + it('calls resetNoScriptInfo when isMainFrame is true', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: true + }) + assert.equal(this.resetNoScriptInfoSpy.calledOnce, true) + assert.equal(this.resetNoScriptInfoSpy.getCall(0).args[1], this.tabId) + assert.equal(this.resetNoScriptInfoSpy.getCall(0).args[2], 'https://www.brave.com') + }) + it('does not call resetNoScriptInfo when isMainFrame is false', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: false + }) + assert.equal(this.resetNoScriptInfoSpy.notCalled, true) + }) + it('calls resetBlockingResources when isMainFrame is true', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: true + }) + assert.equal(this.spy.calledOnce, true) + assert.equal(this.spy.getCall(0).args[1], this.tabId) + }) + it('does not call resetBlockingResources when isMainFrame is false', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: webNavigationTypes.ON_BEFORE_NAVIGATION, + tabId: this.tabId, + url: 'https://www.brave.com', + isMainFrame: false + }) + assert.equal(this.spy.notCalled, true) + }) + }) + describe('WINDOW_REMOVED', function () { + before(function () { + this.spy = sinon.spy(shieldsPanelState, 'removeWindowInfo') + this.windowId = 1 + }) + after(function () { + this.spy.restore() + }) + it('calls shieldsPanelState.removeWindowInfo', function () { + shieldsPanelReducer(initialState.shieldsPanel, { + type: windowTypes.WINDOW_REMOVED, + windowId: this.windowId + }) + assert.equal(this.spy.calledOnce, true) + assert.equal(this.spy.getCall(0).args[1], this.windowId) + }) + }) + describe('WINDOW_FOCUS_CHANGED', function () { + before(function () { + this.updateFocusedWindowSpy = sinon.spy(shieldsPanelState, 'updateFocusedWindow') + this.requestShieldPanelDataSpy = sinon.spy(shieldsAPI, 'requestShieldPanelData') + this.windowId = 1 + this.tabId = 2 + const state = deepFreeze({ + ...initialState.shieldsPanel, + windows: { + 1: this.tabId + }, + tabs: { + [this.tabId]: { url: 'https://brave.com' } + } + }) + shieldsPanelReducer(state, { + type: windowTypes.WINDOW_FOCUS_CHANGED, + windowId: this.windowId + }) + }) + after(function () { + this.updateFocusedWindowSpy.restore() + this.requestShieldPanelDataSpy.restore() + }) + it('calls shieldsPanelState.updateFocusedWindow', function () { + assert.equal(this.updateFocusedWindowSpy.calledOnce, true) + assert.equal(this.updateFocusedWindowSpy.getCall(0).args[1], this.windowId) + }) + it('calls shieldsPanelState.requestShieldPanelDataSpy ', function () { + assert.equal(this.requestShieldPanelDataSpy.withArgs(this.tabId).calledOnce, true) + }) + }) + describe('TAB_DATA_CHANGED', function () { + before(function () { + this.updateActiveTabSpy = sinon.spy(shieldsPanelState, 'updateActiveTab') + this.windowId = 1 + this.tabId = 2 + this.state = deepFreeze({ ...initialState.shieldsPanel, windows: { 1: this.tabId }, tabs: {} }) + }) + after(function () { + this.updateActiveTabSpy.restore() + }) + afterEach(function () { + this.updateActiveTabSpy.reset() + }) + it('calls shieldsPanelState.updateActiveTab when the tab is active', function () { + shieldsPanelReducer(this.state, { + type: tabTypes.TAB_DATA_CHANGED, + tabId: this.tabId, + tab: { + active: true, + id: this.tabId, + windowId: this.windowId, + index: 1, + pinned: false, + highlighted: false, + incognito: false, + selected: false + }, + changeInfo: {} + }) + assert.equal(this.updateActiveTabSpy.calledOnce, true) + assert.equal(this.updateActiveTabSpy.getCall(0).args[1], this.windowId) + assert.equal(this.updateActiveTabSpy.getCall(0).args[2], this.tabId) + }) + it('does not call shieldsPanelState.updateActiveTab when the tab is not active', function () { + shieldsPanelReducer(this.state, { + type: tabTypes.TAB_DATA_CHANGED, + tabId: this.tabId, + tab: { + active: false, + id: this.tabId, + windowId: this.windowId, + index: 1, + pinned: false, + highlighted: false, + incognito: false, + selected: false + }, + changeInfo: {} + }) + assert.equal(this.updateActiveTabSpy.notCalled, true) + }) + }) + describe('TAB_CREATED', function () { + before(function () { + this.updateActiveTabSpy = sinon.spy(shieldsPanelState, 'updateActiveTab') + this.windowId = 1 + this.tabId = 2 + this.state = { + ...initialState.shieldsPanel, + windows: { + 1: this.tabId + }, + tabs: {} + } + }) + after(function () { + this.updateActiveTabSpy.restore() + }) + afterEach(function () { + this.updateActiveTabSpy.reset() + }) + it('calls shieldsPanelState.updateActiveTab when the tab is active', function () { + shieldsPanelReducer(this.state, { + type: tabTypes.TAB_CREATED, + tab: { + active: true, + id: this.tabId, + windowId: this.windowId, + index: 1, + pinned: false, + highlighted: false, + incognito: false, + selected: false + } + }) + assert.equal(this.updateActiveTabSpy.calledOnce, true) + assert.equal(this.updateActiveTabSpy.getCall(0).args[1], this.windowId) + assert.equal(this.updateActiveTabSpy.getCall(0).args[2], this.tabId) + }) + it('does not call shieldsPanelState.updateActiveTab when the tab is not active', function () { + shieldsPanelReducer(this.state, { + type: tabTypes.TAB_CREATED, + tab: { + active: false, + id: this.tabId, + windowId: this.windowId, + index: 1, + pinned: false, + highlighted: false, + incognito: false, + selected: false + } + }) + assert.equal(this.updateActiveTabSpy.notCalled, true) + }) + }) + const origin = 'https://brave.com' + const state: State = deepFreeze({ + tabs: { + 2: { + origin, + hostname: 'brave.com', + adsBlocked: 0, + controlsOpen: true, + braveShields: 'allow', + trackersBlocked: 0, + httpsRedirected: 0, + javascriptBlocked: 0, + fingerprintingBlocked: 0, + id: 2, + httpUpgradableResources: 'block', + javascript: 'block', + trackers: 'block', + ads: 'block', + fingerprinting: 'block', + cookies: 'block', + noScriptInfo: {}, + adsBlockedResources: [], + fingerprintingBlockedResources: [], + httpsRedirectedResources: [], + javascriptBlockedResources: [], + trackersBlockedResources: [] + } + }, + windows: { + 1: 2 + }, + currentWindowId: 1 + }) + describe('SHIELDS_PANEL_DATA_UPDATED', function () { + it('updates state detail', function () { + const tabId = 2 + const details: ShieldDetails = { + id: tabId, + hostname: 'brave.com', + origin: 'brave.com', + ads: 'block', + trackers: 'block', + httpUpgradableResources: 'block', + javascript: 'block', + fingerprinting: 'block', + cookies: 'block' + } + assert.deepEqual( + shieldsPanelReducer(initialState.shieldsPanel, { + type: shieldPanelTypes.SHIELDS_PANEL_DATA_UPDATED, + details + }), { + currentWindowId: -1, + tabs: { + [tabId]: { + adsBlocked: 0, + trackersBlocked: 0, + httpsRedirected: 0, + javascriptBlocked: 0, + fingerprintingBlocked: 0, + hostname: 'brave.com', + origin: 'brave.com', + id: tabId, + ads: 'block', + trackers: 'block', + httpUpgradableResources: 'block', + javascript: 'block', + fingerprinting: 'block', + cookies: 'block', + controlsOpen: true, + braveShields: 'allow', + noScriptInfo: {}, + adsBlockedResources: [], + fingerprintingBlockedResources: [], + httpsRedirectedResources: [], + javascriptBlockedResources: [], + trackersBlockedResources: [] + } + }, + windows: {} + }) + }) + }) + describe('SHIELDS_TOGGLED', function () { + before(function () { + this.reloadTabSpy = sinon.spy(tabsAPI, 'reloadTab') + this.setAllowBraveShieldsSpy = sinon.spy(shieldsAPI, 'setAllowBraveShields') + }) + after(function () { + this.reloadTabSpy.restore() + this.setAllowBraveShieldsSpy.restore() + }) + it('should call setAllowBraveShields', function () { + assert.deepEqual( + shieldsPanelReducer(state, { + type: shieldPanelTypes.SHIELDS_TOGGLED, + setting: 'allow' + }), state) + assert.equal(this.setAllowBraveShieldsSpy.withArgs(origin, 'allow').calledOnce, true) + }) + }) + describe('SITE_COSMETIC_FILTER_REMOVED', function () { + before(function () { + this.removeSiteFilterSpy = sinon.spy(cosmeticFilterAPI, 'removeSiteFilter') + }) + after(function () { + this.removeSiteFilterSpy.restore() + }) + it('should call removeSiteFilter', function () { + assert.deepEqual( + cosmeticFilterReducer(state, { + type: cosmeticFilterTypes.SITE_COSMETIC_FILTER_REMOVED, + origin + }), state) + }) + }) + describe('ALL_COSMETIC_FILTERS_REMOVED', function () { + before(function () { + this.removeSiteFilterSpy = sinon.spy(cosmeticFilterAPI, 'removeAllFilters') + }) + after(function () { + this.removeSiteFilterSpy.restore() + }) + it('should call removeAllFilters', function () { + assert.deepEqual( + cosmeticFilterReducer(state, { + type: cosmeticFilterTypes.ALL_COSMETIC_FILTERS_REMOVED + }), state) + }) + }) + describe('SITE_COSMETIC_FILTER_ADDED', function () { + before(function () { + this.removeSiteFilterSpy = sinon.spy(cosmeticFilterAPI, 'addSiteCosmeticFilter') + }) + after(function () { + this.removeSiteFilterSpy.restore() + }) + it('should call addSiteCosmeticFilter', function () { + const cssfilter = '#test' + assert.deepEqual( + cosmeticFilterReducer(state, { + type: cosmeticFilterTypes.SITE_COSMETIC_FILTER_ADDED, + origin, + cssfilter + }), state) + }) + }) +}) diff --git a/test/app/background/reducers/shieldsPanelReducerTest.ts b/test/app/background/reducers/shieldsPanelReducerTest.ts index 7a7ae6463edf..e0653f845957 100644 --- a/test/app/background/reducers/shieldsPanelReducerTest.ts +++ b/test/app/background/reducers/shieldsPanelReducerTest.ts @@ -160,7 +160,7 @@ describe('braveShieldsPanelReducer', () => { this.updateActiveTabSpy = sinon.spy(shieldsPanelState, 'updateActiveTab') this.windowId = 1 this.tabId = 2 - this.state = deepFreeze({...initialState.shieldsPanel, windows: {1: this.tabId}, tabs: {}}) + this.state = deepFreeze({ ...initialState.shieldsPanel, windows: { 1: this.tabId }, tabs: {} }) }) after(function () { this.updateActiveTabSpy.restore() @@ -308,7 +308,7 @@ describe('braveShieldsPanelReducer', () => { httpUpgradableResources: 'block', javascript: 'block', fingerprinting: 'block', - cookies: 'block', + cookies: 'block' } assert.deepEqual( shieldsPanelReducer(initialState.shieldsPanel, { @@ -997,7 +997,7 @@ describe('braveShieldsPanelReducer', () => { } }, windows: { - 1: 2 + 1: 2 } }) }) @@ -1253,7 +1253,7 @@ describe('braveShieldsPanelReducer', () => { }) }) - describe('ALLOW_SCRIPT_ORIGINS_ONCE', function() { + describe('ALLOW_SCRIPT_ORIGINS_ONCE', function () { before(function () { this.reloadTabSpy = sinon.spy(tabsAPI, 'reloadTab') this.setAllowScriptOriginsOnceSpy = sinon.spy(shieldsAPI, 'setAllowScriptOriginsOnce') @@ -1274,7 +1274,7 @@ describe('braveShieldsPanelReducer', () => { }) }) - describe('CHANGE_NO_SCRIPT_SETTINGS', function() { + describe('CHANGE_NO_SCRIPT_SETTINGS', function () { before(function () { this.spy = sinon.spy(shieldsPanelState, 'changeNoScriptSettings') }) @@ -1283,7 +1283,7 @@ describe('braveShieldsPanelReducer', () => { }) it('should call changeNoScriptSettings', function () { const tabId = 2 - const stateWithNoScriptInfo : State = { + const stateWithNoScriptInfo: State = { tabs: { 2: { origin, @@ -1321,7 +1321,7 @@ describe('braveShieldsPanelReducer', () => { }, currentWindowId: 1 } - let nextState = shieldsPanelReducer(stateWithNoScriptInfo, { + let nextState = shieldsPanelReducer(stateWithNoScriptInfo, { type: types.CHANGE_NO_SCRIPT_SETTINGS, origin }) @@ -1355,15 +1355,15 @@ describe('braveShieldsPanelReducer', () => { trackersBlockedResources: [], httpsRedirectedResources: [], javascriptBlockedResources: [], - fingerprintingBlockedResources: [], + fingerprintingBlockedResources: [] } }, windows: { 1: 2 }, currentWindowId: 1 - }) - assert.equal(this.spy.withArgs(stateWithNoScriptInfo, tabId, origin).calledOnce, true) + }) + assert.equal(this.spy.withArgs(stateWithNoScriptInfo, tabId, origin).calledOnce, true) }) }) }) diff --git a/test/app/background/reducersTest.ts b/test/app/background/reducersTest.ts index 98356ee3eb10..86e232c7efc7 100644 --- a/test/app/background/reducersTest.ts +++ b/test/app/background/reducersTest.ts @@ -6,18 +6,18 @@ import 'mocha' import * as assert from 'assert' import reducers from '../../../app/background/reducers' -import {initialState} from '../../testData' +import { initialState } from '../../testData' describe('reducers test', () => { - it('reduers is a combined reducer function', function () { + it('reducers is a combined reducer function', function () { assert.equal(typeof reducers, 'function') }) - it('reduers passed with an unknown action returns the same input', function () { + it('reducers passed with an unknown action returns the same input', function () { const unknownAction = { type: 'DA07BE00-43FB-44C3-B020-49308A0D3E78' } - const state = {...initialState } + const state = { ...initialState } assert.equal(reducers(state, unknownAction), state) }) }) diff --git a/test/app/background/storeTest.ts b/test/app/background/storeTest.ts index 8c8eac01a17a..ee052d9ce9a0 100644 --- a/test/app/background/storeTest.ts +++ b/test/app/background/storeTest.ts @@ -6,7 +6,7 @@ import 'mocha' import * as assert from 'assert' import store from '../../../app/background/store' -import {initialState} from '../../testData' +import { initialState } from '../../testData' describe('store test', () => { it('store can get state', function () { diff --git a/test/app/state/shieldsPanelStateTest.ts b/test/app/state/shieldsPanelStateTest.ts index 11e522948b45..8be5999515fc 100644 --- a/test/app/state/shieldsPanelStateTest.ts +++ b/test/app/state/shieldsPanelStateTest.ts @@ -24,7 +24,7 @@ const state: State = deepFreeze({ 3: { id: 3 }, - 4: { + 4: { id: 4 } }, diff --git a/test/testData.ts b/test/testData.ts index 665186ff1b49..1857f3d2f31a 100644 --- a/test/testData.ts +++ b/test/testData.ts @@ -1,9 +1,10 @@ /* 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/. */ +* 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 * as deepFreeze from 'deep-freeze-node' import { Tab } from '../app/types/state/shieldsPannelState' +import { BlockDetails } from '../app/types/actions/shieldsPanelActions' interface CustomTab extends Tab { url: string @@ -73,8 +74,8 @@ export const getMockChrome = () => { onStartup: new ChromeEvent() }, browserAction: { - setBadgeText: function (text: string) { }, - setIcon: function (icon: string, tabId: number) { } + setBadgeText: function (text: string) {}, + setIcon: function (icon: string, tabId: number) {} }, tabs: { queryAsync: function () { @@ -89,6 +90,7 @@ export const getMockChrome = () => { reload: function (tabId: number, reloadProperties: object, cb: () => void) { setImmediate(cb) }, + insertCSS: function (details: any) {}, onActivated: new ChromeEvent(), onCreated: new ChromeEvent(), onUpdated: new ChromeEvent() @@ -103,7 +105,7 @@ export const getMockChrome = () => { }, braveShields: { onBlocked: new ChromeEvent(), - allowScriptsOnce: function(origins: Array, tabId: number, cb: () => void) { + allowScriptsOnce: function (origins: Array, tabId: number, cb: () => void) { setImmediate(cb) } }, @@ -130,12 +132,23 @@ export const getMockChrome = () => { } }, i18n: { - getMessage: function (message: string) { } + getMessage: function (message: string) {} + }, + storage: { + local: { + get: function (url: string) {}, + set: function (url: string, cssfilter: string) {} + } } } } export const initialState = deepFreeze({ + cosmeticFilter: { + currentWindowId: -1, + tabs: {}, + windows: {} + }, shieldsPanel: { currentWindowId: -1, tabs: {}, diff --git a/webpack/dev.config.js b/webpack/dev.config.js index 946f2d7b3d72..74ab81eea765 100644 --- a/webpack/dev.config.js +++ b/webpack/dev.config.js @@ -12,9 +12,11 @@ const baseDevConfig = () => ({ devtool: 'eval-cheap-module-source-map', entry: { braveShieldsPanel: [customPath, hotScript, path.join(__dirname, '../app/braveShieldsPanel')], - background: [customPath, hotScript, path.join(__dirname, '../app/background')] + background: [customPath, hotScript, path.join(__dirname, '../app/background')], + content: [customPath, path.join(__dirname, '../app/content')], }, devMiddleware: { + writeToDisk: true, publicPath: `http://${host}:${port}/js`, stats: { colors: true diff --git a/webpack/prod.config.js b/webpack/prod.config.js index 571dd0fc4b35..a7afec84ce95 100644 --- a/webpack/prod.config.js +++ b/webpack/prod.config.js @@ -8,7 +8,8 @@ const customPath = path.join(__dirname, './customPublicPath') module.exports = { entry: { braveShieldsPanel: [customPath, path.join(__dirname, '../app/braveShieldsPanel')], - background: [customPath, path.join(__dirname, '../app/background')] + background: [customPath, path.join(__dirname, '../app/background')], + content: [customPath, path.join(__dirname, '../app/content')], }, mode: 'production', optimization: { @@ -58,8 +59,8 @@ module.exports = { loaders: [ 'style-loader', 'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]', - {loader: 'postcss-loader', options: postCSSConfig} + { loader: 'postcss-loader', options: postCSSConfig } ] }] } -} +} \ No newline at end of file